FFmpeg 5+中AVStream.cur_dts字段移除后的替代方案咨询
替代AVStream.cur_dts的解决方案
FFmpeg 5.x及以上版本确实移除了AVStream中的cur_dts字段,你可以通过自行维护每个流的DTS跟踪变量来替代原有逻辑,具体实现如下:
1. 为每个流添加自定义DTS跟踪变量
在代码中为每个输出流维护一个int64_t类型的变量(比如命名为stream_last_dts),用来记录该流上一个处理过的数据包的DTS值。如果是多流场景,可以用数组或字典来对应每个流的跟踪变量。
2. 修改原有检查逻辑
把依赖stream->cur_dts的代码替换为自行维护的变量,示例修改后的代码:
// 初始化时可将stream_last_dts设为AV_NOPTS_VALUE或INT64_MIN if (packet->dts != AV_NOPTS_VALUE && packet->dts <= stream_last_dts) { logD(RECORDER_TAG, "DTS not increasing, packet.dts:%lld, cur:%lld.", packet->dts, stream_last_dts); ret = 0; av_packet_unref(packet); break; } // 处理完有效数据包后更新跟踪变量 if (packet->dts != AV_NOPTS_VALUE) { stream_last_dts = packet->dts; }
3. 注意事项
- 初始化
stream_last_dts时建议设为AV_NOPTS_VALUE,避免初始值干扰第一次有效DTS的判断。 - 合法编码流中同一流的DTS必须单调不减,因此该检查逻辑依然成立。
- 多流场景下要确保每个流的跟踪变量独立维护,不要混用。
FFmpeg移除该字段是因为内部逻辑重构,将这类状态变量从公共结构体中剥离,目前没有直接替代的公共API,自行维护是最直接可行的方案。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

