深入理解MP4视频文件裁剪原理[下]

本文深入探讨MP4文件裁剪原理,重点讲解stbl box及其子box如stts、stss、ctts和stsc在裁剪过程中的作用,特别是如何处理解码时间戳、关键帧和样本大小信息,以实现精确的视频裁剪。
摘要由CSDN通过智能技术生成

深入理解MP4视频文件裁剪原理[上]
深入理解MP4视频文件裁剪原理[中]
深入理解MP4视频文件裁剪原理[下]
深入理解MP4视频文件裁剪原理[下下]

3.15 stbl box*

  stbl box本身很简单,需要关注的是它的子box,而且由于它的子box可能会被裁剪而改变原始的大小,stbl box本身的大小在裁剪后也需要跟着调整。

3.16 stsd box

   本box用来描述媒体轨道中每个样本的编解码器和参数。STSD Box包含了一个或多个Sample Entry,每个Sample Entry描述了一个媒体样本的编解码器和参数。STSD Box的作用是提供有关媒体样本的编解码器和参数的信息,以便解码器和播放器能够正确地解码和呈现媒体数据。通过解析STSD Box中的Sample Entry,可以了解媒体样本的格式和编码类型,从而选择正确的解码器和解码参数,以实现媒体的播放和展示。譬如存放H264的sps/pps帧的信息。

  对于MP4文件的裁剪操作,这里不需要关心这个帧的内容,直接拷贝即可。

3.17 stts box*

  stts box里面保存了一个压缩格式的表,用来描述音视频帧的解码时间戳。如下图19。

在这里插入图片描述

图19

   stts box里面保存的这个表c语言表示可以描述为:

struct stts_entry_t
{
   
    uint32_t sampe_count;
    uint32_t sample_delta;
}

struct stts_entry_t entry[entry_count];

  其记录的含义是连续相邻的sample_count个帧每个帧的持续时长,时长单位由mdhd box中的timescale来设定。通过这个数组结构,我们就可以计算出 每一帧的解码时间戳。譬如,stts的记录为:
[{2,1000},{3,1500},{3,1200}…]

  那么展开后,帧的时间戳序列为:
[0,1000,2000,3500,5000,6500,7700,8900,10100,…]

  所以当裁剪的时候,因为用户指定的目标MP4的时间戳范围,所以,需要在展开后的时间戳序列中来匹配目标时间戳范围进行截取。为了让播放的时候能够不产生花屏现象,一般要求首帧是IDR帧,所以,对于用户指定的目标时间戳范围中的起始时间戳,我们需要先找到离起始时间戳最近的关键帧,得到该关键帧的帧序号,然后再直接跳过关键帧之前的帧,进行截取处理。

  关于如何找到最接近的关键帧,需要查找stss box中的关键帧记录表,请参考3.18节中的内容描述。

3.18 stss box

  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农心语

您的鼓励是我写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值