我需要在我的程序(C++)中嵌入一个视频播放器,但是我不能使用XEmbed,因为我必须做一些后处理。可以像使用ffmpeg那样将输出作为原始RGB写入内存缓冲区吗?
发布于 2011-10-05 19:03:01
不幸的是,mplayer不能作为库运行,但如果您愿意对mplayer代码进行一些更改,可能会有一些老套的解决方案。这应该也适用于Windows和MacOSX,但需要进行一些调整。
下载mplayer源代码并查找./libvo/vo_png.c文件。您可以将此文件用作模板并创建自己的(比方说) ./libvo/vo_shm.c --有一个函数可以获取原始像素。其思想是创建一个共享内存对象(man shmget)。稍后,您可以在将要显示像素缓冲区的另一个进程中使用相同的键和shmget调用来引用此内存。请注意,您可能应该至少创建两个内存缓冲区,以便一次只有一个进程使用一个缓冲区。也许甚至三个或更多的缓冲区都是最优的。
此外,不要忘记更改static const vo_info_t info结构初始化以将视频输出设备注册为不同的名称。据我所知,可以在config.mak文件中将新的vo_shm.c添加到构建系统中。
祝好运。
发布于 2011-10-05 19:59:26
许多Linux程序都嵌入了一个mplayer播放器(IIRC: gimp-gap,k9copy等等)
我认为最常见的方法是将mplayer中的子窗口直接嵌入到X父窗口中。显然,在X11架构上比在windows上更容易实现这一点:)
man mplayer显示:
mplayer -wid <windowId>
-guiwid <window id>
这将告诉图形用户界面也使用X11窗口,并将自己固定在视频的底部,这对于在浏览器中嵌入迷你图形用户界面非常有用(例如,使用mplayerplug-in )。
-wid <window id>
这将告诉MPlayer使用X11窗口,该窗口对于在浏览器中嵌入MPlayer非常有用(例如,使用plugger扩展)。
您可以(例如,使用Qt应用程序)简单地使用
mplayer -wid mywidget->winId();所以你需要做的就是
https://stackoverflow.com/questions/7659447
复制相似问题