bilibili转播YouTube节目

2021-05-16 · 可爱小蛇

Typecho的编辑器居然是靠缩进来识别格式,我非常不习惯,排版很烂,请见谅。

条件

  1. 国外vps一台 我是用的是vultr的服务器,最低配版(但不能只支持IPv6!)。
  2. 国内vps一台 我看了挺多,最后用的腾讯云学生版,最低配,带宽5M。
  3. 拥有一定Linux知识或者懂得Google

原理

  请参考: https://github.com/LetMeDecay/bilibili_live_foreign_stream_solution

  问题关键在于绕开bilibili对国外流的限制,而这位前辈给出的解决方案虽然是国外直播到bilibili,但我们其实完全可以拿来用。   我这里的逻辑是: [youtube] -> [vultr] -> [TencentServer] -> [bilibili]

配置

  • 1.配置国外vps
  • 1.1安装NGINX+rtmp

  我的是centos7,但是似乎Debian会好用很多,在安装NGINX和rtmp时,Debian似乎一行就能解决,但centos需要编译安装,非常的麻烦。   https://www.howtoforge.com/tutorial/how-to-install-nginx-with-rtmp-module-on-centos/   这里做完step4就可以,由于我们不需要像前文那样反复在服务器之间推流,所以这一步rtmp的配置完全可以免去。

  出问题多Google。

  • 1.3安装youtube-dl

  不记得是怎么装的了,这就意味着这没太大麻烦,请自行Google。

  • 2.配置国内vps

  依旧是centos7,安装ffmpeg后,照做1.1到step5,但是链接里面config的配置这样写(vim nginx.conf以后,i进入编辑模式,文档底部会出现insert,然后把下面这部分编辑好复制进去,esc,输入:wq!保存更改,或输入:q!放弃更改):

    worker_processes  auto;
    events {
        worker_connections  1024;
    }
    
    # RTMP configuration(这是唯一需要改的部分)
    rtmp {
        server {
                listen 1935;#保持默认
                chunk_size 128; 
    
                application testmusic {#testmusic是我随便起的应用名
                    live on;
                    exec_push ffmpeg -i rtmp://127.0.0.1:1935/testmusic -c copy -f flv rtmp://live-push.bilivideo.com/live-bvc/[你的直播码];#ffmpeg参数可调
                }
        }
    }
    http {
        sendfile off;
        tcp_nopush on;
        aio on;
        directio 512;
        default_type application/octet-stream;
    
        server {
            listen 8080;
    
            location / {
                # Disable cache
                add_header 'Cache-Control' 'no-cache';
    
                # CORS setup
                add_header 'Access-Control-Allow-Origin' '*' always;
                add_header 'Access-Control-Expose-Headers' 'Content-Length';
    
                # allow CORS preflight requests
                if ($request_method = 'OPTIONS') {
                    add_header 'Access-Control-Allow-Origin' '*';
                    add_header 'Access-Control-Max-Age' 1728000;
                    add_header 'Content-Type' 'text/plain charset=UTF-8';
                    add_header 'Content-Length' 0;
                    return 204;
                }
    
                types {
                    application/dash+xml mpd;
                    application/vnd.apple.mpegurl m3u8;
                    video/mp2t ts;
                }
    
                root /mnt/;
            }
        }
    }

  在bilibili开播设置里面找到直播码:

  • 3.bilibili开启直播

  开了以后一段时间要是没有推流,直播会自动关闭,注意重开。

  • 4.开始推流
  • 4.1推流YouTube频道

  在国外vps的ssh操作。这里给出几个推流指令。

  由于国内vps的rtmp已经在前面配置好了ffmpeg的处理和发送到bilibili,到此应该直播间就能收到信号了。下面再给出一个推流本地视频的指令。

  • 4.2推流本地视频
        ffmpeg -re  -stream_loop -1 -i Desktop/IMG_5376.mp4 -vcodec copy -acodec aac -f flv "rtmp://live-push.bilivideo.com/live-bvc/【你的直播码】"

  这里给出的是循环播放的代码。

    yum install screen #安装screen
    screen -S name #name用于命名screen窗口用途
    screen -ls     #查看进程
    screen -r.     #进入单一进程
    screen -r -d 1805 #进入screen进程
    screen -X -S 122128 quit #关闭某一进程
    ctrl-a +d #保持进程的同时退出当前窗口
  • 5.2转播YouTube以外的其他功能

  有待探索……

  • 6.感想

  这样写下来感觉真的蛮简单的,跟做的时候感觉完全不一样……也确实,逻辑上来讲我完全没有原创性的工作,只是东拼西凑完成了我想要的效果而已……但是其中的种种困难,也许只有试过的人才知道吧:首先我对Linux就不熟,很多文件操作的命令都得现学;其次,也许安装的过程中哪一步就不对了,原因有很多,版本太新、太旧、路径不正确等等,当时如果没有敏锐地在一行行安装指令中意识到问题的话,后面一堆error出现连Google都没有解决方案的时候,那是真的很崩溃。   我对Linux也有全新的认识。在网上某计算机课上听来的“没有消息就是好消息,这就是Linux的哲学”,确实是如此。一行安装代码,一个回车,弹出来几十行上百行的代码,一个error也没有,这才是正确的结果;如果出了问题,就不要再往下了,应该仔细排查是哪里的问题,应该是不难解决的。无视它继续往下,问题只会越来越大。   挺开心的。至少做出来了,虽然花的时间比想象中多多了。狠心买下国内服务器也没花冤枉钱,好事。

更新

2021.5.16

  为解决YouTube直播的URL每6小时左右改变导致断流的问题,新学了一点shell,现写了个脚本传上了GitHub。国外服务器一键启动推流功能,出现断流的情况时暴力循环所有步骤给续上。命令: bash -c "$(curl -L https://raw.githubusercontent.com/suchacutesnake/continuousStreaming/master/lofigirl.sh)"   项目地址:https://github.com/suchacutesnake/continuousStreaming   首次使用vs code写代码,code runner插件牛逼!!!(破音)   typecho上装上了编辑器插件EditorMD,现在排版舒服多了^_^

2020.5.20

  仍然存在断连问题,可能原因是因URL改变后暴力循环推流指令时服务器无法改变推流来源处的状态声明。参考: https://github.com/arut/nginx-rtmp-module/issues/1152 https://github.com/dreamsxin/nginx-rtmp-wiki/blob/master/Directives.md 国内服务器配置文件部分修改: # RTMP configuration rtmp { server { listen 1935; chunk_size 128;

            application testmusic {
                live on;
                exec_publish ffmpeg -i rtmp://127.0.0.1:1935/testmusic -c copy -f flv rtmp://;
                drop_idle_publisher 10s;
            }
    }
}

  顺带说一个很坑的事:我有两台国外服务器,本来希望把推流的任务交给另一台以缓解带宽压力的,然后另一台用了宝塔论坛上的一键安装ffmpeg脚本,结果不知道他在脚本里写了些啥,后来怎么也升级不了ffmpeg到最新版了,导致整个计划搁浅了……

2020.5.21

  出于流量问题的考虑,更换了推流服务器。解决ffmpeg路径的问题是直接到ffmpeg所在的路径下运行新版的ffmpeg。centos的编译安装真的非常痛苦,少装点东西就又要全部重新编译一遍。如果给我重来一次的话我一定会选Debian。网上的教程也常常没有用……说到底还是只能怪我的Linux知识太缺乏(^_^;)

2020.5.25

这次坚持了三天才断流。修改了chunk_size 4096;,ffmpeg增加了参数-re以控制帧率,以及为所有的网址加上双引号。看看下次断流是什么个情况吧。

2020.5.30

更改了配置。 # RTMP configuration rtmp { server { listen 1935; chunk_size 4096; drop_idle_publisher 5s;

            application testmusic {
                live on;
                exec_publish ffmpeg -i "rtmp://127.0.0.1:1935/testmusic" -c copy -f flv "rtmp://";
            }
    }
}

2021-10-08 09:48:51 星期五 其他链接: debian11安装SRS教程 https://www.cnblogs.com/surplus/p/15319061.html

https://certbot.eff.org/lets-encrypt/debianbuster-nginx

https://www.imydl.com/linux/5744.html

最终成果:布置了hls直播服务,以下链接可在Safari直接打开(注意网址只能是http不能是https):

http://binaryenfold.xyz:8080/live/livestream.m3u8

2021-10-11 06:53:01 星期一 放一堆网址以后有空再整理: nginx https反向代理设置 https://docs.nginx.com/nginx/admin-guide/security-controls/securing-http-traffic-upstream/ 总体思路 https://ivampiresp.com/2020/04/05/%e4%bd%bf%e7%94%a8nginx%e7%9a%84rtmp%e6%a8%a1%e5%9d%97%e6%90%ad%e5%bb%ba%e4%b8%80%e4%b8%aa%e6%b5%81%e5%bc%8f%e5%aa%92%e4%bd%93%ef%bc%88%e7%9b%b4%e6%92%ad%ef%bc%89%e6%9c%8d%e5%8a%a1%e5%99%a8%e5%b9%b6 https://www.jianshu.com/p/5539ccd8d9c4 反向代理 https://www.cnblogs.com/ysocean/p/9392908.html#_label3 http REFERER http://www.ruanyifeng.com/blog/2019/06/http-referer.html 简单app https://www.cnblogs.com/handongyu/p/6260209.html express配置 https://blog.csdn.net/bwf_erg/article/details/70649536?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242 node.js https://nodejs.org/api/https.html#https_https_get_options_callback socket.io https://socket.io/docs/v4/server-initialization/#with-an-https-server 成果: https://live.cutesnake.top:3000

分类:默认分类

标签:折腾