前些天看了@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,真是玄学啊,昨天还行,今天就编译错误,还是用编译好的版本吧。