使用SRS搭建自己的弹幕直播平台
需求:与女朋友一起实时观看自己在硬盘里收藏的BD动画资源。
用此贴简单记录操作过程、遇到的问题以及解决方案。
〇. 在Bilibili、斗鱼等平台创建直播间
问题:被版权警告,直播间被封。
解决方案:自己搭建私人直播服务器。
一. 搭建SRS直播服务器
1.下载源码
git clone https://github.com/ossrs/srs
2.进入srs/trunk
目录并编译
cd srs/trunk
./configure
make
3.启动SRS服务器
./objs/srs -c conf/srs.conf
4.检查运行状态
./etc/init.d/srs status
如图,此时SRS正常运行中。
二.使用OBS推流
默认推流 rtmp://[服务器地址]:1935/live
(可以改成任意路径,只要能访问得到就好)(可以改成任意端口,只要防火墙开放相应端口且与拉流时保持一致就好)
默认密钥 livestream
(可以使用任意密钥,只要与拉流时保持一致就好)
三.使用VLC Media Player拉流
默认rtmp流 rtmp://[服务器地址]:1935/live/livestream
VLC media player → 媒体 → 打开网络串流,输入上述地址即可观看直播。
问题:VLC对移动端的支持很差,女朋友不喜欢。
解决方案:移动端有一个叫KMPlyaer的应用,可以流畅拉取rtmp流。
问题:这种手动拉流的方法太麻烦,女朋友不喜欢。
解决方案:尝试在网页前端建立播放界面。
四.建立前端播放页面
1.使用video.js
播放rtmp流
<link href="https://cdn.bootcdn.net/ajax/libs/video.js/7.15.0/alt/video-js-cdn.css" rel="stylesheet">
<script src="https://cdn.bootcdn.net/ajax/libs/video.js/7.15.0/alt/video.core.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/videojs-flash/2.2.1/videojs-flash.min.js"></script>
<video id='myvideo' width=640 height=360 class='video-js' controls>
<source src="rtmp://[服务器地址]:1935/live/livestream">
</video>
<script>
var player = videojs('myvideo')
player.play();
</script>
问题:在前端直接播放rtmp流将不可避免地用到Flash,而Flash已经死亡。虽然可以通过一些操作允许浏览器加载Flash,但女朋友不喜欢。
解决方案:使用其它流媒体传输协议。
2.使用hls流
问题:hls流的固有问题是直播延迟过高,女朋友不喜欢。
解决方案:使用其它流媒体传输协议。
3.使用http-flv流
Bilibili的一位天才程序员创造了flv.js
这一伟大的发明,可以实现不依赖FLash播放flv。(屑站居然把这样的高手给逼走了)
<script src="https://cdn.bootcdn.net/ajax/libs/flv.js/1.6.1/flv.min.js"></script>
<video id="myvideo" controls></video>
<script>
var myvideo = document.getElementById('myvideo');
var flvPlayer = flvjs.createPlayer({
type: 'flv',
url: 'http://[服务器地址]:8080/live/livestream.flv'
});
flvPlayer.attachMediaElement(myvideo);
flvPlayer.load();
flvPlayer.play();
</script>
问题:提示Mixed Content
错误。由于网页进行了https加密,而视频流并未加密,所以浏览器不予加载。
解决方案:查阅文档知,SRS支持https-flv流。
4.配置https-flv流
参考官方文档,修改位于srs/trunk/conf
的配置文件并拷贝证书后,重载SRS。
./etc/init.d/srs reload
在前端修改拉流地址后,即可顺利播放。
问题:我的服务器的线路太烂,夜间上传卡顿,导致直播不畅,女朋友不喜欢。
解决方案:走ipv6网络进行推流,避免拥堵。
5.使用ipv6网络推流
查阅Github知,SRS支持对ipv6的监听。
在配置文件中,将listen 1935;
修改为listen 1935 [::]:1935;
即可。
走ipv4网络推流
走ipv6网络推流
问题:即使我这边推流推得动,女朋友那边也不一定能拉得动。
问题:女朋友与我分手了。:(
五. 添加弹幕功能
直播的乐趣之一是与弹幕互动。
flv.js本身并不支持弹幕功能,但一款名为DPlayer的播放器可以实现这一点(其作者同样是前B站员工)。
关于基本的初始化过程,DPlayer的帮助文档写得非常详细,网上也有很多现成的模板,本文不再赘述。这里只介绍直播弹幕服务的配置。
很多网友用爱发电,搭建了公共的弹幕接口。但这些服务通常只适用于视频弹幕,即弹幕文本按照视频文件的时间顺序呈现,而不是根据现实里的时间顺序呈现,无法用在直播中。所以考虑自行准备后端。
查阅DPLayer的文档知,此前已经有人写过一个dplayer-live-backend。
按照说明配置后,发现无法正常工作。
查阅Issue知,DPlayer曾进行过一些数据格式的更改,所以需要对这个后端服务进行一些更正。
https://github.com/Izumi-kun/dplayer-live-backend/issues/2#issuecomment-660833164
按照SukiYume提供的解决方案,后端弹幕服务可以顺利运行。
问题:没有女朋友,折腾这些还有什么意义呢? :(
六. 参考资料
- SRS中文文档
(https://github.com/ossrs/srs/wiki/v4_CN_Home) - 快速搭建自己的直播服务器,完成属于你的直播服务
(https://blog.csdn.net/wjwj1203/article/details/82664981) - SRS环境搭建
(https://www.jianshu.com/p/a7196df3914a) - Getting Started with Video.js
(https://videojs.com/getting-started/) - flv.js
(https://github.com/bilibili/flv.js) - 使用flv.js实现HTML5播放FLV视频文件
(https://www.bysb.net/2943.html) - SRS中文文档_Delivery HTTP FLV Stream
(https://github.com/ossrs/srs/wiki/v4_CN_DeliveryHttpStream#https-flv-live-stream) - 修复rtmp不能监听ipv6的问题,增加了ipv6端口验证代码
(https://github.com/ossrs/srs/pull/2157) - DPlayer
(https://github.com/DIYgod/DPlayer) - 弹幕服务器文档
(https://dandoc.u2sb.com/live/install.html#%E5%AE%89%E8%A3%85-2) - dplayer-live-backend
(https://github.com/Izumi-kun/dplayer-live-backend)
好悲伤的结局啊……
我也因为想从YouTube转播到b站研究过直播的事情(我博客里有记录,虽然成功了但是最后还是因为花太多时间了感觉不值)。对于博主这种情况,我的建议还是b站投屏,管理来警告的话就切屏假装写报告比较省事且能达成目的,巡查也不会很频繁……
超管直接关停直播间,动作很快。T T
可能是分区的问题。b站上很多画手都会在直播画画的时候同时开小窗看剧,这就没事。我就看过一个up直播网球比赛(同样没有版权),超管一来不会直接关掉而是给警告,这时关掉声音拿个HMR谱图挡屏幕好几分钟,然后接着播。一般播完两三小时的比赛是没问题的
当然仅作为一种思路,可行性我也不知道(
有个社交网站叫蔷薇花园,可以点播视频或者音乐,并且支持实时对话,本地的文件好像也可以,用外链的话也可以,之前一直和朋友在这个里面一起看番和听歌,UI界面也做得超好看,里面的人说话又好听,哦哊我超喜欢里面的
谢谢推荐!:)
1. 女朋友是第一推动力
2. 虽然没细看博客内容,但是参考文献好评
膜拜大佬
或许可以腾讯会议(
码率太低了
博主好像还是学生?那机会还多得是,努力健身,练出八块腹肌,你的社交app的私信就会被女孩塞到99+