我需要将视频播放器嵌入到我的程序中(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/