简单易用 外网直播流转播至B站的小工具

学习 ·

        前些天看了@NB-XX 文章,突然对转播这东西起了兴趣。

        经过几天的摸索,积累了一些经验,终于摸出了这篇文章,中间也是踩了不少的坑。本文会尽量简化操作流程,以方便更多人使用。

        简言之,使用youtube-dl获得直播流的m3u8地址,再调用ffmpeg的推流功能,把直播流实时推送到自己的b站直播间中。与传统录屏直播相比,少了再转码的过程,也就是说,原网站看到的是什么画质,转播过来的就是什么画质,中间没有画质损失。

        已经有实现此功能的工具,由@一生的等待 使用Java开发:


        而我使用的是Python3开发,意在Linux系统上实现这个功能,家庭电脑的网速毕竟比不上各类vps的网速,在国外各类白菜价vps遍地走的今天,使用vps进行转播是一个不错的选择。

        那么正文开始~

        首先丢个链接:https://github.com/7rikka/autoLive

        下载后,放在/root/ 目录下

        我使用的是Vultr的Ubuntu 18.04,安装过程仅供参考

        开始装各种软件:

        # apt update

        # apt upgrade

        # sudo apt-get -y install python3-pip

        # sudo pip3 install youtube_dl

        # sudo pip3 install requests

        接下来是最重要的FFmpeg

        打开 https://johnvansickle.com/ffmpeg/ 下载编译好的版本

        Note: it's highly recommended to use git builds, because bug fixes and other improvements are added on a daily basis.

        建议使用git编译版本,同时要确定自己系统的版本,输入

        # uname -a

        Linux vultr.guest 4.15.0-23-generic #25-Ubuntu SMP Wed May 23 18:02:16 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

        得知是64位系统

        下载git: g17c635e60 built on 20180905

        x86_64 build: ffmpeg-git-64bit-static.tar.xz

        # cd

        # wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-64bit-static.tar.xz

        # tar -xvf ffmpeg-git-64bit-static.tar.xz

        # cd ffmpeg-git-64bit-static

        # ls

        ffmpeg ffmpeg-10bit  ffprobe  GPLv3.txt  manpages  model  qt-faststart  readme.txt

        可以看到目录下的几个文件

        这里只需要其中的ffmpeg,把它移动到autoLive文件夹中

        # mv ./ffmpeg /root/autoLive/

        转到autoLive目录下,打开cookies.txt,把你要进行直播账号的cookies复制进去并保存,最简单的方法就是按f12,打开b站首页刷新,点击第一个请求,查看Requests Headers中的Cookie属性,一串都要复制过去。

        然后看一看config.ini文件中的设置

        基本修改直播间标题和分区编号就ok了

        # python3 youtube.py 启动程序,如果不缺东西的话

        大概的效果就是这样:https://h.bilibili.com/7336260

        ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

        目前已知的问题:FFmpeg推流是实时推流,目前没有发现有类似OBS的延时推流的操作,导致遇到场景复杂的画面时,可能会遇到直播卡顿的情况,原因就是对应的分段没有在指定时间内下载下来,导致推流延后。这个当前个人无法解决。可能(?)自己本地建立一个m3u8流喂给FFmpeg,手动加一个延时,不知道这样是否可行。

        踩到的坑:-re 参数,开始看网上的文章,不知为何就加上了,结果导致推流失败(?),说失败也算不上,手机可以观看,但网页观看就无限转圈,然后非常神奇事情发生了,用F12把b站直播流地址复制出来,用potplayer打开,竟然!可以!正常观看!WTF这是什么原理,难道是b站播放器有问题?!反正暂时把-re参数去掉了。

        编译安装FFmpeg,真是玄学啊,昨天还行,今天就编译错误,还是用编译好的版本吧。

收藏
点赞
分享