Linux下使用Nginx结合ffmpeg搭建流媒体服务器
写在前面
此文章用于记录本人在搭建流媒体服务器时的遇到的问题。开头可能会有大量废话,不想看废话的看官请直接移步到动手操作一节。
系统环境
此文章内涉及的所有操作均在虚拟机上经过验证,虚拟机系统为CentOS 7.
实现功能
既然文章的标题说道是流媒体服务器,那么这个流媒体服务器能干嘛?首先,我承认这个所谓的流媒体服务器功能并不全,但它确实是推送的流媒体数据,所以各位看官还不能说我是标题党。此方案能实现的功能如下:
- 在浏览器中播放RTMP直播源
- 用RTMP协议点播服务器视频(不可拖动播放)
众所周知,不可拖动播放的点播根本毫无意义,这里只是顺便记录一下而已。
刨根问底
推/拉流
推流和拉流是相对的,对于同一条数据流,如果关注的对象不同,说法也不同。比如现在你用手机在B站上看LOL直播,你的手机和B站服务器之间的数据流,对于你的手机而言是拉流,对于B站的服务器而言则是推流。下文中所有的数据流均以流媒体服务器为关注对象。
H5如何播放RTMP直播源
首先这里要明确一点,HTML5中的Video标签不能直接播放rtmp数据源。这里就需要用到B站开源的一个叫flv.js的前端库,是的,你没有看错,确实是B站开源的,这里的B站确实你认识的那个小破站。看样子B站的98亿应该是还没花完,小破站牛批!
它的工作原理是将 FLV 文件流转码复用成 ISO BMFF(MP4 碎片)片段,然后通过 Media Source Extensions 将 MP4 片段喂进浏览器。
flv.js的使用和介绍
所以作为流媒体服务器这里需要将rtmp视频流转成flv视频流再推出去。时序图如下:
服务器需要准备什么
由上文可以看出,服务器需要做两件事情:
1.利用rtmp协议进行推/拉流
这里采用Nginx和它的一个插件nginx-rtmp-module来实现,由于要使用插件所以必须要用编译的方式重新安装Nginx。如果你的服务器已经装了Nginx,由于插件不能动态增减,