rtmp协议解析

13 篇文章 2 订阅
6 篇文章 1 订阅

在介绍主要内容之前,先介绍一下当前各协议的应用场景

    RTMP:一般用作直播,允许丢包

    RTSP:一般用作安防,不允许丢包

    RTP:一般用作音视频通话,允许丢包,低延迟

    HLS:即Http Live Stream,苹果公司封装的基于http协议的直播协议

 

然后介绍一下短视频和直播的区别:短视频和直播都要控制数据量的大小,可以根据其特点和应用场景调整参数。

    短视频:根据其对实时性无要求,对帧率要求较高,不能出现卡顿掉帧的情况。可以拉长I帧间隔,即gop间距尽量大,同时增大码率

    直播:根据其对实时性要求高,如中途进入直播间的观众,要尽快出现I帧让用户能看到图像,不能让观众等待太久,而丢失部分帧并不影响观看效果。可以减少I帧间隔,即gop间距尽量小,同时减小码率


下面开始正式内容,介绍rtmp协议数据传输格式:

    对http协议有了解的大概都知道,http协议无论是get、post、put、delate方式,只是通过设定数据的不同位置和不同格式产生不同的请求效果

    rtmp如是,其他任何一种协议也如是,都是设定了一套数据传输格式,并给他起名,作为一种数据传输标准

当然,这里会介绍通过rtmp协议发送h264视频数据sps/pps、I帧、p/b帧和aac音频数据,h265同样,丢弃其中的vps即可

一、视频数据:

我们知道,在h264视频中,帧数据类型是分隔符(即:00 00 01 或00 00 00 01) 后一个字节数据的后5位

sps数据正常情况下为0x67

pps数据正常情况下为0x68

I帧数据正常情况下为0x65

...

取后5位,即:

sps类型: 0x67 & 0x1F = 7

pps类型: 0x68 & 0x1F = 8

I帧类型: 0x65 & 0x1F = 5

分离h264中的各类型帧的数据,只需根据类型进行切割即可,本章不做介绍。

为了方便解说,我列了一个表

字节索引01234...
sps pps0x170x000x000x000x00...
关键帧(I帧)0x170x010x000x000x00...
非关键帧(p/b帧)0x270x000x000x000x00...

可以看到,前5个字节中,sps pps数据第一个字节和I帧第一个字节是相同,不同之处在于第二个字节,I帧使用0x01,sps pps 使用0x00, p/b帧则第一字节使用0x27

下面分别从第5位索引开始介绍各帧类型的数据格式

sps pps帧:

字节索引占用字节数据含义
510x01版本号
61sps[1]即0x67后面一位的字节
71sps[2]即0x67后面第二位的字节
81sps[3]即0x67后面第三位的字节
910xff恒定值
1010xe1sps个数(即0xe1 & 0x1f = 1)恒定值
111(spsLen >> 8) & 0xffsps长度,使用两个字节存储
121len & 0xff
13...13+spsLen-1spsLensps内容sps内容
13+spsLen10x01pps个数
13+spsLen+11(ppsLen >> 8) & 0xffpps长度,使用两个字节存储
13+spsLen+21ppsLen  & 0xff
13+spsLen+3...13+spsLen+3+ppsLen-1ppsLenpps内容pps内容

I/P/B帧:

字节索引占用字节数据含义
51(frameLen >> 24) & 0xff帧数据长度,使用4个自己存储
61(frameLen >> 16) & 0xff
71(frameLen >>8) & 0xff
81frameLen & 0xff
9...9+frameLen-11frame数据内容帧数据内容

以上表格中,spsLen为sps去除00 00 00 01后的数据长度,ppsLen为pps去除00 00 00 01后的数据长度,frameLen为I/P/B帧去除00 00 00 01后的数据长度。

 

二、音频数据:

音频数据相对简单,不过需要分为两步

第一步:告诉播放端,我要开始发送音频了

第二步:音频数据

同样,列表说明

告诉播放端要开始发送音频数据了:

数据索引占用字节数据
010xaf
110x00
210x12
310x08

发送音频数据:

数据索引占用字节数据
010xaf
110x01
2...2+audioLen-1audioLen音频数据内容

以上表格中,audioLen为音频采样数据长度。

 

以上内容即为RTMP协议数据解析全部内容,本章内容结束。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值