c++ - 如何使用带有 C 的 ffmpeg 拦截编码的视频数据?

标签 c++ c video ffmpeg

首先,我希望你能理解我糟糕的英语水平。我会尽力写下有关它的问题。

我目前正在开发一些应用程序。该应用程序将捕获桌面并编码为 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/

相关文章:

c++ - 在 C++ 中处理大尺寸 vector

c - 为什么节点的地址没有分配给结构体的自引用指针?

bash - 如何关闭 OS X bash 时间码中的冒号

bash - 使用 FFmpeg 将视频分割成等长的片段

c++ - 在调整大小时 move 对话框上的按钮

c++ - 将 uint64_t 转换为 std::string

c++ - 堆中的最大重量

c - readdir() 对于子目录无法正常工作

c - 生成站点地图的最有效算法?

jquery - 在鼠标悬停时在视频上显示自定义按钮