需求:与女朋友一起实时观看自己在硬盘里收藏的BD动画资源。

用此贴简单记录操作过程、遇到的问题以及解决方案。

〇. 在Bilibili、斗鱼等平台创建直播间

问题:被版权警告,直播间被封。

1.png

解决方案:自己搭建私人直播服务器。

一. 搭建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

2.png
如图,此时SRS正常运行中。

二.使用OBS推流

默认推流 rtmp://[服务器地址]:1935/live (可以改成任意路径,只要能访问得到就好)(可以改成任意端口,只要防火墙开放相应端口且与拉流时保持一致就好)
默认密钥 livestream (可以使用任意密钥,只要与拉流时保持一致就好)

3.png

三.使用VLC Media Player拉流

默认rtmp流 rtmp://[服务器地址]:1935/live/livestream
VLC media player → 媒体 → 打开网络串流,输入上述地址即可观看直播。

4.png
5.png
6.png

问题:VLC对移动端的支持很差,女朋友不喜欢。

解决方案:移动端有一个叫KMPlyaer的应用,可以流畅拉取rtmp流。
KMPlayer.jpg

问题:这种手动拉流的方法太麻烦,女朋友不喜欢。

解决方案:尝试在网页前端建立播放界面。

四.建立前端播放页面

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>

7.png

问题:在前端直接播放rtmp流将不可避免地用到Flash,而Flash已经死亡。虽然可以通过一些操作允许浏览器加载Flash,但女朋友不喜欢。

8.png

解决方案:使用其它流媒体传输协议。

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加密,而视频流并未加密,所以浏览器不予加载。

9.png
解决方案:查阅文档知,SRS支持https-flv流。

4.配置https-flv流

参考官方文档,修改位于srs/trunk/conf的配置文件并拷贝证书后,重载SRS。

./etc/init.d/srs reload

在前端修改拉流地址后,即可顺利播放。

10.png

问题:我的服务器的线路太烂,夜间上传卡顿,导致直播不畅,女朋友不喜欢。

解决方案:走ipv6网络进行推流,避免拥堵。

5.使用ipv6网络推流

查阅Github知,SRS支持对ipv6的监听。
在配置文件中,将listen 1935;修改为listen 1935 [::]:1935;即可。

走ipv4网络推流
ipv4.png

走ipv6网络推流
ipv6.png

问题:即使我这边推流推得动,女朋友那边也不一定能拉得动。

问题:女朋友与我分手了。:(

五. 添加弹幕功能

直播的乐趣之一是与弹幕互动。
flv.js本身并不支持弹幕功能,但一款名为DPlayer的播放器可以实现这一点(其作者同样是前B站员工)。
关于基本的初始化过程,DPlayer的帮助文档写得非常详细,网上也有很多现成的模板,本文不再赘述。这里只介绍直播弹幕服务的配置。

很多网友用爱发电,搭建了公共的弹幕接口。但这些服务通常只适用于视频弹幕,即弹幕文本按照视频文件的时间顺序呈现,而不是根据现实里的时间顺序呈现,无法用在直播中。所以考虑自行准备后端。

查阅DPLayer的文档知,此前已经有人写过一个dplayer-live-backend
按照说明配置后,发现无法正常工作。

查阅Issue知,DPlayer曾进行过一些数据格式的更改,所以需要对这个后端服务进行一些更正。
https://github.com/Izumi-kun/dplayer-live-backend/issues/2#issuecomment-660833164

按照SukiYume提供的解决方案,后端弹幕服务可以顺利运行。
danmaku1.png
danmaku2.png

问题:没有女朋友,折腾这些还有什么意义呢? :(

六. 参考资料

  1. SRS中文文档
    (https://github.com/ossrs/srs/wiki/v4_CN_Home)
  2. 快速搭建自己的直播服务器,完成属于你的直播服务
    (https://blog.csdn.net/wjwj1203/article/details/82664981)
  3. SRS环境搭建
    (https://www.jianshu.com/p/a7196df3914a)
  4. Getting Started with Video.js
    (https://videojs.com/getting-started/)
  5. flv.js
    (https://github.com/bilibili/flv.js)
  6. 使用flv.js实现HTML5播放FLV视频文件
    (https://www.bysb.net/2943.html)
  7. SRS中文文档_Delivery HTTP FLV Stream
    (https://github.com/ossrs/srs/wiki/v4_CN_DeliveryHttpStream#https-flv-live-stream)
  8. 修复rtmp不能监听ipv6的问题,增加了ipv6端口验证代码
    (https://github.com/ossrs/srs/pull/2157)
  9. DPlayer
    (https://github.com/DIYgod/DPlayer)
  10. 弹幕服务器文档
    (https://dandoc.u2sb.com/live/install.html#%E5%AE%89%E8%A3%85-2)
  11. dplayer-live-backend
    (https://github.com/Izumi-kun/dplayer-live-backend)

已有 10 条评论

  1. 好悲伤的结局啊……
    我也因为想从YouTube转播到b站研究过直播的事情(我博客里有记录,虽然成功了但是最后还是因为花太多时间了感觉不值)。对于博主这种情况,我的建议还是b站投屏,管理来警告的话就切屏假装写报告比较省事且能达成目的,巡查也不会很频繁……

    1. 超管直接关停直播间,动作很快。T T

      1. 可能是分区的问题。b站上很多画手都会在直播画画的时候同时开小窗看剧,这就没事。我就看过一个up直播网球比赛(同样没有版权),超管一来不会直接关掉而是给警告,这时关掉声音拿个HMR谱图挡屏幕好几分钟,然后接着播。一般播完两三小时的比赛是没问题的

        当然仅作为一种思路,可行性我也不知道(

  2. 吾王G

    有个社交网站叫蔷薇花园,可以点播视频或者音乐,并且支持实时对话,本地的文件好像也可以,用外链的话也可以,之前一直和朋友在这个里面一起看番和听歌,UI界面也做得超好看,里面的人说话又好听,哦哊我超喜欢里面的

  3. 1. 女朋友是第一推动力
    2. 虽然没细看博客内容,但是参考文献好评

  4. 广告位招租

    膜拜大佬

  5. 92

    或许可以腾讯会议(

  6. PoorTiger

    博主好像还是学生?那机会还多得是,努力健身,练出八块腹肌,你的社交app的私信就会被女孩塞到99+

添加新评论