rtmp协议

流媒体协议详解_步基的博客-CSDN博客

目录

1 rtmp格式

 2 header

3 chunk data


1 rtmp格式

Real Time Messaging Protocol(实时消息传送协议协议)是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。  在RTMP协议中信令和媒体数据都称之为Message,包含Message head。RTMP基于TCP,在TCP三次握手完成后,RTMP也定义了自己的六次握手,主要用于版本适配、RTT计算;直播场景最低延时通常3秒左右。由于TCP的包长度受限于MTU(1500个字节),而RTMP的Message长度可能超过MTU,会采取分片,将消息体拆分成多个chunk data

RTMP 协议来的传输单元是 chunk。一个 RTMP 包就是一个 chunk。RTMP消息组成:包头,包体。包头可以是4种长度的任意一种:12, 8, 4, 1 byte(s).完整的RTMP包头应该是12bytes,包含了时间戳,AMFSize,AMFType,StreamID信息, 8字节的包头只纪录了时间戳,AMFSize,AMFType,其他字节的包头纪录信息依次类推 。包体最大长度默认为128字节,通过chunkSize可改变包体最大长度,通常当一段AFM数据超过128字节后,超过128的部分就放到了其他的RTMP封包中。

RTMP 协议最多支持 65597 个流(chunk)。

 2 header

chunk header中Chunk stream ID 是用来区分消息信道的。CS ID(块流ID) 范围为: 3 ~ 65599。

                                                     Adobe建议的CS ID设置

 

                                                                                 AMFType消息类型

StreamID

 StreamID是音视频流的ID,如果AMFType!=0x08或!=0x09那么 StreamID为0。
ChannelID 和StreamID之间的计算公式:StreamID=(ChannelID-4)/5+1 参考red5
例如当ChannelID为2、3、4时StreamID都为1当ChannelID为9的时候StreamID为2

基本头分为三种情况由Base Header第一个字节后六个bits决定

    (后六个bits==0):基本头长度为2字节第二个字节表示块流ID
    (后六个bits==1):基本头长度为3字节,第二三个字节表示快流ID
    (1<后六个bits<=64):基本头长度为1字节,后6bits表示块流ID

3 chunk data

如果 AMFType = 0×09, 数据就是 Video Data。Video Data由多个video tag组成,一个video tag,包含:SPS,PPS,访问单元分隔符,SEI,I帧包

                                                                        VideoTagHeader结构

AVCPacketType表示 VIDEODATA

IF AVCPacketType ==0 AVCDecoderConfigurationRecord(AVC sequence header)//包含sps,pps等信息。解码器stop之后再次start之前,如seek、快进快退状态切换等,都需要重新送一遍sps和pps的信息。AVCDecoderConfigurationRecord在FLV文件中一般情况也是出现1次,也就是第一个 video tag.
IF AVCPacketType == 1 One or more NALUs (Full frames are required)

编码器输出的裸音视频数据是不能直接用于推拉流的,RTMP直播通常采用FLV格式,FLV格式要求:
对于音频数据,在裸数据之前,必须增加1个字节的元格式,这个格式定义了采样率、采样精度、通道布局,对于AAC格式,还需要增加ADTS头。
对于视频数据,在裸数据之前,也必须增加1个字节的元格式,这个格式定义了编码器、帧格式,对于H264,还需要增加SPS和PPS。
 

4 rtmp推流

ffmpeg -stream_loop -1 -re -i "abc.mp4" -vcodec h264 -acodec aac -f flv  -y rtmp://127.0.0.1/live/buji2
 

wireshark抓包,若过滤rtmp,则无内容显示。过滤rtmpt

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值