【问题标题】:FFmpeg av_read_frame returns a size but no data?FFmpeg av_read_frame 返回大小但没有数据?
【发布时间】:2013-12-11 13:31:46
【问题描述】:

我编写了一些 C 代码来访问 ffmpeg 并将其包装在 C++/CLI(.NET 托管)类中。该程序获取实时视频流并提取帧并将其转换为 PNG 文件。

不幸的是,保存到磁盘的图像总是黑色的(在 Notepad++ 中打开它们会显示它们充满了空值)。

我正在使用程序集 aformat/codec-55.dll 以及开发头文件和库从 ffmpeg-20131120-git-e502783-win64-dev 进行编译。整个项目使用 Managed C++ (Cpp/cli) .NET 4.0 for 64-bit 编译。

经过一番调查,问题似乎是 av_read_frame 正确填充了 AVPacket->size 值,但 AVPAcket->data 始终为空。当帧完成(得到==1)时,AVFrame 的数据只是一个空矩阵。 :(

代码如下: Example code (sorry, but it didnt paste well into SO)

当数据包返回时,我认为问题出在第 34 行,如下所示:

请问,我怎样才能让它工作?我做错了什么?

【问题讨论】:

  • 你的pkt.data 不是NULL,只是第一个字节是'\0'。所以可能你应该先检查pkt.data的contnet,然后检查frame,然后检查rgbFrame,最后检查outPacket,看看在哪一步内容变得无效。
  • 您是否尝试过先初始化pkt?例如。 AVPacket pkt = {0};。目前在av_read_frame的通话中可能会充满垃圾
  • 如果 143 个内容字节中的第一个是“\0”,则该数据包可能是正确的。您是否尝试记录所有视频帧?可能是您视频的第一帧确实是黑框。

标签: c++ ffmpeg managed-c++ libavcodec libavformat


【解决方案1】:

解码部分对我来说似乎很好。我不太确定编码和保存到 PNG。您为什么不尝试使用 fwrite 将 (frame->linesize*frame->height) 字节从 frame->data 转储到磁盘并使用 Irfanview(例如)查看它?

【讨论】:

    猜你喜欢
    • 2014-02-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    相关资源
    最近更新 更多