将YouTube直播转播到bilibili的想法及尝试

将YouTube直播转播到bilibili的想法及尝试

周末的时候本来在学习Swift的,不经意间打开Youtube直播,看到 大阪伊丹国际机场的 live camera 直播,出于对民航的兴趣,觉得直播里的陆空对话可以很好的打发时间,于是产生了能否24小时将Youtube的直播转播到墙内的疑问,带着这个疑问折腾了两天。

<大阪国际机场live camera含陆空对话>(需要梯子)

在往上搜了一些资料,发现已经有很多人实现了我的想法,而且做法也超级简单:

  • YouTube 直播地址
  • 一个海外vps
  • youtube-dl
  • ffmpeg
  • bilibili直播地址

用youtube-dl获取直播m3u8文件,然后用ffmpeg不断读取流数据,然后推流到bilibili直播:

ffmpeg -re -i "$(youtube-dl -f 95 -g "https://www.youtube.com/watch?v=pV2RaaoxyF8")" -c:v copy -c:a aac -b:v 5000k -ar 44100 -ab 320k -ac 2 -strict -2 -flags +global_header -bsf:a aac_adtstoasc -bufsize 3000k -f flv "rtmp://txy.live-send.acg.tv/live-txy/?streamname=xxxx&key=yyyy"

用这个命令就可以实现上面的功能。

但是在实际使用操作过程中,总是在发送了100帧数据左右开始报错:

[tls @ 0x5566d890ffe0] The TLS connection was non-properly terminated.
[tls @ 0x5566d8fd25a0] The TLS connection was non-properly terminated.
[tls @ 0x5566d8fd25a0] The specified session has been invalidated for some reason.

av_interleaved_write_frame(): Broken pipe
Error writing trailer of rtmp://txy.live-send.acg.tv/live-txy/?streamname=xxxx
[aac @ 0x5566d8cf45e0] Qavg: 65536.000
Conversion failed!

TLS连接被关闭,在搜了一大堆资料后我依然怀疑是youtube没有正确的关闭连接,导致报错。还做了很多其他的验证:

  • 尝试在树莓派上安装ffmpeg往bilibili推流,直播了一个网上将近十来个小时,没有任何问题。
  • 在香港vps上将一段已经下载好的视频推流到bilibili,有问题。
  • 在美国vps上将一段已经下载好的视频推到bilibili,有问题。
  • 在香港vps上将一段已经下载好的视频推流到YouTube,没有问题。
  • 在美国vps上将一段已经下载好的视频推流到YouTube,没有问题。
  • 在香港和美国vps上换了和树莓派相同版本的v4.1.1 ffmpeg重复上述操作,结果不变。

将google搜索到的结果几乎都看了一遍,也没找到多少有价值的信息。

今天晚上在思考其他解决方案的时候,看到bilibili专栏的文章,尝试了作者用java写的jar包,也报相同的错误,于是联系了作者,才得知,原来这个方法已经失效了。

这个脚本早就报废了的,现在B站只有官方py或者报备了的才可以从海外推。目前转播man已经失业,有更好转播的方案。爱丽丝

原来上面的报错是因为bilibili掐断了连接导致的。不过这也打消了我最初的疑虑:侵权问题。

这个想法可能要先放一段时间了,目前的想法是想尝试一下用 OpenCV 和 ffmpeg 能不能实现,不知道什么时候才能重新捡起来(逃)。