• UID12
  • 登录2016-06-14
  • 粉丝114
  • 关注50
  • 发帖1415
  • 主页
  • 金币8696枚
社区居民
最爱沙发
忠实会员
喜欢达人
原创写手
极分享 发布于2016-06-12 12:23
0/1012

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

楼层直达

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

 

Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒体服务器.

这个流媒体服务器可以支持RTMP和HLS(Live Http Stream)

从安装开始

Nginx的安装参照我之前的这个: http://blog.csdn.net/redstarofsleep/article/details/45092127

不同的是在configure的时候需要增加nginx-rtmp-module的支持,下载好nginx-rtmp-module后解压,然后nginx安装时增加这个模块(--add-module),其它都是一样的.

 

  1. ./configure --prefix=/usr/local/nginx --with-pcre=/home/user/pcre/pcre-8.32 --with-zlib=/home/user/zlib/zlib-1.2.8 --with-openssl=/home/user/openssl/openssl-1.0.1i  --add-module=/home/user/nginx-rtmp-module  

FFMPEG的安装参照上一篇: http://blog.csdn.net/redstarofsleep/article/details/45092145

 

nginx配合ffmpeg做流媒体服务器的原理是: nginx通过rtmp模块提供rtmp服务, ffmpeg推送一个rtmp流到nginx, 然后客户端通过访问nginx来收看实时视频流. HLS也是差不多的原理,只是最终客户端是通过HTTP协议来访问的,但是ffmpeg推送流仍然是rtmp的.

 

安装完成后,打开Nginx的配置文件nginx.conf进行配置

首先在里面加入rtmp的配置

 

  1. rtmp {  
  2.     server {  
  3.         listen 1935;  
  4.   
  5.         application myapp {  
  6.             live on;  
  7.         }  
  8.         application hls {  
  9.             live on;  
  10.             hls on;  
  11.             hls_path /tmp/hls;  
  12.         }  
  13.     }  
  14. }  

然后,针对hls,还需要在http里面增加一个location配置

 

  1. location /hls {  
  2.             types {  
  3.                 application/vnd.apple.mpegurl m3u8;  
  4.                 video/mp2t ts;  
  5.             }  
  6.             root /tmp;  
  7.             add_header Cache-Control no-cache;  
  8. }  

 

这是一个最简单,最基础的配置, rtmp监听1935端口,如果是hls的话用hls on开启hls,并且为hls设置一个临时文件目录hls_path /tmp/hls; 其它更高级的配置可以参看nginx-rtmp-module的readme,里面有比较详细的介绍其它的配置,并且它还提供了一个通过JWPlayer在网页上播放的例子.

 

保存完配置文件后,启动nginx,通过netstat -ltn命令可以看到增加了一个1935端口的监听.8080是nginx默认的http监听端口.

 

  1. # netstat -ltn  
  2. Active Internet connections (only servers)  
  3. Proto Recv-Q Send-Q Local Address           Foreign Address         State        
  4. tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN       
  5. tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN       
  6. tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN       
  7. tcp        0      0 0.0.0.0:1935            0.0.0.0:*               LISTEN       
  8. tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN       
  9. tcp6       0      0 :::22                   :::*                    LISTEN       
  10. tcp6       0      0 ::1:631                 :::*                    LISTEN    

然后用ffmpeg推流到nginx:

第一个是推到了上面配置的myapp上:

 

  1. ffmpeg -re -i "D:\download\film\aqgy\02.mp4" -vcodec libx264 -vprofile baseline -acodec aac  
  2.  -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://server:1935/  
  3. myapp/test1  

第二个推送到hls上:

 

  1. ffmpeg -re -i "D:\download\film\aqgy\02.mp4" -vcodec libx264 -vprofile baseline -acodec aac  
  2.  -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://ip:1935/  
  3. hls/test2  

现在我们的流媒体服务器有两个实时流了,一个是rtmp的,另一个是hls的,用流媒体播放器播放一下,流媒体播放器可以用vlc也可以用ffmpeg带的ffplay.手机也是可以播放的.

 

上面这两个流的地址分别是:

第一个就是推送的地址: rtmp://serverIp:1935/myapp/test1

第二个是HTTP地址: http://serverIp:8080/hls/test2.m3u8

 

最后贴上一段对于HLS这个比较特殊的流媒体协议的解释:

       (这段解释来自: http://www.cnblogs.com/haibindev/archive/2013/01/30/2880764.html)

  HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。

 

原文来自:http://blog.csdn.net/redstarofsleep/article/details/45092147


0人打赏
您需要登录后才可以回帖
发表回复
极贡献
技术问答
专题荟萃
程序人生
视觉设计
Android开发
iOS开发
编程语言
前端开发
后端开发
服务器架构
软件测试
运维方案
创业路上



最热文章墙

  • 80942/379   【精品推荐】200多种Android动画效果的强悍框架,太全了,不看这个,再有动画的问题,不理你了^@^

  • 45944/191   情人节福利,程序员表白的正确姿势:改几行代码就变成自己的表白了

  • 45583/0   Python爬虫:常用浏览器的useragent

  • 42127/261   【精品推荐】Android版产品级的音乐播放器源码,功能太强大了,最好的产品原型有木有?

  • 39091/145   省时省力的Android组件群来了,非常棒的原型参考

  • 30557/143   2016抢红包软件及源码

  • 29594/71   原创表白APP,以程序员的姿势备战新年后的7夕,持续完善中!

  • 29488/2   超全!整理常用的iOS第三方资源

  • 24854/161   Android版类似UC浏览器:非常赞,产品级的源码

  • 23070/31   麻省理工的一帮疯子,真的实现了随意操控万物!(绝对黑科技)

  • 22766/26   Android工程师面试题大全

  • 22733/27   2016程序员跳槽全攻略

  • 22088/10   GitHub上排名前50的iOS项目:总有一款你用得着

  • 21085/21   码魂:程序员的牛B漫画

  • 19325/85   Android小而全的博客源码:非常适合全面掌握开发技巧

  • 19324/74   【持续更新中】Android福利贴(二):资料源码大放送

  • 19178/43   一个绚丽的loading动效分析与实现!

  • 19115/10   2016年最全的Android面试考题+答案 精编版

  • 18894/3   吐槽那些程序员的搞笑牛逼注释

  • 17882/45   惊艳的App引导页:背景图片切换加各个页面动画效果

  • 17807/104   Android带弹幕的视频播放器源码,来自大名鼎鼎的Bilibili弹幕网站

  • 17764/82   仿京东商城客户端Android最新版,不错的原型和学习资料

  • 17755/1   iOS 动画总结

  • 17409/25   个人收集的Android 各类功能源代码

  • 16920/5   新一代Android渠道打包工具:1000个渠道包只需要5秒

  • 16894/23   Android福利第三波【Android电子书】

  • 16710/1   iOS中文版资源库,非常全

  • 16704/81   【精品推荐】类似360安全卫士安Android源码:非常赞的产品原型

  • 16653/54   基于瀑布流的美女图片浏览App,有注释的源代码

  • 16517/18   用JavaScript 来开发iOS和Android 原生应用:React Native开源框架中文版来啦

  • 16500/10   女程序员的梦,众网友的神回复

  • 16221/11   年会上现场review代码是怎么样的体验!

  • 16219/23   珍藏多年的素材,灵感搜寻网站

  • 15873/19   65条最常用正则表达式,你要的都在这里了

  • 14997/16   基于Android支付宝支付设计和开发方案

  • 14413/11   有木有这样一张酷图帮你集齐所有git命令超实用

  • 14356/18   什么是真正的黑客:收获12200+Stars,人气远超微软开源VS

  • 14152/47   在线音乐播放器完整版(商用级的源码):非常赞,可听免费高品质专辑

  • 13973/62   【技巧一】搭配Android Studio,如何实现App远程真机debug?

  • 13840/0   GitHub iOS 库和框架Top100 

  • 13685/7   用程序员的姿势抢过年的火车票

  • 13661/7   一张图搞定iOS学习路线,非常全面

  • 13308/10   成为Java顶尖程序员 ,看这11本书就够了

  • 13241/10   微信支付终于成功了(安卓,iOS),在此分享

  • 13121/18   一张图搞定Android学习路线,非常全面

  • 12978/29   【持续更新中】Android福利贴(一):资料源码

  • 12884/4   基于Node.js的强大爬虫,能直接发布抓取的文章哦

  • 12701/4   46 个非常有用的 PHP 代码片段

  • 12160/3   即时通信第三方库

  • 11578/9   流媒体视频直播方案

  • 11548/18   八个最优秀的Android Studio插件

  • 11388/9   B站建开源工作组:APP想支持炫酷弹幕的看过来

  • 11227/2   【精品推荐】高质量PHP代码的50个实用技巧:非常值得收藏

  • 11152/9   烧了5亿美金,这家神秘的公司即将颠覆人类未来!

  • 11081/12   中国黑客的隐秘江湖:攻守对立,顶尖高手月入千万美元

  • 10580/1   基于node-webkit跨平台应用案例集之(一)

  • 10336/6   开箱即用!Android四款系统架构工具

  • 10132/11   十大技巧快速提升Android应用开发性能

  • 10120/4   10款GitHub上最火爆的国产开源项目——可以媲美西半球

  • 10079/2   Android性能优化视频,文档以及工具

  • 返回顶部