Android开发之利用MediaCodec 获取视频的sps pps 和视频数据
前言
在 H.264 流中,有两种 NALU 极其重要,即为序列参数集和图像参数集。
序列参数集 (Sequence Paramater Set, SPS)
SPS 记录了编码的 Profile、level、图像宽高等
如果其中的数据丢失或出现错误,那么解码过程很可能会失败
图像参数集 (Picture Paramater Set, PPS)
每一帧编码后数据所依赖的参数保存于 PPS 中
一般情况 SPS 和 PPS 的 NAL Unit 通常位于整个码流的起始位置。封装文件一般进保存一次,位于文件头部,SPS/PPS 在整个解码过程中复用,不发生变化。然而对于实时流,通常是从流中间开始解码,因此需要在每个I帧前添加SPS和PPS;
如果编码器在编码过程中改变了码流参数(如分辨率),需要重新调整SPS和PPS数据。
获取SPS、PPS
ByteBuffer spsb = videoEncodec.getOutputFormat().getByteBuffer("csd-0");
byte[] sps = new byte[spsb.remaining()];
spsb.get(sps, 0, sps.length);
ByteBuffer ppsb = videoEncodec.getOutputFormat().getByteBuffer("csd-1");
byte[] pps = new byte[ppsb.remaining()];
ppsb.get(pps, 0,