首先,我希望你能理解我糟糕的英语水平。我会尽力写下有关它的问题。
我目前正在开发一些应用程序。该应用程序将捕获桌面并编码为 MP4 视频并将 mp4 视频数据/ block 发送到另一个客户端(所有这些过程应该在内存而不是文件中运行)。所以另一个客户端应该可以播放从服务器接收到的 mp4 视频/数据/ block 。
所以我使用了 avio = avio_open(...)
并重新分配了写函数,就像 avio->write_packet = some_function
一样。但这种方式似乎无法正确“生成”mp4 文件/ block 。并且看起来原始的 write_packet
回调具有将数据包写入文件的实际逻辑。但我不想写入文件。所以我考虑了一个星期,但我对此一无所知。
所以我的问题是:我怎样才能拦截“编码”应该由 avio->write_packet
处理的视频数据?
最佳答案
不要劫持 avio_open
提供的 aviocontext,这肯定会给您带来麻烦。如果您想提供自定义 AVIOContext,请这样做 - 使用 avio_alloc_context
并在那里提供您的回调。使用标志 AVFMT_FLAG_CUSTOM_IO
来表明您这样做了(因此当 muxer 关闭时,此 AVIOcontext 不会自动销毁)。
关于c++ - 如何使用带有 C 的 ffmpeg 拦截编码的视频数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42430069/