c++ - 如何使用 mplayer 播放到内存

标签 c++ c linux mplayer

我需要将视频播放器嵌入到我的程序中(C++),但我无法使用 XEmbed,因为我必须进行一些后处理。 是否可以像使用 ffmpeg 那样将输出作为原始 RGB 写入内存缓冲区?

最佳答案

不幸的是,mplayer 无法作为库运行,但如果您愿意对 mplayer 代码进行一些更改,可能会有一些 hacky 解决方案。这也应该适用于 Windows 和 MacOSX,但需要一些调整。

下载 mplayer 源代码并查找 ./libvo/vo_png.c 文件。您可以使用此文件作为模板并创建您自己的(比方说)./libvo/vo_shm.c - 有一个获取原始像素的函数。这个想法是创建一个共享内存对象(man shmget)。您稍后可以通过在要显示像素缓冲区的其他进程中使用相同的键和 shmget 调用来引用此内存。请注意,您应该至少创建两个内存缓冲区,以便一次只有一个进程使用一个缓冲区。也许三个或更多缓冲区是最佳的。

另外,不要忘记更改 static const vo_info_t info 结构初始化,以将视频输出设备注册为不同的名称。据我所知,您的新 vo_shm.c 可以添加到 config.mak 文件中的构建系统中。

祝你好运。

关于c++ - 如何使用 mplayer 播放到内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7659447/

相关文章:

c++ - 指向常量数组的指针

c++ - 在 directX 11.1 中加载纹理

c - function(&x) 中的指针 &x 是什么时候创建的?

c - strlen 的替代方案不在 0 处中断

c - 无法将 C 程序变量绑定(bind)到 SQL Server 中的日期时间类型列

linux - 如何使用docker获取项目路径

linux - 使用 ip link 连接多个 Chroot Jails

c++ - 编译时的 std::experimental::source_location

linux - 建立相互依赖的共享库(Linux)

android - 在 C++ builder xe8 中没有 opendialog 的情况下动态地(在运行时)在 TImage 中显示图像