如果我在 FFmpeg 中使用 av_read_frame 会丢失多个帧

2024-03-14

我有一个 3500 帧的 HEVC 序列,我正在编写一个解码器来读取它(逐帧读取并转储到 yuv)。在我的 main() 中,我有一个 for 循环,它调用解码器() 3500 次(我假设在这个阶段 main() 知道有多少帧)。

因此,对于每次调用解码器(),我都需要返回一个完整的帧。这就是解码器()的样子..

bool decode(pFormatCtx, pCodecCtx)
{
    int gotaFrame=0;

    while (gotaFrame==0) {

        printf("1\t");

        if ( !av_read_frame(pFormatCtx, &packet) ) { 
            if(packet.stream_index==videoStreamIndex) {

                // try decoding
                avcodec_decode_video2(pCodecCtx, pFrame, &gotaFrame, &packet);

                if (gotaFrame) {  // decode success.

                    printf("2\t");

                    // dump to yuv ... not shown here. 

                    // cleanup
                    av_frame_unref(pFrame);
                    av_frame_free(&pFrame);
                    av_free_packet(&packet);

                    return true;
                }
            }
        }
    }
}

行为是这样的: 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 2 ......看起来它在解码一帧之前读取了几帧?第一帧是 I 帧,所以不应该立即解码吗?

使用这段代码,我最终丢失了几帧(由一系列 1 表示)。有人可以帮我吗?我的代码中是否做错了什么?

更新:测试剪辑仅限视频。没有音频。


您所看到的是正确的行为。解码器缓冲一些帧以提高多线程效率。可能需要几个帧才能“启动泵”。基本上,为了保持程序响应,avcodec_decode_video2 将帧排队进行解码,然后返回。这可以防止你的程序长时间阻塞。在B帧的情况下,解码顺序可能与显示顺序不同,也绝对需要延迟解码。

那么,如何不丢失这些帧呢? av_read_frame 停止返回新帧后,您必须通过使用空数据包调用 avcodec_decode_video2 来刷新解码器,直到不再重新调整帧。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我在 FFmpeg 中使用 av_read_frame 会丢失多个帧 的相关文章

随机推荐

  • 无法解析 com.facebook.react:react-native:0.32.0

    我在 android studio 的 React Native 项目中打开了 android 文件夹 做了所有可能的修改build gradle文件 但是我收到这个重复的错误 Error Failed to resolve com fac
  • jQuery Mobile 绑定事件

    我在使用 jquery mobile 时遇到了一些问题 我的页面总是被调用这个函数运行 document bind pagechange function peforms ajax operations 问题是 每次查看我的页面时 都会增加
  • Git 命令仅重置索引和工作树而不是 HEAD

    这个问题是后续问题这个问题 https stackoverflow com questions 44513186 how do i edit a commit with interactive rebase as uncommited 它试
  • C 中 If-Else 和三元运算符之间的速度差异...?

    因此 在同事的建议下 我刚刚测试了三元运算符和等效的 If Else 块之间的速度差异 并且三元运算符生成的代码似乎比 If Else 快 1 到 2 倍 我的代码是 gettimeofday tv3 0 for i 0 i lt N i
  • 在 R 中建立复杂方程模型

    我有以下模型 我在 R 中将其编码为 function t C Ao s wd ph C Ao exp s t cos wd t ph 我想用这个方程来形成一个预测模型 但是 我不知道如何成功运行或绘制这个方程 I tried nls但遇到
  • phpmyadmin 中的 $GLOBALS['cfg'] 在哪里

    我在phpmyadmin下的phpinfo php文件中发现 有这样的配置设置 if GLOBALS cfg ShowPhpInfo phpinfo 我想知道在哪里可以设置 GLOBALS cfg ShowPhpInfo 配置 当然 我可以
  • angularjs 编译 ng-controller 和插值

    On the docs https docs angularjs org api ng function angular injector我看到了一个后来添加的编译 东西 的例子 var div div content label div
  • Angularjs 会话存储和范围

    有人知道为什么我的范围变量没有更新吗 这让我难以置信 sessionStorage 变量很好 但是当我在范围变量中定义它们时 我收到 未定义 错误 我已经修改了 scope apply 但显然范围已经被消化了 S请帮助新手 if sessi
  • Javascript 从变量渲染 jpeg 二进制数据

    如何渲染 Javascript 变量中包含的 JPEG PNG 文件数据 是否可以 需要什么 JavaScript 库 使用的浏览器是FF IE Thanks 现代浏览器支持内联图像 http dean edwards name weblo
  • Django/Heroku:致命:角色的连接太多

    所以我刚刚通过 Heroku 业余爱好 和 Postgres 试用版 推出了一个包含 Channels 2 0 Daphne 2 2 0 和 asgi 的网站 当我启动网站时 我点击了几个页面 然后收到 500 错误 我通过电子邮件收到的错
  • 无法在 Outlook 中正确显示 html 电子邮件签名

    我用 html 为自己创建了一个简单的电子邮件签名 他的代码是 div style width 50px height 50px margin right 10px img src logo png div div style height
  • C# 读取Excel工作表

    有人可以帮我在 C 应用程序中阅读简单的 Excel 工作表吗 我希望能够迭代每一行并在每一列上有一个句柄 谢谢 杆 这是我发现的最简单的方法 从 C 创建 Excel XLS 和 XLSX 文件 https stackoverflow c
  • 如何使用域名setCookie和getCookie

    当我保存 cookie 时 它 会与当前 URL 链接一起存储 当我获取仅搜索当前 URL 的 cookie 时也是如此 我需要使用我自己定义的 URL 链接保存和检索 cookie 你能帮助我吗 您无法读取不同域设置的cookie 如果可
  • 有人能在 android studio 中使用 chromecast android 示例吗?

    我在尝试让这些文件正确加载时经历了一段糟糕的时光 要么是支持框架失败 要么是转换 API 失败 有人有可重复的方法吗 github 示例显示 即将推出 用于加载到 android studio 中 我还没有转换其中一个测试项目 但我已经能够
  • 从 Django 服务器一次传输多个文件

    我正在运行 Django 服务器来为受保护网络中的另一台服务器提供文件 当用户请求一次访问多个文件时 我希望 Django 服务器将这些文件一次性传输给该用户 由于在浏览器中一次下载多个文件并不容易 因此需要以某种方式捆绑文件 我不希望我的
  • 如何将wrapper-div居中而不是内容居中

    我希望我的页面始终在浏览器中居中 而不影响内容 就像align text center 那样 我想将我的包装器 div 居中 我该怎么做 简化现有页面 div div Music Heaven div div div div div div
  • 使用领域驱动设计的node.js

    我正在将应用程序从 C 迁移到 Node js 我一边学习一边学习node js 所以我是一个node js 新手 我正在阅读 领域驱动设计的模式 原则和实践 一书 发现我当前的项目可以从中受益的很多重要信息 例如 书中有一个示例电子商务应
  • 数据绑定与 MVC 根本不兼容吗?

    数据绑定 http en wikipedia org wiki Data binding在视图和模型之间建立直接耦合 从而绕过控制器 从根本上讲 这打破了模型 视图控制器架构模式 我的想法正确吗 这是否会使数据绑定成为一件 坏事 Edit
  • awk 中的“非法主”是什么?

    awk 给我以下错误 awk illegal primary in regular expression lt gt lt at lt gt lt source line number 10 source file transpile aw
  • 如果我在 FFmpeg 中使用 av_read_frame 会丢失多个帧

    我有一个 3500 帧的 HEVC 序列 我正在编写一个解码器来读取它 逐帧读取并转储到 yuv 在我的 main 中 我有一个 for 循环 它调用解码器 3500 次 我假设在这个阶段 main 知道有多少帧 因此 对于每次调用解码器