Car-eye-http-flv-module 实现nginx-rtmp-mudule HTTP方式的FLV直播功能
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
./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_push,rtmp_auto_push_reconnect和rtmp_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缓存,降低播放延迟
}
}
}
from:https://www.cnblogs.com/car-eye/p/8849722.html
Car-eye-http-flv-module 实现nginx-rtmp-mudule HTTP方式的FLV直播功能的更多相关文章
- 转:Nginx RTMP 功能研究
看点: 1. Nginx 配置信息与使用. (支持 rtmp与HLS配置) 2. 有ffmpeg 编译与使用, 命令行方式来测试验证客户端使用. 转自:http://blog.cs ...
- Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)
一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端, ...
- ffmpeg,rtmpdump和nginx rtmp实现录屏,直播和录制
公司最近在做视频直播的项目,我这里分配到对直播的视频进行录制,录制的方式是通过rtmpdump对rtmp的视频流进行录制 前置的知识 ffmpeg: 用于实现把录屏工具发出的视频和音频流,转换成我们需 ...
- (转)Nginx+rtmp+ffmpeg搭建流媒体服务器
(1)下载第三方扩展模块nginx-rtmp-module # mkdir module && cd module //创建一个存放模块的目录 # wget https://githu ...
- Nginx RTMP 专题
说明: 记录器 - 记录器名称 path - 记录文件路径(recorded file path) (/tmp/rec/mystream-1389499351.flv)filename - 省略目录的 ...
- Mac使用nginx+rtmp服务器
一.安装Homebrow 已经安装了brow的可以直接跳过这一步.执行命令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/H ...
- nginx + rtmp 搭建流媒体服务器
一.安装nginx服务器 1.路径说明: 路径:/usr/local/src 2.下载nginx-rtmp-module (我这里的目录是在/usr/local/src/下面) cd /usr/loc ...
- Ubuntu18.04下配置Nginx+RTMP服务器,实现点播/直播/录制功能
2019.3.22更新 最新的nginx-1.15.9可与openssl1.1.1兼容了 以下原文: 这个东西我眼馋挺久了,最近终于试玩了一下,感觉很好玩,在搭建的过程在也遇到一些坑,这里总结一下 安 ...
- centos7+nginx+rtmp+ffmpeg搭建流媒体服务器(保存流目录与http目录不要随意配置,否则有权限问题)
搭建nginx-http-flv-module升级代替rtmp模块,详情:https://github.com/winshining/nginx-http-flv-module/blob/master ...
- iOS开发之利用IJKPlayer+nginx+rtmp搭建直播的推流和拉流
最近项目中想实现直播的功能,所以研究了一段时间的直播功能,当然也是在别人的基础上不断的学习实现的,所以记录一下,希望对大家有所帮助. 直播拉流功能: 这里使用了开源的IJKPlayer第三框架,ijk ...
随机推荐
- TCP/IP网路协议复习
1.OSI (Open System Interconnect Protocol) 开放互联协议,这是一个七层的计算机网络协议,包括:物理层.数据链路层.网络层.传输层.回话层.表示层.应用层. ...
- 1D mesauring
The Basics of Measure Objects 2.1 the process of 1D Edge extraction Then, the mean ...
- LeetCode OJ:Regular Expression Matching(正则表达式匹配)
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...
- C# POST请求 json格式
/* * url:POST请求地址,例如:url = "http://localhost:35229/ddn/GetPostData"; * postData:json格式的请求报 ...
- 主题模型︱几款新主题模型——SentenceLDA、CopulaLDA、TWE简析与实现
百度最近开源了一个新的关于主题模型的项目.文档主题推断工具.语义匹配计算工具以及基于工业级语料训练的三种主题模型:Latent Dirichlet Allocation(LDA).SentenceLD ...
- 我也说说Emacs吧(2) - Emacs其实就是函数的组合
Emacs本质上是函数的组合 从帮助上看emacs有何不同 Vim和Sublime Text等编辑器,本质上是一个编辑器. 比如我们看看vim的帮助,是这个风格的,比如我要看i命令的帮助: <i ...
- JAVA怎么在函数内改变传入的值
public class TestInt { public int aa(int i) { return i+4; } public static void main(String [] args) ...
- python基础(二)----数据类型
Python基础第二章 二进制 字符编码 基本数据类型-数字 基本数据类型-字符串 基本数据类型-列表 基本数据类型-元组 可变.不可变数据类型和hash 基本数据类型-字典 基本数据类型-集合 二进 ...
- Redis学习总结之一——Redis初入
Redis简介 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis是一个key-value存储系统. ...
- Java中有两种实现多线程的方式以及两种方式之间的区别
看到一个面试题.问两种实现多线程的方法.没事去网上找了找答案. 网上流传很广的是一个网上售票系统讲解.转发过来.已经不知道原文到底是出自哪里了. Java中有两种实现多线程的方式.一是直接继承Thre ...