h264解析码流的流程
理解流程的几个问题:
- 如何找一个完整的帧
- 如何处理多slice的情况
- 一个完整的帧如何拷贝出去的
- ffmpeg parse流程读数据怎么读的
如何找一个完整的帧
- 以0x00 00 01 或者0x 00 00 00 01开头的码流,其后解析到是一个first_mb_in_slice才会一个完整的帧的开始, 因为sps pps 等也有可能是以 0x00 00 01 或者0x 00 00 00 01为起始码开头的。码流 过到 什么时候 才能说明是得到一个完整的帧?
- 过码流, 首先获取到起始码, 说明是一帧或者sps、pps等开始,开始解析看是sps pps,aud,subsps,vd的情况,那么继续过(循环i继续加)当找到是 NALU_TYPE_SLICE 、NALU_TYPE_DPA NALU_TYPE_IDR 、NALU_TYPE_SLC_EXT 说明是一帧的开始。
- 继续过读取到first_mb_in_slice,这个时候表明之前找到的那一帧开头是正确的,标记上已经找到帧开头了。帧开头开始继续过码流,这个时候码流里面就存放的是视频帧的数据了,当找到下一个起始头(0x00 00 01 或者0x 00 00 00 01)的时候,说明找到了完整的一个视频帧了, 停止循环返回当时读的的位置 扣掉 起始码的位置。
- 总的来说 并不是码流解析到这一帧是视频帧数据的时候就返回,需要一直过道下一个起始码的时候才能返回这一帧的码流数据
多slice的情况
- 对于I 或者 IDR B P 等帧。 有first_mb_in_slice并且每一帧第一片的first_mb_in_slice都是0。所以就根据当前的first_mb_in_slice 和之前的first_mb_in_slice 来判断是否是多slice的情况。
- mb初始化为0 。 正常

本文详细介绍了ffmpeg解析H264码流的过程,包括如何寻找完整帧、处理多slice情况、帧拷贝方法以及ffmpeg的parse流程。同时,还探讨了mpegts的pes解包步骤,从ts包到完整视频帧的转换。总结了从H264解析到ts整个流程的关键步骤。
最低0.47元/天 解锁文章
3024

被折叠的 条评论
为什么被折叠?



