PHP前端开发

Python实现的视频播放器功能

百变鹏仔 3小时前 #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 &gt;= 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>