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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/redstarofsleep/article/details/45092147

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),其它都是一样的.

    ./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. application myapp {

  5. live on;

  6. }

  7. application hls {

  8. live on;

  9. hls on;

  10. hls_path /tmp/hls;

  11. }

  12. }

  13. }

然后,针对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的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议。

音视频开发(8)---nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器相关推荐

  1. 【音视频开发系列】一学就会,快速掌握音视频开发的第一个开源项目FFmpeg

    快速掌握音视频开发的第一个开源项目:FFmpeg 1.为什么要学FFmpeg 2.FFmpeg面向对象思想分析 3.FFmpeg各种组件剖析 视频讲解如下,点击观看: [音视频开发系列]一学就会,快速 ...

  2. nginx+ffmpeg搭建流媒体服务器

    安装ffmpeg: 下载FFmpeg和libx264的包 ffmpeg-2.4.1.tar.bz2  last_x264.tar.bz2 libx264需要yasm,所以先安装yasm apt-get ...

  3. srs服务器播放文件,使用SRS+ffmpeg搭建流媒体服务器播放m3u8格式视频

    1.简介 srs是一个简单的流媒体开源直播软件,ffmpeg是完整的跨平台解决方案,用于记录,转换和流传输音频和视频. 2.相关 官网下载页面:点击我到达 在线演示播放页面:点击我到达 Git页面:点 ...

  4. 音视频开发之旅(34) - 基于FFmpeg实现简单的视频解码器

    目录 FFmpeg解码过程流程图和关键的数据结构 mp4通过FFmpeg解码YUV裸视频数据 遇到的问题 资料 收获 一.FFmpeg解码过程流程图和关键的数据结构 FFmpeg解码涉及的知识点比较多 ...

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

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

  6. 使用EasyDarwin + ffmpeg 搭建流媒体服务器,实现多台智能电视同步播放宣传视频

    近期单位用户提出需求,需要在单位内部的9台安卓智能电视(小米电视)上同步播放用户提供的宣传视频,希望能够做到所有电视音视频同步播放(电视均位于食堂内部,使用内置扬声器,各电视间音频延迟不同会导致混响) ...

  7. Nginx+ffmpeg 搭建流媒体服务器(四):H5直播演练

    H5直播演练 播放器选型 video.js hls.js flv.js 播放器选型 video.js 链接: GitHub https://unpkg.com/video.js/dist/video- ...

  8. 音视频开发基础知识到进阶剖析

    全网最强音视频开发教学--音视频开发基础知识到进阶剖析 1.要掌握多深的原理才能开始做项目 2.音视频基础有哪些必须掌握的 3.进阶需要学习什么项目 视频讲解如下,点击观看: 全网最强音视频开发--音 ...

  9. ffmpeg获取设备支持的分辨率_Qt音视频开发6-ffmpeg解码处理

    一.前言 采用ffmpeg解码,是所有视频监控开发人员必备的技能,绕不过去的一个玩意,甚至可以说是所有音视频开发人员的必备技能.FFmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开 ...

最新文章

  1. php把单词切割成数组,PHP – 将单词分解为数组
  2. bing浏览器_Bing正式改名Microsoft Bing:不再只是搜索
  3. c程序设计语言_习题8-4_重新实现c语言的库函数fseek(FILE*fp,longoffset,intorigin)
  4. 为 protocol 中属性添加默认值
  5. 启动和停止MySQL服务
  6. Set集合设置变量自增长
  7. c++新特性11 (6) =default
  8. url能访问但new file()找不到文件_Go Web编程给自己写的服务器添加错误和访问日志...
  9. Delphi替换PE图标资源
  10. python判断字母数字_Python判断字符串是否为字母或者数字(浮点数)的多种方法
  11. 权限表使用联合主键吗_天天写 order by,你知道Mysql底层执行流程吗?
  12. DllImport的用法
  13. BZOJ 3038 上帝造题的七分钟2
  14. ServerSideIncludeModule不是可识别的本机模块
  15. 2021 年了,TensorFlow 和 PyTorch 两个深度学习框架地位又有什么变化吗?
  16. java项目ppt介绍_Java课设项目介绍及分析.ppt
  17. Linux文件夹的介绍
  18. 冷门节日借势营销策略分析
  19. 程序员实习期馒头加酸菜,转正后月薪10K起步:走路都带风
  20. matlab中基于传递函数或者状态方程的幅频特性分析

热门文章

  1. Hash魔法:分布式哈希算法
  2. ARM系统中断产生流程
  3. 详细剖析linux的内存管理方式(分段式、分页式、段页式),以及进程状态的具体关系
  4. 雷霆战机源代码c语言,C++实现雷霆战机可视化小游戏
  5. jy61 树莓派_用Linux树莓派来读取JY61的串口数据
  6. java 8和jdk区别_java-8 – JDK 6和JDK8之间的Java Collection差异
  7. c4d如何把文字贴在物体表面_一篇文章带你了解C4D布光技巧
  8. 2017提高组D1T1 洛谷P3951 小凯的疑惑
  9. 模板方法模式(Template Method Pattern)
  10. UVa 1394 约瑟夫问题的变形