使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器(二)
来源:互联网 发布:greenplum是什么数据库 编辑:程序博客网 时间:2024/04/30 00:38
第二部分
1、昨天已经把网络摄像机的rtsp视频流成功利用FFmpeg和Nginx转换成rtmp流推送到了nginx视频服务器上面,并且通过vlc可以观看到直播视频。
今天继续昨天的工作,将rtsp的视频流推送到Nginx上面,客户端根据hls协议使用http在网页进行观看(推送的仍然是rtmp视频流),关于hls,先给一小段简单介绍:
HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。
2、昨天将rtsp视频流转换成rtmp视频流时,使用到的命令是:
ffmpeg -i rtsp://admin:12345@172.27.35.56 -acodec aac -strict experimental -ar 44100 -ac 2 -b:a 96k -r 25 -b:v 500k -s 640*480 -f flv rtmp://172.27.35.2:1935/myapp/test1可以看出,在对视频流的格式转换时,没有任何参数,对于音频使用了
-acodec aac当将视频流推送到hls上时,使用这种缺省的参数时,出现了意外情况(我使用的是下面命令):
<span style="color:#000000;">ffmpeg -i rtsp://admin:12345@172.27.35.56 -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 -f flv rtmp://172.27.35.2:1935/hls/test2</span>使用这个命令进行转换推送时,不论是在vlc还是网页上面都不会出现视频画面。使用wireshark抓包,可以看出是有数据包发出的,但是就是显示不出来,屏幕一片黑。
当使用ffplay播放时,出现了提示:
[mpegts @ 0xb0e07500] Could not find codec parameters for stream 0 (Video: h264 ([27][0][0][0] / 0x001B), none): unspecified size没有为视频指定编码格式,所以为它添加参数,则执行的命令为:
<span style="color:#000000;">ffmpeg -i rtsp://admin:12345@172.27.35.56 -vcodec copy -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 -f flv rtmp://172.27.35.2:1935/hls/test2</span>
<span style="color:#000000;">-vcodec copy</span>表示所要使用的视频的编码格式,这里指定为copy表示原样拷贝。
3、为了能够成功将视频流推送到hls上,还需要对nginx.conf配置文件进行修改,在http中添加下面内容:
<span style="color:#000000;">location /hls { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /tmp; add_header Cache-Control no-cache; } </span>保存之后,重新启动nginx。
4、执行命令
ffmpeg -i rtsp://admin:12345@172.27.35.56 -vcodec copy -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 -f flv rtmp://172.27.35.2:1935/hls/test25、待ffmpeg运行以后,可以在vlc、电脑浏览器、手机浏览器中输入
http://172.27.35.2:80/hls/test2.m3u8进行播放。
6、下面是一些视频播放截图,分别在vlc、电脑firefox浏览器、iphone safari浏览器和android UC浏览器的测试图
PC_firefox
PC_VLC
IPHONE_Safari
Android_UC
注:现在视频服务器只是初期简单的搭建起来,其中用到的一些命令参数是来源于广大网友的分享,这些参数可能不会具有通用性,对于特定的项目并不一定会达到预想的那么理想,比如延时可能会比较大,我测试时,延时还是比较大的,以后会根据自己的项目重新设定参数进行优化。
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(二)
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(二)
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器(二)
- 直播系列5-使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(二)
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(一)
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(三)
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(四)
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(五)
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(六)
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(七)
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(八)
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(九)
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(十)
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(十一)
- 直播系列4-使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(一)
- nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器
- nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器
- 虚拟机 ubuntu设置静态IP
- 项目5-- 迷宫问题之图深度优先遍历解法
- 命令行设置代理
- libcurl.lib 导入问题 须知
- java中,一个类实现某个接口,必须重写接口中的所有方法吗???
- 使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器(二)
- ubuntu 下tomcat7启动慢
- form
- linux文件权限
- canvas导出为图片并用JS下载
- UIApplication ShareApplication 应用
- 利用自定义的SQL语句生成类代替实体类的使用
- 分享功能
- Unity3D自定义脚本模板