本博客包含多个文档和书籍的翻译,但有能力者推荐阅读英文原版

基于 Nginx-rtmp-module 的直播系统开发配置篇

Coding Alan 2个月前 (03-28) 631次浏览 0个评论

Nginx基础

Nginx-rmtp-module 基础

RTMP(Real Time Messaging Protocol)实时消息传送协议,Adobe,应用层协议

HTTP Live Streaming(HLS),苹果公司,M3U8

NRM(Nginx-rmtp-module)下载地址:https://github.com/arut/nginx-rtmp-module/releases或http://arut.github.io/nginx-rtmp-module/

配置文件

防火墙

推流(参见FFmpeg 从入门到精通-FFmpeg编译安装)

拉流可通过VLC播放器进行测试(File > Open Network…),在其中输入推流地址rtmp://192.168.xx.xx:1935/mylive/6即可

基于 Nginx-rtmp-module 的直播系统开发配置篇

Nginx-rmtp-module 进阶

使用 NRM 支持 HLS 协议直播

推流

同样可通过 VLC播放器进行拉流播放,推流过程中,还可以看到/usr/local/m3u8File/目录下会生成很多的 ts 文件

推流的基本格式为ffmpeg -i 视频文件 -vcodec 视频编码库 -acodec 音频编码库 -f flv rtmp://xx,application(如上述的 mylive)之后的参数为串流码(Stream Key),如前面所用到的6和7,用于 区分不同的直播流。

Control 控制器

直播流录制配置:

推流

开启录制访问http://192.168.xx.xx/control/record/start?app=mylive&name=77&rec=myRecord,终止录制将其中的 start 修改为 stop 即可

命令功能
[off|all|audio|video|keyframes|manual]off 关闭录制音频与视频
all录制音频与视频
audio 仅录制音频
video仅录制视频
keyframes仅记录关键帧
manual 手动开启和关闭录制(默认自动录制)

示例:

  • record_path /xx/xx/ 设置录制文件的输出路径(注意权限设置,否则无法保存)
  • record_suffix {1}.flv NRM会将{1}自动替换为 Stream Key
  • record_unique on 用于将当前时间戳添加到已被记录的文件中,输出格式为{StreamKey}-{longtime},默认关闭
  • record_append on 用于将新数据追加到旧文件中,默认关闭,该设置与 suffix 和 unique 存在冲突
  • record_max_size 5000KB 最大录制文件的大小,录制文件超过设置大小,会被清空

drop 命令

redirect 命令

数据统计模块

流数据统计模块 rtmp_stat

访问地址http://192.168.xx.xx/liveStat

基于 Nginx-rtmp-module 的直播系统开发配置篇

Exec 相关功能

所有指令说明请见https://github.com/arut/nginx-rtmp-module/wiki/Directives

Nginx-rtmp-module 应用

相关文章:FFmpeg 从入门到精通-FFmpeg编译安装

FFmpeg 的组件:libavcodec、libavutil、libavformat、libavfilter、libavdevice、libswscale、libpostproc和 libswresample 及 ffmpeg、ffplay、ffprobe

FFmpeg 支持的协议:HTTP、RTP、RTSP、RealMedia RTSP/RDT、TCP、UDP、Gopher、RTMP、RTMPT、RTMPE、RTMPTE、RTMPS、SDP、MMS over TCP。

示例

libx264安装

若出现不兼容请至 Git 官网中下载最新版本 FFmpeg重新编译安装

若使用过程中出现类似 libx264.so.155: cannot open shared object file: No such file or directory

FFmpeg与直播的应用

  • ping 和 ping_timeout:可放于 rtmp 和 server 中,用于主动检查心跳
  • ack_window: 可放于 rtmp 和 server 中,用于设置 rtmp 确认容器中大小,默认为5000000字节。
  • chunk_size:可放于 rtmp 和 server 中,用于设置流中的块大小,默认值为4096字节。
  • max_message: 可放于 rtmp 和 server 中,用于设置输入数据报文最大尺寸,默认为1MB。
  • buflen:可放于 rtmp 和 server 中,用于设置缓冲区长度。
  • rtmp_auto_push:用于设置多任务进行时向多个进程分发任务。
  • rtmp_auto_push_reconnect: 用于设置在rtmp_auto_push超时被销毁时,进行重连。
  • meta:可放于 rtmp、server和 application 中,用于将元数据发送到客户端,默认为打开。
  • interleave:可放于 rtmp、server和 application 中,用于交叉模式,即音视频在同一个 chunk stream 上,默认关闭。
  • wait_key:可放于 rtmp、server和 application 中,用于使视频流从一个关键帧开始,默认关闭。
  • wait_video:可放于 rtmp、server和 application 中,用于禁用音频直至第一个视频帧发送,默认关闭。
  • sync:可放于 rtmp、server和 application 中,用于同步音频流和视频流。
  • allow,deny:可放于 rtmp、server和 application 中,用于设置白名单和黑名单。
  • play:可放于 rtmp、server和 application 中,用于播放本地或远程点播文件。
  • max_connections:可放于 rtmp、server和 application 中,用于设置最大连接数。
  • access_log:可放于 rtmp、server和 application 中。
  • log_format:自定义日志格式。

    • connection:连接数
    • remote_addr:客户端地址
    • app_application:名称
    • name:最后一个串流码名称
    • args:最后一个播放的流/推流参数
    • flashver:Flash 版本
    • swfurl:swf 地址
    • tcurl:tc 地址
    • pageurl:客户端页面地址
    • command:推/拉流中的命令:none, play, publish, play+publish
    • bytes_sent:发送到客户端的字节数
    • time_local:连接关闭时间
    • session_time:连接持续时间
    • session_readable_time:格式化时间
    • msec:UNIX时间戳

补充:

由于当前 OBS 推流工具只能添加一个源,因此通常在需要于多个平台进行直播时可使用 Nginx 配置的方式,示例配置如下

 

喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址