【转播man】其他平台转播到bilibili的一种方法

感谢:@AnsME 提供的方法!
@85562 @有事烧纸哈 @ホシミヤ・ヨク 陪我不耐其烦的测试,以及指点。

一句话概括基本思路:使用youtube-dl等工具,获取到直播源的m3u8播放列表,再利用ffmpeg的推流功能推到B站。
目前已经成功转播平台:Youtube、Openrec、Showroom、Mirrativ。
相比较传统的录屏转播,使用推流可以省时省力,不用一直看着直播画面,对电脑配置要求不高,搭配服务器使用还可以解决上行不够等问题。

安装方法
ffmpeg的安装+配置环境变量。
下载地址:http://ffmpeg.zeranoe.com/builds/

打开控制面板,选择系统与安全

Yotube-dl 下载地址:http://www.youtube-dl.org/downloads/latest/youtube-dl.exe
注意!youtube-dl需要python环境的支持,请自行下载(MC玩家应该比较熟悉)
直接放在解压ffmpeg的bin文件夹下,免去重新配置环境变量。

使用方法
获取m3u8地址
按下“Win(微软徽标键)键+R键”,输入cmd调出命令行工具。

输入
youtube-dl -g youtube直播地址

注意!youtube直播地址应为:https://www.youtube.com/watch?v=xff27L0aH-Q 的形式
使用ffmpeg转播
方法同上再次调取出命令行工具。
输入
ffmpeg -i m3u8地址 -vcode c -acodec aac -f flv “推流地址”
推流地址,就是B站开播设置的rtmp地址+直播码

按下回车,正常情况下如果显示出上传速率,证明推流成功。

FAQ时间:
Q:为什么我无法获取到m3u8地址?
A:获取油管等需要魔法上网的平台时,请确认魔法上网工具使用“全局模式”
Q:为什么我的m3u8地址无法推流,显示地址错误?
A:youtube-dl获取到的youtube的m3u8地址,只能在同ip下使用ffmpeg推流。通俗的讲,你用电脑A获取到的地址,不能拿到另一网络环境下的电脑B上去推流。
Q:我输入这些命令,都是做什么用的?
A:-i 输入(可以是m3u8地址,也可以是本地文件等)
-vcodec copy 设定视频编码与原视频相同
-acodec aac 设置音频编码为aac
-f flv 输出为flv格式

以上是转播Youtube的方法,Openrec,Mirrativ,Shouwroom获取到m3u8地址后,一样可以转播。
Openrec
打开直播页面,按下F12调用开发者工具,搜索m3u8文件,如图中的“chunklist_数字文件”就是我们要获取的地址,不同的数字后缀代表清晰度不同的源。

Showroom
showroom可以直接使用youtube-dl进行获取,格式同上为:
youtube-dl -g showroom地址
Mirrativ
Mirrativ的操作同Openrec,不过需要获取的文件名为playlist.m3u8


进阶的想法——服务器
上面的方法,也在用自己的电脑通过梯子再进行转播,还是要吃上行速度,那么有没有更好的转播方法呢?

挂载到服务器上,利用服务器的高速宽带进行转播,实现高清流畅转播。
首先我们需要一台服务器,我购买了一个单核512mb内存10G硬盘的低配VPS,预装的系统是CentOS 7,可用流量是3TB。

购买VPS以后,我们使用Xshell 6这款软件来进行连接。

当显示服务器用户名时,证明连接成功。

在Centos7下安装ffmpeg,在窗口输入以下命令:
首先安装安装EPEL Release
yum install -y epel-release
若提示“缺少Code”,请输入
sudo rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
接下来安装Nux-Dextop源
导入Code
sudo rpm –import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
安装
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
最后安装ffmpeg
yum install -y ffmpeg
安装完成之后,输入
ffmpeg -version
检查是否安装成功

接下来安装youtube-dl,分别输入以下两行命令并运行
wget http://youtube-dl.org/latest/youtube-dl -O /usr/local/bin/youtube-dl
chmod a+x /usr/local/bin/youtube-dl
yotube-dl需要Python2.7以上版本,因为CentOS7自带Python2.7所以并不需要更新Python。
与windows端使用同理,输入
youtube-dl -g youtube直播地址
获取直播的m3u8地址,然后使用ffmepg进行推流,格式稍有不同。
ffmpeg -i m3u8地址 -c:v copy -c:a aac -b:a 320k -ar 44100 -strict -2 -f flv "推流地址"
新增的-b:a指定了码率,而-strict -2开启严格模式,否则不能使用aac的音频格式。

以上就是用服务器转播到B站的方法。

不足
手动获取地址,比较麻烦
配置服务器需要一定耐心和计算机基础,门槛稍高
使用这种形式,一台服务器只能转播一个(其实可以转播多个)

我个人水平太低,配置服务器时也多是从网络上看博客去摘抄命令,没有办法做出转播台。写出此拙作主要是希望有路过的大佬,能开发出更强的功能,比如自动监控频道的开播情况,自动开播进行推流,达到真正意义上的全自动转播。

参考内容
https://www.cnblogs.com/new-ass/p/7704040.html
https://zhuanlan.zhihu.com/p/23951969
http://www.xshellcn.com/xsh_column/lianjie-linux.html
https://blog.csdn.net/qq_34627459/article/details/74956569
http://www.linuxdown.net/install/soft/2016/0327/5138.html