You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:45:43