【发布时间】: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