Car-eye-http-flv-module 实现nginx-rtmp-mudule HTTP方式的FLV直播功能

8人阅读 评论(0) 收藏 举报
分类:

原文:https://blog.csdn.net/car_eye/article/details/79951950

nginx-rtmp-mudule RTMP 是一款优秀的RTMP服务器,客户端采用FLASH插件或者HLS,但flash插件消耗资源大,HLS延迟严重。nginx-rtmp-mudule 不支持HTTP方式的FLV直播。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

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

将模块编译为动态模块

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

注意

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


发布

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)

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配置项是:

http {
    ...
    server {
        listen 8080; #不是默认的80端口
        ...

        location /live {
            flv_live on;
        }
    }
}

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

rtmp {
    ...
    server {
        listen 1985; #不是默认的1935端口
        ...

        application myapp {
            live on;
        }
    }
}

那么基于HTTP的播放url是:

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

worker_processes  4; #运行在Windows上时,设置为1,因为Windows不支持Unix domain socket
worker_cpu_affinity  0001 0010 0100 1000; #运行在Windows上时,省略此配置项

error_log logs/error.log error;

#如果此模块被编译为动态模块并且要使用与RTMP相关的功
#能时,必须指定下面的配置项并且它必须位于events配置
#项之前,否则NGINX启动时不会加载此模块或者加载失败
#load_module modules/ngx_rtmp_module.so;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    keepalive_timeout  65;

    server {
        listen       80;

        location / {
            root   /var/www;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        location /live {
            flv_live on; #打开HTTP播放FLV直播流功能
            chunked_transfer_encoding on; #支持'Transfer-Encoding: chunked'方式回复

            add_header 'Access-Control-Allow-Origin' '*'; #添加额外的HTTP头
            add_header 'Access-Control-Allow-Credentials' 'true'; #添加额外的HTTP头
        }

        location /stat {
            #push和pull状态的配置

            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /var/www/rtmp; #指定stat.xsl的位置
        }
    }
}

rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;

rtmp {
    out_queue   4096;
    out_cork    8;
    max_streams 64;

    server {
        listen 1935;
        server_name www.test.*; #用于虚拟主机名后缀通配

        application myapp {
            live on;
            gop_cache on; #打开GOP缓存,降低播放延迟
        }
    }

    server {
        listen 1935;
        server_name *.test.com; #用于虚拟主机名前缀通配

        application myapp {
            live on;
            gop_cache on; #打开GOP缓存,降低播放延迟
        }
    }

    server {
        listen 1935;
        server_name www.test.com; #用于虚拟主机名完全匹配

        application myapp {
            live on;
            gop_cache on; #打开GOP缓存,降低播放延迟
        }
    }
}


car-eye开源平台官方网址:www.car-eye.cn;

car-eye开源平台源码下载:https://github.com/Car-eye-team

有关car-eye 问题咨询可以加QQ群590411159。

查看评论

直播协议HTTP-FLV标准解读与技术实现

本文转载自:http://akagi201.orgHTTP-FLVHTTP-FLV,即将音视频数据封装成FLV,然后通过HTTP协议传输给客户端。这里首先要说一下,HLS其实是一个“文本协议”,而并不...
  • mandagod
  • mandagod
  • 2016-11-02 16:14:23
  • 5814

基于nginx-rtmp-module模块实现的HTTP-FLV直播模块(nginx-http-flv-module)

本文后续的内容将在这里更新:《基于nginx-rtmp-module模块实现的HTTP-FLV直播模块(nginx-http-flv-module)续》。       近几年直播行业火爆,开源的直播软...
  • winshining
  • winshining
  • 2018-02-07 22:23:29
  • 6750

(修复bug模块)nginx-http-flv-module-master 支持flv模块直播

  • 2017年08月29日 08:29
  • 553KB
  • 下载

直播http-flv小调研

最近打算直播上http-flv,之前用的是rtmp和hls 一、市场上哪家使用了http-flv作为直播: 通过抓包分析: 优酷的pc网页直播使用了http-flv。     斗鱼、熊猫tv、虎牙pc...
  • ahoustep
  • ahoustep
  • 2016-08-10 20:03:13
  • 8421

HTTP-FLV的两种方式

目前,有两种Http-Flv的实现方式,一种是基于文件的方式,一种是基于包的方式 两种Http-Flv的相同之处在于,都是HTTP方式输出,都是FLv 格式 两种Http-Flv的不同之处在于: ...
  • charleslei
  • charleslei
  • 2016-04-07 18:56:04
  • 12028

用nginx搭建基于rtmp或者http的flv、mp4流媒体服务器

http://itindex.net/detail/48702-nginx-rtmp-http 一、流媒体播放方式  1、  HTTP方式  这种方式要下载FLV视频文件到本地播...
  • coloriy
  • coloriy
  • 2015-07-14 14:04:55
  • 4811

直播服务器简单实现 http_flv和hls 内网直播桌面

直播都不陌生了,如今主流的协议分析的对比图,个人见解。 协议 httpflv rtmp hls dash 传输层 ...
  • mathlmx
  • mathlmx
  • 2017-01-12 10:09:05
  • 8588

http-flv 直播

参考: http://www.cnblogs.com/luconsole/p/6079534.html http-flv到底是怎么直播? 这里我们主要研究httpflv和hls。看了主流几个web直...
  • linux_vae
  • linux_vae
  • 2017-11-02 10:20:50
  • 384

FLV视频直播系统-----利用ffmpeg+ffserver搭建最简单的FLV视频直播系统(ubuntu)

FFmpeg FLV 视频直播 ffserver flv ffmpeg ffplay
  • CSSEIKOCS
  • CSSEIKOCS
  • 2016-01-27 18:06:54
  • 3660

SRS支持的各种HTTP直播流(FLV、TS、MP3、AAC)

SRS支持的各种HTTP直播流(FLV、TS、MP3、AAC)
  • opentogether
  • opentogether
  • 2016-09-02 16:46:06
  • 1988
    个人资料
    持之以恒
    等级:
    访问量: 5万+
    积分: 1077
    排名: 4万+
    最新评论