两个月多月没写东西了哇,记录下之前内网流媒体服务器搭建的步骤吧,这里只需要关心RTMP协议,所以搭建方案就比较简单了,直接通过Nginx、nginx-rtmp-module、ffmpeg来实现。
环境: Ubuntu 18.04、Nginx 1.16.1、PotPlayer
nginx-rtmp-module
nginx-rtmp-module是知名的Nginx流媒体扩展,支持RTMP\HLS\MPEG-DASH实时流等特性,具体见项目文档。
Nginx此前已配置过,我这里只需要添加扩展即可,先对现有Nginx可执行文件进行备份:
1 | cd /usr/local/nginx/sbin |
下载nginx-rtmp-module扩展,并进行编译:
1 | cd ngx_module |
替换Nginx可执行文件:
1 | cp -f objs/nginx ../nginx/sbin/nginx |
在配置文件nginx.conf
添加如下内容,此处rtmp与http在同一个层级:
1 | rtmp { |
可以看到我配置了两个application,一个叫myapp,一个叫vod,采用的模式也不同,myapp采用的直播,为现场模式;vod点用的点播,播放指定的FLV或MP4文件。
现在停掉现有的Nginx服务之后重启,因为此时是测试机就直接这么操作了,不想停机的话,可以通过热升级的方式:
1 | nginx -s stop && nginx |
这个时候我们的流媒体服务器就准备好了。
直播推流
ffmpeg是视频处理最常用的开源软件,它提供了录制、转换以及流化音视频的完整解决方案,包含了非常先进的音频/视频编解码库libavcodec,平时生活中应用的场景非常多,这里的推流也通过ffmpeg实现。
第一步,安装:
1 | sudo apt-get install ffmpeg |
准备好一个本地的视频,就可以进行推流操作了:
1 | ffmpeg -re -i /home/top/vod/c4-rem\!x.flv -vcodec copy -f flv rtmp://192.168.199.106:1935/myapp |
其中参数选项说明:
1 | -re 以本地帧频读数据,主要用于模拟捕获设备 |
视频播放
我这里选择在另一台Windows机器上启动PotPlayer,便于抓取RTMP数据包:
Live模式
右键添加RTMP播放源rtmp://192.168.199.106:1935/myapp
即可观看直播视频。
Play模式
右键添加RTMP播放源rtmp://192.168.199.106:1935/vod/c4-rem!x.flv
即可,注意此处与live模式不同,需要我们在播放源路径中加入指定的视频文件名称,不需要手动进行ffmpeg推流,和我们在视频网站看视频是一样的。
在线RTMP源
如果只是想抓取RTMP数据包并且有网络访问权限的话,直接使用在PotPlayer中添加某卫视的直播源就行了:
东方卫视: rtmp://58.200.131.2:1935/livetv/dftv
湖南卫视: rtmp://58.200.131.2:1935/livetv/hunantv