处理逻辑上还有些疑惑

来源:5-20 视频裁剪(二)

北漂的虾兵

2022-12-16

//8. 从源多媒体文件中读取音频/视频/字幕数据到目的文件中
while(av_read_frame(pFmtCtx, &pkt) >= 0) {
...
    if(av_q2d(inStream->time_base) * pkt.pts > endtime) {
        av_log(oFmtCtx, AV_LOG_INFO, "success!\n");
        break;
    }
.....

}
这里是一帧一帧的读取数据,里面可能包含音频流、视频流和字幕流,如果只读到一个流的包其pts大于endtime,就结束所有流的读取,是否会导致有些流的数据还没读到endtime就结束了。还是说这个av_read_frame只会把endtime之前所有流的包都读取完毕了,才会读取第一个大于endtime的包。不会先把音频流endtime之前的包读完,视频流的包还剩几个,但是音频流的继续往前读到endtime后面。

写回答

1回答

李超

2022-12-19

这段代码里没有判断不同的流呀,所有的数据,无论音频,视频,还是字幕都是按时间排的,后面的包的时间一定大于等于前面包的时间

0
0

经典再升级-FFmpeg5.0核心技术精讲,打造音视频播放器

学好FFmpeg核心技术,做高效,高薪,有竞争力的音视频工程师

2726 学习 · 814 问题

查看课程