ffmpeg demuxer针对stream info的处理

来源:互联网 发布:怎么申请淘宝旗舰店 编辑:程序博客网 时间:2024/05/18 01:19

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 0
原创粉丝点击