ffmpeg demuxer针对stream info的处理

ffmpeg demuxer针对stream info的处理,我觉得最重要的就是针对audio/video帧的处理,由于audio每一帧都是关键帧,而video的每一帧由于压缩比例的原因,不可能都是关键帧。那么在制作文件的时候,不可避免的会有错误的time stamps /pts/size/pos数据,以video作为例子:

video的数据 timestamp是相对于stream 的start time而言的,需要减去start time来算出每一帧的相对时间,为omx或者软解做好准备。pts数据必须是连续和有效的。比如MOV spec中就规定了pts的大小,druation的值必须为正数等。当然,根据不同的codec,demuxer或者codec会自己做一些处理,每个codec是不同的。


但是如果一旦数据本身制作的时候就有问题,那么需要demuxer在处理的过程中做一些容错处理,但是这个容错没有规律可言,因为这些数据有可能是没有规律的,这么做的目的是为omx数据处理做好准备。


OMX在接到demuxer的数据时,dts等数据会在对应的时间将buffer的数据解析出来,送到缓冲区,供sink的pad进行处理,如果发现有些数据比如pts太大,那么omx处理不了,便会丢弃frame。当然OMX也会做一些容错,但是跟前面谈到的原因一样,他们也不会有太多的规则可循。那么现象就是video会静止,花屏等,一旦超过一段时间没有数据 ,整个管道便会pause住。

那么针对这类问题,可在demuxer,decoder,sink这三个地方dump的数据进行分析,基本上能解决大部分的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值