我有一块带有飞思卡尔 i.MX.6 处理器的电路板。H264 视频有硬件加速。还有可以与硬件加速器配合的gstreamer。
我需要编写一个能够播放全高清视频的应用程序。作为一名玩家,我选择 VLC 是因为它的选项和以编程方式处理它的可靠方式(libvlc 和 libvlc-qt 库)。
VLC 无法与硬件加速器配合,因此有没有办法使用 gstreamer(使用加速器)播放视频并将输出视频发送到 VLC?
谢谢你的时间。马丁。
我有一块带有飞思卡尔 i.MX.6 处理器的电路板。H264 视频有硬件加速。还有可以与硬件加速器配合的gstreamer。
我需要编写一个能够播放全高清视频的应用程序。作为一名玩家,我选择 VLC 是因为它的选项和以编程方式处理它的可靠方式(libvlc 和 libvlc-qt 库)。
VLC 无法与硬件加速器配合,因此有没有办法使用 gstreamer(使用加速器)播放视频并将输出视频发送到 VLC?
谢谢你的时间。马丁。
飞思卡尔 VPU 当然可以与 GStreamer 一起使用。飞思卡尔开发了 GStreamer 0.10 插件。我正在为 1.0 编写一些内容。
您想使用 GStreamer 解码并将解码后的帧传输到 VLC 以显示它们。您可以为此使用 RTP。但是您打算做的事情不适用于全高清视频,因为它涉及至少一次隐式复制帧。
VPU 解码为 DMA 缓冲区(= 物理上连续的内存区域,分配有特殊的分配功能)。这个缓冲区可以在不复制的情况下传递给 libvlc,但即便如此,您也需要在 VLC 中添加一些内容来显示帧,而不必(隐式)复制它们。如果没有此 VLC 扩展,您将无法观看 FullHD。
复制与没有复制有很大的不同。使用复制,您会看到 720p 的 CPU 使用率 >80%,并且 1080p 将无法流畅显示。没有副本,CPU 使用率微不足道 (< 10%)。i.MX6 能够通过 DMA 直接从物理上连续的缓冲区显示帧,而无需将像素推入 CPU。这就是你需要的。有三种方法可以做到这一点: 飞思卡尔修改的 V4L2 输出;使用 i.MX IPU 直接显示到 Linux 帧缓冲区;并使用 OpenGL ES 2 和 Vivante 直接纹理扩展进行显示。第三个是最好的选择。
但老实说,我要么尝试将 VPU 解码和 GLES 直接纹理输出都放入 VLC,要么同时使用 GStreamer。在同一个应用程序中使用 VLC 和 GStreamer 听起来像是一种挫败感。(我假设你想要一个包含 VLC 和 GStreamer 的进程;两个进程要开始工作会相当棘手。)