python开发网页视频播放器_暴风影音没了,我们就用Python做个播放器吧

视频播放在编程领域往往听着是高大上的技术,因为厂商和视频格式太多太杂了。但牛人的世界我们是从来不懂的,ffmpeg就是个牛人打造的框架,基本市面上八成的播放器都是基于ffmpeg的封装。那我们也来做一个吧。

随便搜搜就找到了FFPlayer这个库,使用也很简单,给定文件后就可以取出每帧的字节。

from ffpyplayer.player import MediaPlayer

import time

player = MediaPlayer(filename)

val = ''

while val != 'eof':

frame, val = player.get_frame()

if val != 'eof' and frame is not None:

img, t = frame

还记着物理课怎么讲电影的原理吗?就是利用了人眼的视觉残留原理,每秒给出24个连续画面,人就认为是活动影像了。所以我们只要用一个窗口定时播放上面代码取出的帧图像就可以了。

Python支持很多的图形库,而QT5最出名,而且已经官方支持Python了。代码很简单

from ffpyplayer.player import MediaPlayer

import sys

from PyQt5.QtWidgets import *

from PyQt5.QtGui import QPixmap, QImage, QImageReader

from PyQt5.QtCore import QTimer

class MyApp(QWidget):

def __init__(self, name, parent=None):

super(MyApp, self).__init__(parent)

self.label = QLabel()

self.qimg = QImage()

self.val = ''

self.player = MediaPlayer(name)

self.timer = QTimer()

self.timer.setInterval(50)

self.timer.start()

self.timer.timeout.connect(self.showFrame)

layout = QVBoxLayout()

layout.addWidget(self.label)

self.setLayout(layout)

self.setWindowTitle(name)

# self.showFullScreen()

def showFrame(self):

frame, self.val = self.player.get_frame()

if frame is not None:

img, t = frame

self.qimg = QImage(bytes(img.to_bytearray()[0]), img.get_size()[0], img.get_size()[1],

QImage.Format_RGB888)

self.label.setPixmap(QPixmap.fromImage(self.qimg))

if __name__ == '__main__':

app = QApplication(sys.argv)

t = MyApp(sys.argv[1])

t.show()

sys.exit(app.exec_())

MyApp是QT需要的窗口对象,在Main方法调用显示就好。 而窗口布局我们用了QVBoxLayout(), 里面放一个QLabel. 因为一秒等于1000毫秒,每秒24帧就是每50毫秒更新下图片,那就设QTimer的interval为50就好了,然后在QTimer的timeout connect里取出图片数据更新QLabel就可以了。

在showFrame, QLabel是用QImage来显示图片的。QImage的构造函数参数分别是图片的字体数据,宽,高,以及图片格式。

这样一个简单的播放器就实现了,至于菜单和字幕则需要了解QT的相关知识了。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值