如何使用FFMPEG与C拦截编码的视频数据

How can I intercept encoded video data using ffmpeg with C?

本文关键字:编码 的视频 数据 何使用 FFMPEG      更新时间:2023-10-16

首先,我希望您能理解我不良的英语技能。我会尽力写有关它的问题。

我目前正在开发一些应用程序。该应用程序将捕获桌面并编码MP4视频,并将MP4视频数据/块发送给另一个客户端(所有此过程都应在内存中运行,而不是文件)。因此,另一个客户应该可以播放从服务器接收的MP4视频/数据/块。

因此,我使用了avio = avio_open(...),并将重新签名的写功能像avio->write_packet = some_function一样。但是这种方式似乎无法正确正确地"生成" MP4文件/块。似乎原始的write_packet回调具有将数据包写入文件的实际逻辑。但是我不想写入文件。所以我在考虑一个星期,但我没有对此有任何想法。

所以我的问题是:i intercept "编码"视频数据应该由avio->write_packet

处理

不要劫持 avio_open的aviocontext,这必然会造成麻烦。如果要提供自定义的Aviocontext,请使用 - 使用avio_alloc_context并在此处提供回调。使用标志AVFMT_FLAG_CUSTOM_IO表示您这样做(因此,当Muxer关闭时,此aviocontext不会自动破坏)。