"opaque" ffmpeg AVFrame 中的指针

"opaque" pointer in ffmpeg AVFrame

ffmpeg 中有一个结构 AVFrame 描述解码的视频或音频数据。

它有一个空指针opaque。文档声称它是 "for some private data of the user".

这是什么意思? 它可以用于传输任何附加数据作为每帧元数据吗?

这是一个专供用户(相对于 ffmpeg 库)使用的字段; ffmpeg 不会以任何方式触及此字段,因此您可以随意使用它。但有一个警告:一些 ffmpeg 函数将制作 AVFrame 的副本(或者可能将引用从 AVFrame 移动到另一个),其中包括复制该字段的值。管理该字段指向的数据的生命周期可能有点棘手。

如果您只需要处理一些每帧元数据,您可能需要考虑 AVFrame 中可用的现有元数据存储(参见 av_frame_get_metadata/av_frame_set_metadata

稍微扩展一下@Andrey Turkin 所说的内容,目的是将特定于应用程序的对象数据添加到 AVFrame 结构中。具体用例通常是应用程序分配内存(使用 get_buffer2 回调)。这个内存可能只是一个指针,但它有时可以是 GPU 中的内存或类似的东西。无论如何,如果应用程序拥有数据并创建与分配的内存/图片缓冲区关联的对象,它通常会希望在解码器 returns avcodec_decode_video2() 函数中给定的 AVFrame 时访问关联的对象,这就是您通常希望使用不透明字段的目的。