需求:现在需要搭建一台流媒体服务器,为了将主讲人的电脑桌面屏幕和声音直播给远端的人接收实时观看,要求延迟在5秒左右。理论上RTSP、RTMP、HTTP都可以做直播和点播,但是一般做直播都是用RTSP和RTMP,做点播用HTTP。做视频会议的时候原来使用的是SIP协议,现在基本上被RTMP协议取代了。
两种方案如下:
1)rtsp目前用的比较流行的是live555、vlc、DarwinStreamingSrvr5.5.5等开源软件。
2)rtmp只能用nginx加载rtmp模块来搭建服务端。
首先值得我们需要思考的几个问题:
1、直播端的数据流是拉取还是推送?
2、是服务端主动拉取?还是直播端安装推流软件基于工具来推流?
3、服务端能接收推流吗?如何测试推流成功?
4、接收端用什么接收测试?工具还是浏览器?
需要的环境及工具:
1、笔记本一台(这里作为服务端也是直播端,最好能上公网且是ubuntu系统)
2、Flv视频文件一个(测试点播文件)
3、vlc客户端一个(接收端使用)或者能上网的电脑一台
4、obs客户端一个(直播端)
方案一、
先尝试第一种解决方案rtsp,网上搜索的方案大多数只有三种:
1、用live555作为服务端(网上一堆方法,部署也很简单)
结果:只实现了点播的效果,用obs推流报不知道的协议,网上查询实现直播需要修改源码,弃之。
2、用vlc作为服务端(网上一堆方法,部署也很简单)
结果:实施过程相当简单,但是只能实现mp3音频文件的串流,试过桌面串流好像不行。而且高并发的也不确定有没有性能上的问题。也弃之。
3、用DarwinStreamingSrvr5.5.5作为服务端(网上一堆方法,部署也很简单)
结果:点播都不行,更别说是直播了,当然这里我不否定是不是部署有问题,最后果断弃之。
实验后的结论:
RTSP果断放弃吧!虽然说是延迟很低、实时性高,但是部署都失败了。所以我这里准备采用RTMP作为服务端。
关于vlc和obs两个工具的使用感受:
vlc只能作为服务端和接收端,不能作为直播端推送数据流到服务端。
obs只能作为直播端推送数据流到服务端,不能作为服务端和接收端。
综上所述解答上面提出的几个问题:
1、直播端的数据流是拉取还是推送?
答:推送
2、是服务端主动拉取?还是直播端安装推流软件基于工具来推流?
答:是直播端用obs软件推流
3、服务端能接收推流吗?如何测试推流成功?
答:服务端可以接受推流,服务端可以用盘古直播服务器,在盘古直播注册一个账号,然后记住流媒体服务器的url和流密钥,在obs软件设置里面填上这个参数就可以测试推流成功了。
4、接收端用什么接收测试?工具还是浏览器?
答:接收端用vlc可以接收测试,但是我个人建议还是使用浏览器里面带的播放器测试,延迟更低,但是必须要能上公网,地址如下:
,在URL里面输入你流媒体服务器的地址即可!
截图如下:
方案二、
一、服务端操作:
1、笔记本安装ubuntu系统(步骤略)
2、安装obs软件,注意obs官网linux版本只支持ubuntu安装,所以现在知道为什么上面说明需要ubuntu系统了吧!当然windows也可以,因为我这里还 需要一些php环境运行一些其它的服务。
点击(此处)折叠或打开
- sudo add-apt-repository ppa:obsproject/obs-studio
- sudo apt-get update && sudo apt-get install obs-studio
3、安装nginx和rtmp模块
点击(此处)折叠或打开
- wget http://nginx.org/nginx-1.11.8.tar.gz
- unzip nginx-rtmp-module-master.zip(这个模块去网上搜索下载)
- tar zxvf nginx-1.11.8.tar.gz
- cd nginx-1.11.8
- ./configure --prefix=/usr/local/nginx --add-module=/root/nginx-rtmp-module-master
- make
- make install
修改nginx.conf文件,在server段上面添加如下内容:
点击(此处)折叠或打开
-
rtmp {
-
server {
-
listen 1935;
-
application live {
-
live on;
-
record off;
-
}
-
}
- }
注意里面的application可以加多个,live相当于频道的含义。只不过直播端推流的时候要设置为和接收端一样的地址就行。
启动nginx服务,如果正常应该监听了80和1935端口。保证直播端和接收端能访问服务端的这两个端口。
以下红色字体可以完全忽略
简单测试点播(注意下面是在centos7.2系统操作的):
先找一个flv文件吧!这,需要安装一个ffmpeg软件来模拟推流操作
点击(此处)折叠或打开
- rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
- yum –y install ffmpeg
- ffmpeg -re -i test.flv -f flv rtmp://192.168.1.1/live
找一台能上网的window作为接收端,输入下面的url,然后输入rtmp://192.168.1.1/live,最后点击播放按钮,出现如下画面说明点播正常。其实这个测试点播的步骤完全可以省略,我这里是方便记录一下ffmpeg推流。
服务端接着操作:
1、打开终端直接输入obs命令,然后会弹出obs的界面,然后点击串流—选择自定义流媒体服务器---URL填写rtmp://服务器IP/live—点击确定按钮
2、鼠标指针放到来源空白处,然后点击添加—屏幕捕获
3、鼠标指针放到来源空白处,然后点击添加—音频输入捕获
4、点击OK,在来源处应该会出现屏幕捕获和音频输入捕获了。
然后点击开始串流,最后点击是就OK了!如果下面有个时间开始计时走动了就说明数据流能正常推送到服务端了。
三、接收端操作
浏览器输入下面的url,然后输入rtmp://192.168.1.1/live/,最后点击播放按钮,出现ubuntu的桌面说明直播正常。经过测试一般延迟2秒左右,但是用vlc测试延迟4秒左右。所以如果你的接收端能上公网就用浏览器,如果不能上就用vlc。使用方法如下:
打开vlc,点击媒体—打开网络串流,输入你的服务端的地址,点击播放按钮就可以实时接收直播的数据流了。