sps pps分析

来源:互联网 发布:近期网络流行语 编辑:程序博客网 时间:2024/05/27 18:17

记录一下最近的debug过程:

264码流的开始部分必须要有sps和pps,否则解析不了。

1.00 00 00 01 67

SPS

2.00 00 00 01 68

PPS

3.00 00 00 01 65

I帧


下面实际的打印信息:

E/ScreenRecord( 7386): INFO_FORMAT_CHANGED: AMessage(what = 'codc', target = 2) = {

E/ScreenRecord( 7386):   int32_t what = 1869968451

E/ScreenRecord( 7386):   string mime = "video/avc"

E/ScreenRecord( 7386):   int32_t width = 1280

E/ScreenRecord( 7386):   int32_t height = 400

E/ScreenRecord( 7386):   Buffer csd-0 = {

E/ScreenRecord( 7386):     00000000:  00 00 00 01 67 42 00 29  e5 40 28 06 72           ....gB.)怨.r

E/ScreenRecord( 7386):   }

E/ScreenRecord( 7386):   Buffer csd-1 = {

E/ScreenRecord( 7386):     00000000:  00 00 00 01 68 ce 31 12                           ....hα.

E/ScreenRecord( 7386):   }

E/ScreenRecord( 7386): }


Android硬编解码,从解码器出来的第一笔数据,会包含CSD-0和CSD-1,这两个值分别对应SPS和PPS。

封装的时候,必须自己去将这两个值CSD-0和CSD-1写入AccessUnit。


MediaMuxer编码:

从编码器拿到CSD-0和CSD-1后,需要在format中设置csd-0和csd-1

在MPEG2TSWriter中取出CSD-0和CSD-1,然后写入到AccessUnit。

再通过WriteAccessUnit和WriteTS分别打包成packet,形成ts文件。