实验项目四 直播平台

  最后一项——一个直播平台。额外功能不提了,核心还是推拉流。

 

  Part1 在Python上用ffmpeg进行推流

  参考:CSDN,Python的ffmpy貌似只能指定文件路径的输出,所以想要在Python上用ffmpeg进行推流,只能用subprocess模块启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。关于subprocess也可参见Runoob

  最后是构建了一个pushHelper类,用于满足不同的推送需求。subprocess部分的核心代码见下:

import subprocess as sp

process = sp.Popen(command, shell=False, stdout=sp.PIPE, stderr=sp.STDOUT, encoding="utf-8", text=True)

# do something

  此外这部分也用到了OpenCV这个三方库,主要用它获取摄像头帧,核心代码见下:

camera_path = ""
cap = cv.VideoCapture(camera_path)

# 获取摄像头帧
fps = int(cap.get(cv.CAP_PROP_FPS))

 

  Part1.1 获取本地视频设备列表

  关键:遍历标准输出,正则匹配即可。

cmd = []  # 指令
process = subprocess.Popen(cmd, [opt])  # 运行

for line in process.stdout:  # 读取标准输出
    #匹配需要的内容

 

  Part2 浏览器拉流

  主要是读官方flv.js中的脚本代码理解如何运作的,之后重新写脚本。不过我用的是魔改源代码的方式就是了……

 

图1 效果如图所示

  使用的时候遇到一个问题尚未解决:一个浏览器智能运行一个播放器。

 

  Part3 系统集成

  系统集成遇到的最大的问题是一个py文件下只能运行一个程序,比如说运行着Tornado的文件不能推流,推流的进程不能创建PyQt5窗口……吗?

  毋庸置疑是可以的,要用到python的多线程技术,具体内容可参考Runoob

  处理线程的启动和中止即可,由于平台实际上很简陋,暂时用不上同步&死锁相关内容。

 

  Part4 结束语

  三天做完了,都可以发个B站视频了(bushi 

  还有很多很简单的功能没做,比如说白板、数据库连接,或者说用户注册、用户中心之类的页面,都没做,不过倒是积累了很多经验。比如这次实验第一次接触的编译文件,第一次接触的多线程功能,当然还有这次实践的主题:直播(也即推拉流)。确实是很有收获的一次课程实践,要不然也不会专门写几篇文字,希望以后也能记录下去,哈哈。


2021年6月23日

15点33分

H40Y

posted @ 2021-06-23 15:33  H40Y  阅读(6)  评论(0)    收藏  举报