使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(二)

第二部分

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:[email protected] -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:[email protected]  -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:[email protected] -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:[email protected] -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

5、待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

注:现在视频服务器只是初期简单的搭建起来,其中用到的一些命令参数是来源于广大网友的分享,这些参数可能不会具有通用性,对于特定的项目并不一定会达到预想的那么理想,比如延时可能会比较大,我测试时,延时还是比较大的,以后会根据自己的项目重新设定参数进行优化。

关于移动流媒体协议的介绍(包括hls)可以参考文章:移动流媒体协议综述

时间: 2024-10-10 20:55:11

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(二)的相关文章

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(十)

第十部分 -- 开发板测试 前几天已经分别将nginx和ffmpeg移植到了开发板上面,但是还是没有进行任何的测试并不知道移植后的效果如何. 今天分别做了两个测试,证明移植的结果是可用的. 1.测试ffmpeg 对于nginx的测试在移植完成后就已经进行过了,当然就是简单的能够显示nginx欢迎界面而已,但是对我来讲,nginx能用就行,并没有对他进行深一步的测试. 但是对于ffmpeg不测试下总感觉不放心,虽然移植时运行显示可以,但是还不知道它能不能工作,所以首先用它进行了视频格式转换的测试.

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(五)

第五部分 前段时间,在Ubuntu上面搭建起来了能支持HLS的流媒体服务器,最终目标是在arm的开发板上搭建这样的流媒体服务器.现在工作只是做了一小部分,正在进行移植,记录下来,方便以后继续干. 1.首先是要移植nginx到arm的开发板上面. 这个其实有人已经做过了,可以使用别人的工程. https://bitbucket.org/ntakimura/android-nginx/src/c80cb9c41a725ecf57f73a196735100aeef5b6e4/?at=android 这

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(六)

第六部分 前几天一直被移植到ARM开发板上的nginx启动的问题困扰,在ARM开发板上启动时不是出现 nginx: [emerg] getgrnam("nogroup") failed (2: No such file or directory) 就是出现 /system/bin/sh: ./nginx: cannot execute - Permission denied 使用命令 adb shell chmod 755 /sdcard/mynginx/sbin/nginx 修改权限

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(一)

第一部分 主要步骤及命令记录: 1.下载nginx,地址http://nginx.org/en/download.html,选择最新版本下载.解压.当前最新版为:nginx-1.7.9. 2.为了增加对rtmp的支持,下载nginx-rtmp-module,地址:https://github.com/arut/nginx-rtmp-module#example-nginxconf,这个是个开源项目.解压后,为了和我在网上看到的教程同步,我改了文件夹名字,将其改成了nginx-rtmp-modul

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(八)

第八部分---FFmpeg移植到Android 最近这几天一直在搞FFmpeg的Android移植,我的目标是在Linux上对FFmpeg进行交叉编译最终得到可以push到Android目录下执行的ffmpeg可执行文件. 为了达到这个目的,完成对FFmpeg的移植,我可以说是查遍了几乎所有网络文章,试遍了网上的各种方法,但最终还是出现各种各样的错误,真是蛋蛋碎了一地阿! 刚刚开始试验的时候,在编译的时候小心脏还加速跳呢害怕失败出错,到后来试的多了,失败的多了直接没感觉了,想着反正没打算通过,很

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(三)

第三部分 这几天实验室搬家,闹腾的,刚刚进入状态. 接着调试,客户端浏览器根据hls协议使用http在网页进行观看直播视频,期间遇到一些小问题,记录下. 1.昨天测试的时候,遇到一个情况,就是在无论在PC机还是移动端浏览器观看视频的时候,总是出现画面丢失现象,烦人得很. 控制台也显示丢包现象严重得很. 可以看出,丢包现象到了很严重的地步.看着都糟心. 此时使用的命令是: ffmpeg -i rtsp://admin:[email protected] -vcodec copy -acodec c

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(九)

第九部分---项目ffmpeg命令解析 前面已经看到了ffmpeg在ARM开发板上执行给出的提示信息: usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... 参照前面在PC机linux操作系统上完成同样的任务执行的命令 ffmpeg -i rtsp://admin:[email protected]  -vcodec copy -acodec copy -s 640x480 -

使用nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器笔记(四)

第四部分 自从换了路由器之后,丢包少了,画面稳了,心情也好了. 今天上午ubuntu搜狗输入法突然不好使了,不能输入汉字了,真别扭阿.赶紧百度怎么办,搜到一条命令,删除IBus,具体什么命令我就不说了,坑阿!删除了以后整个系统设置都快全消失了.有人说这是ubuntu的BUG,谁知道呢,最后重装desk-top才行了. sudo apt-get instal ubuntu-desktop 所以阿,卸载啥软件一定要慎重. 步入正题-- 在命令没有变的前提下,测试了更多的Android手机浏览器,测试

Linux---nginx+ffmpeg搭建流媒体服务器

原帖地址:https://blog.csdn.net/loyachen/article/details/50907828 这里实现了简单nginx+ffmpeg 推本地mp4视频文件的功能,以后将会继续更新 环境 系统环境:CentOS release 6.7 (Final) 需求 利用nginx和ffmpeg搭建流媒体服务器 步骤 安装ffmpeg 安装过程可以参考:centos编译安装ffmpeg:http://blog.csdn.net/loyachen/article/details/5