RTMP/FLV学习注意要点

本文探讨了RTMP和FLV格式之间的兼容性,重点介绍了如何通过理解两种格式的内部结构来实现音视频流的互换。文章详细解释了RTMP Packet与FLV Tag之间的转换方式,包括关键帧、序列头等数据类型的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RTMP/FLV学习注意要点

1.RTMP和FLV格式友好的兼容性,主要体现在RTMP封装可播放的音视频流时,仔细研究一下,你会发现,RTMP Packet中封装的音视频数据流时,其实和FLV/tag封装音频和视频数据的方式是相同的,所以,我们只需要按照FLV封装H264和AAC的方式,即可生成可播放流。只不过视频相关包包括:onMetaData,AVCDecoderConfigurationRecord,h264数据。和flv文件中的区别是flv文件用tag头,rtmp中相关信息是放在rtmp头中。至于内部内容是一样的。友好的兼容性带了的便捷,比如RTMP流媒体服务器可以直接将RTMP Packet作为FLV/tag写入文件,只需要稍微处理一些FLV头既可以保存成FLV文件。

 

2.在FLV文件格式中,VPacketType代表着此Tag内所包含的内容的类型,当AVPacketType = 0x00(序列头)的时候,说明此Tag中包含的是头信息,为0x01的时候是关键帧,为0x02的时候是P帧或者B帧,在这里有两点值得注意一下:AVPacketType = 0x00,只有在ScriptData(对应RTMP/FLV中的onMetaData)之后的第一个Tag内才会出现,其他时候不会出现,第二点就是,当AVPacketType为0x01的时候,此Tag会包含4个Nalu单元,分别是SPS , PPS, SEI,和IDR帧。注意:针对第一点,ScriptData(对应RTMP/FLV中的onMetaData)之后的第一个Tag中AVCVIDEOPACKET部分同时包含SPS和PPS的NALU;第二点,在RTMP/FLV中,为了避免后面观看的客户端无法解码,需要在I帧前带上SPS,PPS等解码信息。参考:http://blog.youkuaiyun.com/nvniaobi/article/details/49978935

 

3.一个tag至少需要包含一个完整的帧,如果一个NALU包含一个完整的帧,则好处理,H264码流中此Nalu的头0x00 00 00 01或者0x00 00 01去掉,然后放到Data字段中去就OK了;如果需要一个tag包含多个NALU,则需要增加NALU的长度字段,如下图。参考:http://blog.youkuaiyun.com/nvniaobi/article/details/49978935

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值