http-flv实时流的实现
1.概述
- 目前我们选择的视频直播方案是nginx+ngx-rtmp-module;
- http-flv直播流是把rtmp实时流的数据封装成flv格式,并基于http的chunked协议来传输。flv格式、http的chunked块协议及http-flv实时流优势在该文档不再赘述,建议读者在网上查阅;
- http-flv流实现详见ngx_http_hlf_module、ngx_rtmp_hlf_module模块,以下简称hlf(http-live-flv)模块;
- 本文档是在已经实现http-flv实时流功能后追加的补充文档,因此阐述的方式与一般的预研文档有所不同,请知悉;
- 本文档的读者需要对nginx、ngx-rtmp-module有一定的基础,理解rtmp、flv、http的相关知识。
2.实现方案
2.1相关实现文件
Hlf查块实现有如下文件
ngx_http_hlf_module.c #hlf入口模块,属http模块
ngx_rtmp_hlf_module.h #hlf实现模块,属rtmp模块
ngx_rtmp_hlf_module.c
ngx_rtmp_hlf_shared.c #相关内存块的管理
其它相关部分
ngx_rtmp.h #增加hlf相关成员
ngx_rtmp.c
ngx_http.h #增加写完一帧(flv -tag)的回调函数
ngx_http.c
ngx_http_write_filter_module.c
2.2模块配置描述
2.2.1属http模块配置
hlf
Syntax: hlf on|off
Context: location
desc:(http模块)指定location是否启用hlf功能,默认off。
hlf_srv
Syntax: hlf_svr numbers
Context: location
desc:(http模块) rtmp server序号,默认0 。
备注:
代码中,见红色部分,flv_relay有识,其实有错识,纠正为hlf,但可不必理会,不影响运行结果。
//模块配置
typedef struct
{
ngx_flag_t hlf_relay; //联动hlf中继,默认不启用--,纠正为hlf
ngx_uint_t hlf_srv; //rtmp server序号,默认0
} ngx_http_hlf_loc_conf_t;
2.2.2属rtmp模块配置
hlf_enable
Syntax: hlf_enable on|off
Context: rtmp, server, application
desc:hlf启用选项,默认off。
hlf_buckets
Syntax: hlf_buckets numbers
Context: rtmp, server, application
desc:针对每个app建立hash链表,即以推流名称生成hask_key并存放入hash表,表示hash表桶大小,默认1024。
hlf_queue_max
Syntax: hlf_queue_max numbers
Context: rtmp, server, application
desc:针对每个http请求流建立发送缓冲,表示缓冲帧最大帧数,默认256,最小32。
hlf_idle_timeout
Syntax: hlf_idle_timeout time
Context: rtmp, server, application
desc:当http请求指定app的某个流不存在时,等待的时间,默认0,即直接断开。
hlf_relay
Syntax: hlf_relay on|off
Context: rtmp, server, application
desc: 联动中继,默认off。
***********************************************************************