使用ffmpeg轻松流媒体到youtube live、periscope、facebook live、twitch等

pylivestream的Python项目详细描述


travis cicoverageappveyor statuspypi versionsmaintabilitypypi download stats

使用ffmpeg的python脚本直播

使用纯面向对象的python(没有额外的包)和ffmpeg,同时流到一个或多个流媒体站点。 使用flake8mypy类型检查和pytest进行测试。 visual_tests.py是对笔记本电脑上几个命令行脚本场景的快速检查。 ffmpeg用于从python子流程流到站点,包括:

  • facebook live(可能由于ffmpeg错误vis而无法工作。强制rtmps)
  • youtube直播
  • 潜望镜
  • 抽搐
  • 流媒体广播还包括mixer、ustream、vimeo、restream.io等。

Pylivestream图表显示屏幕捕获或网络摄像头同时直播到多个服务。

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直播

  1. 配置youtube live。

  2. 编辑fileyoutube.key以使用youtube十六进制流键

  3. 运行python脚本,所选输入将在youtube live上进行流媒体播放。

    ScreenShareLivestream YouTube

  4. < > >

    Facebook直播

    1. 配置您的Facebook直播流

    2. 将流ID从 https://www.facebook.com/live/create 进入文件facebook.key

    3. 使用选定的输入为Facebook运行Python脚本

      ScreenShareLivestream Facebook

    4. < > >

      潜望镜

      1. 通过以下任一方法创建新流:

        • 从Phone Periscope应用程序,转到Profile->;settings->;Periscope Producer并查看流密钥。 完成步骤后,"检查源"按钮将转到"预览流"(2)
        • 从计算机Web浏览器,转到 https://www.periscope.tv/account/producer 并创建新的源。
      2. 将十六进制流键放入潜望镜.key

      3. 使用选定的输入为潜望镜运行python脚本

        屏幕共享livestream潜望镜

      4. < > >

        我更喜欢用电话方式,因为电话是"第二屏" 在那里我可以看到流是否滞后,如果我"离开广播"和 回来吧,我可以通过手机等发表评论。

        抽搐

        1. 从抽搐仪表板创建流。如果您不在美国东北部,请编辑pylivestream.ini,使其具有最近的服务器

        2. 将Twitch stream key放入文件Twitch.key

        3. 使用选定的输入运行Twitch的Python脚本

          screensharelivestream抽搐

        4. < > >

          用法

          由于流的复杂性和ffmpeg发出的非特定错误代码,默认行为是,如果ffmpeg检测到一个流失败,所有流都将停止流并结束程序。

          • 为您的计算机设置了pylivestream.ini并设置了所需的参数
          • 站点Facebook潜望镜YouTube等。
          • 对于webcalivestreamscreensharelivestream,可以为同时多个流指定多个站点
          • 请记住先用十六进制流密钥为每个站点设置一个*.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
            

          流到多个站点,在此示例中,潜望镜和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

          说明:如果您安装了可选的tinytagpython模块, 标题艺术家将自动添加到来自 音频/视频文件。

          无休止地循环单个视频

          python -m pip install PyLivestream
          
          2

          多个视频文件

          要传输的视频文件全局列表:

          python -m pip install PyLivestream
          
          3

          或来自开发代码:

          python -m pip install PyLivestream
          
          4
          • -globglob要传输的文件模式,例如"*.avi"
          • -loop可选地无限循环globbed文件列表
          • -shuffle可选地对全局文件列表进行shuffle
          • -图像如果您有音频文件,通常应将图像设置为显示,因为大多数/所有流媒体网站都需要视频源,甚至是静态图像。
          • -nometa禁用标题-艺术家文本覆盖

          播放所有视频s在目录中

          示例:目录~/videos中的所有AVI视频

          python -m pip install PyLivestream
          
          5

          流式无限循环视频

          示例:~/videos中的所有AVI视频都是无限循环的:

          python -m pip install PyLivestream
          
          6

          流式传输目录中的所有音频文件

          要传输的视频文件的全局列表。建议包含静态图像(可能是您的徽标):

          python -m pip install PyLivestream
          
          7
          • 路径视频文件所在的路径
          • 全局模式例如*.avi模式匹配视频文件
          • -图像用作流背景的图像的文件名(大多数网站都需要)

          示例:在~/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

          实用程序

          • pylivestream.get_framerate(vidfn)提供视频文件的帧数/秒。
          • pylivestream.get_resolution(vidfn)给出视频文件的分辨率(宽度x高度)。

          注释

          • Linux需要X11,而不是Wayland(登录时选择)
          • x11grab在ffmpeg 3.3中被弃用,以前被xcbgrab
          • 参考网页
          • 测试视频用于循环/全局搜索

          一般情况下(不只是这个节目)直播节目的退学/延迟评论:

          • 低CPU机器(如覆盆子PI)可能需要降低分辨率。
          • 直播需要卓越的质量(不一定高 速度)互联网连接。一些DSL/无线互联网 供应商的表现确实参差不齐。你可能没注意到 由于深度缓冲,高清Netflix将出现在Livestreaming上。
          • Skype/Duo/FaceTime在您的网络上是否表现出色? 否则,直播将无法正常工作。
          • 尝试与Internet建立有线(以太网)连接。 我见过非常昂贵的消费者wifi接入点,在现实生活中的大量使用(如实时流媒体)中性能不佳。

          故障排除

          黑/黑桌面共享视频。 一般来说,由于该程序生成由ffmpeg运行的命令行,因此请尝试仅使用ffmpeg本身来写入视频文件。 这是Wayland的一个已知问题——请使用x11。 请参见ffmpeg桌面捕获文档。

          YouTube流健康

          尤其是在使用静态背景-image进行流媒体播放时,youtube通常会在"stream health"中发出警告: < Buff行情>

          流的当前比特率低于建议的比特率。

          只要您的图像看起来正常,就不要理会此警告。

          ffmpeg参考资料

          窗口

          DirectShow在Windows 10上不适合我,所以我使用了gdigrab。

          流引用

          徽标积分

          • 猫头鹰电脑:创意共享没有属性。商业
          • YouTube:YouTube品牌资源
          • facebook:wikimedia commons
          • 潜望镜

          欢迎加入QQ群-->: 979659372 Python中文网_新手群

          推荐PyPI第三方库


热门话题
java如何从活动中刷新片段,然后返回片段   java如何按获取列排序?   java可以使用访问者模式来执行一般的双重分派吗?   如何从C++调用java方法   编译时java非法启动类型错误   shell通过Java程序使用Haskell的GHCI   如何使用ffmpeg在java程序中获取视频的持续时间?   比较java中的arraylist对象   java阻止Eclipse/Maven调用一个特定插件   java改进列表列表?   使用Java查找SFTP最旧文件的文件大小和上次修改   上下文中SQLite DB的java相对路径。xml   Java:何时使用检查的异常、未检查的异常或断言   如何在Java中使用递归生成负斐波那契序列?   java在画布中绘制,并将其保存到更大的图像中