nginx-rtmp-mudule RTMP 是一款优秀的Car-eye-http-flv-module 是在nginx-rtmp-mudule RTMP基础上修改的流媒体服务器,除了支持flash播放器外,还支持现在常见的播放器。完美实现了HTTP方式的FLV直播功能。

本文简单介绍下该模块的主要功能和使用:

功能

  • nginx-rtmp-module提供的所有功能。

  • 基于HTTP协议的FLV直播流播放。

  • GOP缓存,降低播放延迟 (H.264视频和AAC音频)。

  • 支持Transfer-Encoding: chunked方式的HTTP回复。

  • rtmp配置的server块中可以省略listen配置项。

  • 支持虚拟主机。

支持的系统

  • Linux(推荐)/FreeBSD/MacOS/Windows(受限)。

支持的播放器

依赖

  • 在类Unix系统上,需要GNU make,用于调用编译器来编译软件。

  • 在类Unix系统上,需要GCC/在Windows上,需要MSVC,用于编译软件。

  • 在类Unix系统上,需要GDB,用于调试软件(可选)。

  • FFmpeg,用于发布媒体流。

  • VLC播放器(推荐),用于播放媒体流。

  • 如果NGINX要支持正则表达式,需要PCRE库。

  • 如果NGINX要支持加密访问,需要OpenSSL库。

  • 如果NGINX要支持压缩,需要zlib库。

创建

在Windows上

编译步骤请参考Building nginx on the Win32 platform with Visual C,不要忘了在Run configure script步骤中添加--add-module=/path/to/nginx-http-flv-module

在类Unix系统上

下载NGINX和nginx-http-flv-module。

将它们解压到某一路径。

打开NGINX的源代码路径并执行:

将模块编译进NGINX

  1. ./configure --add-module=/path/to/nginx-http-flv-module
  2. make
  3. make install

将模块编译为动态模块

  1. ./configure --add-dynamic-module=/path/to/nginx-http-flv-module
  2. make
  3. make install

注意

如果将模块编译为动态模块,那么NGINX的版本号必须大于或者等于1.9.11。

发布

  1. ffmpeg -re -i example.mp4 -vcodec copy -acodec copy -f flv rtmp://example.com[:port]/appname/streamname

appname用于匹配rtmp配置块中的application块(更多详情见下文)。

streamname可以随意指定。

RTMP默认端口为1935,如果要使用其他端口,必须指定:port

播放(HTTP)

  1. http://example.com[:port]/dir?[port=xxx&]app=myapp&stream=mystream

参数dir用于匹配http配置块中的location块(更多详情见下文)。

HTTP默认端口为80, 如果使用了其他端口,必须指定:port

RTMP默认端口为1935,如果使用了其他端口,必须指定port=xxx

参数app用来匹配application块,但是如果请求的app出现在多个server块中,并且这些server块有相同的地址和端口配置,那么还需要用匹配主机名的server_name配置项来区分请求的是哪个application块,否则,将匹配第一个application块。

参数stream用来匹配发布流的streamname。

例子

假设在http配置块中的listen配置项是:

  1. http {
  2. ...
  3. server {
  4. listen 8080; #不是默认的80端口
  5. ...
  6. location /live {
  7. flv_live on;
  8. }
  9. }
  10. }

rtmp配置块中的listen配置项是:

  1. rtmp {
  2. ...
  3. server {
  4. listen 1985; #不是默认的1935端口
  5. ...
  6. application myapp {
  7. live on;
  8. }
  9. }
  10. }

那么基于HTTP的播放url是:

  1. http://example.com:8080/live?port=1985&app=myapp&stream=mystream

注意

如果使用的是HTTP版本1.1(HTTP/1.1),chunked_transfer_encoding配置项默认是打开的。

由于一些播放器不支持HTTP块传输,这种情况下最好在指定了flv_live on;的location中指定chunked_transfer_encoding off,否则播放会失败。

nginx.conf实例

注意

配置项rtmp_auto_pushrtmp_auto_push_reconnectrtmp_socket_dir在Windows上不起作用,除了Windows 10 17063以及后续版本之外,因为多进程模式的relay需要Unix domain socket的支持,详情请参考Unix domain socket on Windows 10

  1. worker_processes 4; #运行在Windows上时,设置为1,因为Windows不支持Unix domain socket
  2. worker_cpu_affinity 0001 0010 0100 1000; #运行在Windows上时,省略此配置项
  3. error_log logs/error.log error;
  4. #如果此模块被编译为动态模块并且要使用与RTMP相关的功
  5. #能时,必须指定下面的配置项并且它必须位于events配置
  6. #项之前,否则NGINX启动时不会加载此模块或者加载失败
  7. #load_module modules/ngx_rtmp_module.so;
  8. events {
  9. worker_connections 1024;
  10. }
  11. http {
  12. include mime.types;
  13. default_type application/octet-stream;
  14. keepalive_timeout 65;
  15. server {
  16. listen 80;
  17. location / {
  18. root /var/www;
  19. index index.html index.htm;
  20. }
  21. error_page 500 502 503 504 /50x.html;
  22. location = /50x.html {
  23. root html;
  24. }
  25. location /live {
  26. flv_live on; #打开HTTP播放FLV直播流功能
  27. chunked_transfer_encoding on; #支持‘Transfer-Encoding: chunked‘方式回复
  28. add_header Access-Control-Allow-Origin ‘*‘; #添加额外的HTTP头
  29. add_header Access-Control-Allow-Credentials true‘; #添加额外的HTTP头
  30. }
  31. location /stat {
  32. #push和pull状态的配置
  33. rtmp_stat all;
  34. rtmp_stat_stylesheet stat.xsl;
  35. }
  36. location /stat.xsl {
  37. root /var/www/rtmp; #指定stat.xsl的位置
  38. }
  39. }
  40. }
  41. rtmp_auto_push on;
  42. rtmp_auto_push_reconnect 1s;
  43. rtmp_socket_dir /tmp;
  44. rtmp {
  45. out_queue 4096;
  46. out_cork 8;
  47. max_streams 64;
  48. server {
  49. listen 1935;
  50. server_name www.test.*; #用于虚拟主机名后缀通配
  51. application myapp {
  52. live on;
  53. gop_cache on; #打开GOP缓存,降低播放延迟
  54. }
  55. }
  56. server {
  57. listen 1935;
  58. server_name *.test.com; #用于虚拟主机名前缀通配
  59. application myapp {
  60. live on;
  61. gop_cache on; #打开GOP缓存,降低播放延迟
  62. }
  63. }
  64. server {
  65. listen 1935;
  66. server_name www.test.com; #用于虚拟主机名完全匹配
  67. application myapp {
  68. live on;
  69. gop_cache on; #打开GOP缓存,降低播放延迟
  70. }
  71. }
  72. }

from:https://www.cnblogs.com/car-eye/p/8849722.html

Car-eye-http-flv-module 实现nginx-rtmp-mudule HTTP方式的FLV直播功能的更多相关文章

  1. 转:Nginx RTMP 功能研究

    看点: 1.    Nginx 配置信息与使用.  (支持 rtmp与HLS配置) 2.    有ffmpeg 编译与使用,    命令行方式来测试验证客户端使用. 转自:http://blog.cs ...

  2. Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)

    一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端, ...

  3. ffmpeg,rtmpdump和nginx rtmp实现录屏,直播和录制

    公司最近在做视频直播的项目,我这里分配到对直播的视频进行录制,录制的方式是通过rtmpdump对rtmp的视频流进行录制 前置的知识 ffmpeg: 用于实现把录屏工具发出的视频和音频流,转换成我们需 ...

  4. (转)Nginx+rtmp+ffmpeg搭建流媒体服务器

    (1)下载第三方扩展模块nginx-rtmp-module # mkdir module && cd module //创建一个存放模块的目录 # wget https://githu ...

  5. Nginx RTMP 专题

    说明: 记录器 - 记录器名称 path - 记录文件路径(recorded file path) (/tmp/rec/mystream-1389499351.flv)filename - 省略目录的 ...

  6. Mac使用nginx+rtmp服务器

    一.安装Homebrow 已经安装了brow的可以直接跳过这一步.执行命令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/H ...

  7. nginx + rtmp 搭建流媒体服务器

    一.安装nginx服务器 1.路径说明: 路径:/usr/local/src 2.下载nginx-rtmp-module (我这里的目录是在/usr/local/src/下面) cd /usr/loc ...

  8. Ubuntu18.04下配置Nginx+RTMP服务器,实现点播/直播/录制功能

    2019.3.22更新 最新的nginx-1.15.9可与openssl1.1.1兼容了 以下原文: 这个东西我眼馋挺久了,最近终于试玩了一下,感觉很好玩,在搭建的过程在也遇到一些坑,这里总结一下 安 ...

  9. centos7+nginx+rtmp+ffmpeg搭建流媒体服务器(保存流目录与http目录不要随意配置,否则有权限问题)

    搭建nginx-http-flv-module升级代替rtmp模块,详情:https://github.com/winshining/nginx-http-flv-module/blob/master ...

  10. iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流

    最近项目中想实现直播的功能,所以研究了一段时间的直播功能,当然也是在别人的基础上不断的学习实现的,所以记录一下,希望对大家有所帮助. 直播拉流功能: 这里使用了开源的IJKPlayer第三框架,ijk ...

随机推荐

  1. 通过Fegin远程调用 ,返回JPA Page 对象报错

    Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of org.sp ...

  2. SpringXML方式配置bean的懒加载lazy-init

    lazy-init(懒加载),表示该bean在容器初始化的时候不进行初始化. 例如: <bean name="role1" class="com.fz.entity ...

  3. Win10 怎么给php文件设置默认打开应用

    一,首先以管理员身份打开命令提示符 二,assoc .php=phpfile 创建一个文件关联 三,ftype phpfile="E:\Program Files\Sublime Text ...

  4. 12.18 分布式系统下的session

    广义的session: 会话控制,可以理解成为一种保存key-value的机制 从key的方面来看:sessionId和token sessionId: 服务端请求客户端的时候,服务端通过setcoo ...

  5. windows配置redis(转)

    此文章全部是转的,我之前是woidows启动redis无法加载配置找到的:原文链接:http://www.cnblogs.com/smileyearn/articles/4749746.html 在w ...

  6. Python中的数据结构 --- 集合(set)

    1.集合(set)里面的元素是不可以重复的    s={1,2,3,3,4,3,4}      ## 输出之后,没有重复的 2.定义一个空集合 s = set([]) print s,type(s)3 ...

  7. c# excel转换为DataTable

    System.Data.DataTable GetDataFromExcelByCom(bool hasTitle, string fileName) { //OpenFileDialog openF ...

  8. JFinal源码详解

    JFinal的框架我24号的一篇博文写到过,它优秀的地方在精简代码上,那么有两处源码是我觉得是值得我们要好好解析一下,一处是初始化加载—servlet跳转,另一处是DB+ActiveRecord的映射 ...

  9. 深度学习(六十六)生成模型、最大化似然、KL散度

  10. 更换pip源,解决pip install安装包慢的问题

    而pip是很强大的Python包安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以最好是将使用的pip源更换一下,这样就能解决被墙导致的装不上库的问题.网上有很多可用的源,例如豆瓣:http ...