RTMP拉流转Http-FLV输出

目前常用的流媒体协议RTMP、HLS、Http-FLV,其中hls协议的延迟太大,rtmp的协议实现比较复杂,而http-flv基于http协议简单方便,在浏览器上实现播放也非常容易。
此文讲解rtmp客户端拉到rtmp流后,转封装成flv 格式并通过 http服务器发送给客户端的过程。(rtmp格式直接观看门槛比较高,要自定义播放器及设备)

 

一、rtmp消息格式

rtmp协议不作过多说明。握手完成后,主要传输的是视频和声音数据,
参考 rtmp官方标准规范详细解析 https://www.cnblogs.com/chgaowei/p/5445558.html
如何理解 rtmp 通过 flv 格式推送音视频流(h264/aac),https://zhuanlan.zhihu.com/p/83454344

 

二、flv格式

flv格式参考:https://blog.csdn.net/weixin_42462202/article/details/88661883
用FlvAnalyzer.exe可以打开一个flv进行查看flv的内部信息, 下载地址https://github.com/zymill/flvAnalyser
软件运行如下图:

 

 

 

三、rtmp转flv

flv header 文件头
flv tag , 一个tag还包含tag header 和 tag body
rtmp一个消息装入一个flv tag是非常容易的事情。
发送flv时要先发送flv header,再发送flv tag

还有一个关键点, AVC sequence header & AAC sequence header ,https://blog.csdn.net/ai2000ai/article/details/85114110

这个是向解码端说明视频和音频的信息,包含分辨率和帧率,音频采样率等等。 非常重要,这个信息只在rtmp client连接到server的时候发送一次,(如果后面server发生改变也会发送),因此rtmp client要将此消息保存下来,在发送flv时,优先发送这个部分。否则会报无解码器信息。

代码示例: https://github.com/PHZ76/rtmp (这里实现的是rtmp服务端接受rtmp push转flv,拉流转flv与此大致过程基本相同)

更多参考:
http-flv详情及与其他流媒体协议的对比: https://www.yanxurui.cc/posts/server/2017-11-25-http-flv/

posted @ 2022-12-14 18:16  冥想心灵  阅读(700)  评论(0编辑  收藏  举报