我需要将视频播放器嵌入到我的程序(C++)中,但我无法使用XEmbed,因为我必须执行一些后处理。 是否有可能将输出作为原始RGB写入内存缓冲区,就像使用ffmpeg可以做到的一样?如何使用mplayer播放内存
回答
不幸的是,mplayer无法作为库运行,但如果您愿意对mplayer代码进行一些更改,可能会出现一些黑客解决方案。这应该也适用于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
文件中。
祝你好运。
此外,还需要一个信号量IPC来管理对这些缓冲区的访问+可能是一些共享控制寄存器。我知道,因为我们已经在mplayer的基础上在我们的项目中实现了框架。 – pmod
大量的Linux程序的嵌入的mplayer播放器(IIRC:GIMP间隙,等等k9copy)
我认为,通常的做法是正确的嵌入你的X父窗口内从mplayer的一个子窗口。显然,这是更容易在X11架构实现了比在Windows :)
man mplayer显示:
mplayer -wid <windowId>
-guiwid <window id>
This tells the GUI to also use an X11 window and stick itself to the bottom of the video, which is useful to embed a mini-GUI in a browser (with the mplayerplug-in for instance).
-wid <window id>
This tells MPlayer to use a X11 window, which is useful to embed MPlayer in a browser (with the plugger extension for instance).
你可以(例如使用Qt应用程序),只需使用
mplayer -wid mywidget->winId();
因此,所有你需要的是
- 上mplayer的一个安装相关性
- 人的execve /人的mplayer
- 1. 如何阻止mplayer通过python播放
- 2. 如何使用shell脚本创建MPlayer播放列表?
- 3. mplayer在全屏播放gif动画?
- 4. 用于Web播放链视频(Flash/HTML5广告等同MPlayer的?)
- 5. 从内存播放列表的开放媒体播放器
- 6. 如何使用UITableViewController释放内存
- 7. 如何释放MediaElement使用的内存
- 8. 使用命令行选项在mplayer中播放特定间隔的视频
- 9. 播放媒体(mplayer)的代理服务器,它是如何工作的?
- 10. 获取MPlayer从模式下的当前播放文件
- 11. 如何使用AVAudioPlayer在iPhone/iPad上播放播放列表
- 12. 如何在播放中使用ORDERBY和findAll()播放
- 13. 如何使用YouTube JavaScript API播放播放列表
- 14. 媒体自动播放:如何使用iframe自动播放
- 15. 如何使用Python soco播放Sonos播放列表?
- 16. 如何使用媒体播放器播放和暂停音频?
- 17. 如何让媒体播放器*使用C#播放*?
- 18. 播放服务器内存使用情况
- 19. 在内存中播放html5视频源
- 20. Spark:播放对象时内存不足
- 21. 播放内存中的wav/mp3
- 22. Flash视频播放器内存问题
- 23. iOS从内存流中播放视频
- 24. 如何释放AudioFileReadPacketData使用的内存 - Xcode显示仍在使用的内存
- 25. 如何使用wistia内联播放器进行反应?
- 26. 如何使用simpleaudioengine在指定的时间内播放音频
- 27. 如何使用YouTube iframe API播放VEVO内容?
- 28. 诺基亚Qt:如何从手机内存播放视频?
- 29. 如何在C#中从内存流中播放MP3?
- 30. 如何从内部存储播放mp3文件?
过于广泛.. –
最后,我修改了ffplay(不是mplayer)来写入共享内存。所以我有一个强大的玩家可以渲染共享内存。 (http://ffmpeg.org/ffplay.html) –