使用ffmpeg轻松流媒体到youtube live、periscope、facebook live、twitch等
pylivestream的Python项目详细描述
使用ffmpeg的python脚本直播
使用纯面向对象的python(没有额外的包)和ffmpeg,同时流到一个或多个流媒体站点。
使用flake8
,mypy
类型检查和pytest
进行测试。
visual_tests.py
是对笔记本电脑上几个命令行脚本场景的快速检查。
ffmpeg用于从python子流程
流到站点,包括:
- facebook live(可能由于ffmpeg错误vis而无法工作。强制rtmps)
- youtube直播
- 潜望镜
- 抽搐
- 流媒体广播还包括mixer、ustream、vimeo、restream.io等。
Pylivestream的好处
- python脚本计算良好的流参数,并根据需要发出用于复制和粘贴的命令。
- 适用于任何操作系统(Mac、Linux、Windows)和计算平台,包括PC、Mac和Raspberry PI。
- 使用文件调整所有参数。
Pylivestream限制
- 如果网络连接出现故障,是否不自动重新启动
- 用作运行ffmpeg程序的最小命令生成器
- 不适用于双向健壮的流媒体——考虑一个基于jitsi的程序/系统。
- 由于wsl1中缺少硬件接口,因此通常无法在linux 1的windows子系统中工作。从本机窗口运行良好。
设计原理
为什么不做没有命令行,通过链接libffmpeg、libgstreamer或libav?
- 命令行方法不需要编译器或依赖于操作系统的库
- 一旦设置运行一次,就不再需要python了--只需复制并粘贴命令行即可
安装
要求:
- ffmpeg≥3.0
- python≥3.6
由于广泛使用类型提示以确保程序质量,因此需要python≥3.6。
最新版本:
python -m pip install PyLivestream
开发版本:
git clone https://github.com/scivision/PyLivestream
cd PyLivestream
python -m pip install -e .
配置:pylivestream.ini
你可以跳过这个部分,跳到"流开始"如果它是混乱的。 默认设置可能会帮助您入门。
文件包含与流相关的参数。
此文件在pip install pylivestream时复制到sys.prefix
/share/pylivestream目录中。
我们建议将此文件复制到硬盘上的另一个位置并进行编辑,然后为流指定它。
[默认值]
部分包含可根据需要覆盖每个站点的参数。
屏幕截图原点
:屏幕截图区域的原点(左上角)(像素)。screencap\u res
:屏幕捕获的分辨率(要捕获的区域,从原点开始)screencap_fps
:屏幕捕获的帧数/秒audiofs
:音频采样频率。通常为44100赫兹(CD质量)。音频bps
:音频数据速率--如果不需要音频,请留空(通常用于"文件",以便在后期处理中生成动画gif)预置
:veryFast
或超快
如果CPU跟不上。
接下来是系统平台的特定参数。
在ffmpeg文档中寻求帮助,尝试先捕获到文件,然后更新
对于您的sys.platform
- EXE:覆盖所需的FFMPEG可执行文件的路径。如果您安装了多个ffmpeg版本(例如,来自anaconda python)。
最后是每个站点的参数。
您可能需要在这里更改的唯一内容是服务器
以获得您所在地理区域的最佳性能。
包含的pylivestream.ini是美国东北部的默认服务器。
流启动
程序将根据网站的配置文件密钥加载一个*.key
文件。
例如,潜望镜希望在~/periscope.key
中看到从phone periscope app获得的流十六进制键。
同样,youtube需要一个文件~/youtube.key
和十六进制流密钥等。
YouTube直播
配置youtube live。
编辑file
youtube.key
以使用youtube十六进制流键运行python脚本,所选输入将在youtube live上进行流媒体播放。
ScreenShareLivestream YouTube
< > >配置您的Facebook直播流
将流ID从 https://www.facebook.com/live/create 进入文件
facebook.key
使用选定的输入为Facebook运行Python脚本
ScreenShareLivestream Facebook
< > >通过以下任一方法创建新流:
- 从Phone Periscope应用程序,转到Profile->;settings->;Periscope Producer并查看流密钥。 完成步骤后,"检查源"按钮将转到"预览流"(2)
- 从计算机Web浏览器,转到 https://www.periscope.tv/account/producer 并创建新的源。
将十六进制流键放入
潜望镜.key
使用选定的输入为潜望镜运行python脚本
屏幕共享livestream潜望镜
< > >从抽搐仪表板创建流。如果您不在美国东北部,请编辑pylivestream.ini,使其具有最近的服务器
将Twitch stream key放入文件
Twitch.key
使用选定的输入运行Twitch的Python脚本
screensharelivestream抽搐
< > >- 为您的计算机设置了pylivestream.ini并设置了所需的参数
站点
是Facebook
,潜望镜
,YouTube
等。- 对于
webcalivestream
和screensharelivestream
,可以为同时多个流指定多个站点
。 - 请记住先用十六进制流密钥为每个站点设置一个
*.key
文件,或将流密钥输入到*.ini
文件的"key:"字段中。 网络摄像头资源
:网络摄像头分辨率--从V4L2 CTL中查找--列出格式文本或网络摄像头规格表。网络摄像头fps
:网络摄像头fps--可从上面的命令或网络摄像头规格表中找到窗口:
ffmpeg -list_devices true -f dshow -i dummy
Mac操作系统:
ffmpeg -f avfoundation -list_devices true -i ""
Linux:
v4l2-ctl --list-devices
-glob
glob要传输的文件模式,例如"*.avi"-loop
可选地无限循环globbed文件列表-shuffle
可选地对全局文件列表进行shuffle-图像
如果您有音频文件,通常应将图像设置为显示,因为大多数/所有流媒体网站都需要视频源,甚至是静态图像。-nometa
禁用标题-艺术家文本覆盖路径
视频文件所在的路径全局模式
例如*.avi
模式匹配视频文件-图像
用作流背景的图像的文件名(大多数网站都需要)pylivestream.get_framerate(vidfn)
提供视频文件的帧数/秒。pylivestream.get_resolution(vidfn)
给出视频文件的分辨率(宽度x高度)。- 低CPU机器(如覆盆子PI)可能需要降低分辨率。
- 直播需要卓越的质量(不一定高 速度)互联网连接。一些DSL/无线互联网 供应商的表现确实参差不齐。你可能没注意到 由于深度缓冲,高清Netflix将出现在Livestreaming上。
- Skype/Duo/FaceTime在您的网络上是否表现出色? 否则,直播将无法正常工作。
- 尝试与Internet建立有线(以太网)连接。 我见过非常昂贵的消费者wifi接入点,在现实生活中的大量使用(如实时流媒体)中性能不佳。
- directshow设备选择
- directshow示例
- 猫头鹰电脑:创意共享没有属性。商业
- YouTube:YouTube品牌资源
- facebook:wikimedia commons
- 潜望镜
Facebook直播
潜望镜
我更喜欢用电话方式,因为电话是"第二屏" 在那里我可以看到流是否滞后,如果我"离开广播"和 回来吧,我可以通过手机等发表评论。
抽搐
用法
由于流的复杂性和ffmpeg发出的非特定错误代码,默认行为是,如果ffmpeg检测到一个流失败,所有流都将停止流并结束程序。
网络摄像头
注意:您的系统可能没有网络摄像头,特别是当它是虚拟机时。
配置:
查找网络摄像机名称:
流到多个站点,在此示例中,潜望镜和YouTube同时直播:
WebcamLivestream youtube periscope
或来自开发代码:
python Webcam.py youtube periscope
屏幕共享livestream
流到多个站点,在此示例中,潜望镜和YouTube同时直播:
ScreenshareLivestream youtube periscope
或来自开发代码:
python Screenshare.py youtube periscope
图像+音频直播
麦克风音频+静态图像通过
python -m pip install PyLivestream
0
或您的图像文件所在的位置。
仅音频直播
视频流站点通常不允许仅音频流。 您可以通过以下方式对自己的计算机进行测试:
python -m pip install PyLivestream
1
文件livestream
说明:如果您安装了可选的tinytag
python模块,
标题艺术家将自动添加到来自
音频/视频文件。
无休止地循环单个视频
python -m pip install PyLivestream
2
多个视频文件
要传输的视频文件全局列表:
python -m pip install PyLivestream
3
或来自开发代码:
python -m pip install PyLivestream
4
播放所有视频s在目录中
示例:目录~/videos中的所有AVI视频
:
python -m pip install PyLivestream
5
流式无限循环视频
示例:~/videos
中的所有AVI视频都是无限循环的:
python -m pip install PyLivestream
6
流式传输目录中的所有音频文件
要传输的视频文件的全局列表。建议包含静态图像(可能是您的徽标):
python -m pip install PyLivestream
7
示例:在~/music
目录下播放所有.mp3音频:
python -m pip install PyLivestream
8
示例:在~/music
中播放所有.mp3音频,并重复播放动画gif或视频片段:
python -m pip install PyLivestream
9
或
git clone https://github.com/scivision/PyLivestream
cd PyLivestream
python -m pip install -e .
0
屏幕捕获到磁盘
此脚本将屏幕捕获保存到磁盘上的文件中:
git clone https://github.com/scivision/PyLivestream
cd PyLivestream
python -m pip install -e .
1
实用程序
注释
一般情况下(不只是这个节目)直播节目的退学/延迟评论:
故障排除
黑/黑桌面共享视频。 一般来说,由于该程序生成由ffmpeg运行的命令行,因此请尝试仅使用ffmpeg本身来写入视频文件。 这是Wayland的一个已知问题——请使用x11。 请参见ffmpeg桌面捕获文档。
YouTube流健康
尤其是在使用静态背景-image
进行流媒体播放时,youtube通常会在"stream health"中发出警告:
< Buff行情>
流的当前比特率低于建议的比特率。
只要您的图像看起来正常,就不要理会此警告。
ffmpeg参考资料
窗口
DirectShow在Windows 10上不适合我,所以我使用了gdigrab。