Python实现的视频播放器功能
这篇文章主要介绍了python实现的视频播放器功能,结合完整实例形式分析了python基于pyglet库实现视频播放功能的相关操作技巧,需要的朋友可以参考下
本文实例讲述了Python实现的视频播放器功能。分享给大家供大家参考,具体如下:
# -*- coding:utf-8 -*-#! python3# ----------------------------------------------------------------------------# pyglet# Copyright (c) 2006-2008 Alex Holkner# All rights reserved.# # Redistribution and use in source and binary forms, with or without# modification, are permitted provided that the following conditions # are met:## * Redistributions of source code must retain the above copyright# notice, this list of conditions and the following disclaimer.# * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in# the documentation and/or other materials provided with the# distribution.# * Neither the name of pyglet nor the names of its# contributors may be used to endorse or promote products# derived from this software without specific prior written# permission.## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE# POSSIBILITY OF SUCH DAMAGE.# ----------------------------------------------------------------------------'''Audio and video player with simple GUI controls.'''__docformat__ = 'restructuredtext'__version__ = '$Id: $'import sysfrom pyglet.gl import *import pygletfrom pyglet.window import keydef draw_rect(x, y, width, height): glBegin(GL_LINE_LOOP) glVertex2f(x, y) glVertex2f(x + width, y) glVertex2f(x + width, y + height) glVertex2f(x, y + height) glEnd()class Control(pyglet.event.EventDispatcher): x = y = 0 width = height = 10 def __init__(self, parent): super(Control, self).__init__() self.parent = parent def hit_test(self, x, y):#点中控件 return (self.x 1: width *= video_format.sample_aspect elif video_format.sample_aspect display_aspect: self.video_width = width self.video_height = width / video_aspect else: self.video_height = height self.video_width = height * video_aspect self.video_x = (width - self.video_width) / 2 self.video_y = (height - self.video_height) / 2 + self.GUI_HEIGHT def on_mouse_press(self, x, y, button, modifiers): for control in self.controls: if control.hit_test(x, y): control.on_mouse_press(x, y, button, modifiers) def on_key_press(self, symbol, modifiers): if symbol == key.SPACE: self.on_play_pause() elif symbol == key.ESCAPE: self.dispatch_event('on_close') def on_close(self): self.player.pause() self.close() def on_play_pause(self): if self.player.playing: self.player.pause() else: if self.player.time >= self.player.source.duration:#如果放完了 self.player.seek(0) self.player.play() self.gui_update_state() def on_draw(self): self.clear() # Video if self.player.source and self.player.source.video_format: self.player.get_texture().blit(self.video_x, self.video_y, width=self.video_width, height=self.video_height) # GUI self.slider.value = self.player.time for control in self.controls: control.draw()if __name__ == '__main__': if len(sys.argv) [<filename> ...]') sys.exit(1) for filename in sys.argv[1:]: player = pyglet.media.Player() window = PlayerWindow(player) source = pyglet.media.load(filename) player.queue(source) window.gui_update_source() window.set_default_video_size() window.set_size(400,400) window.set_visible(True) window.gui_update_state() player.play() pyglet.app.run()</filename>