ffmpeg H264/mpegts 解析

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

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

h264解析码流的流程

理解流程的几个问题:

  1. 如何找一个完整的帧
  2. 如何处理多slice的情况
  3. 一个完整的帧如何拷贝出去的
  4. 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 。 正常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值