Raspberry Pi 平台最合适的 GStreamer VideoSink

受到 Wayland 的影响,想当然的认为 waylandsink 应该是不错的 Videosink,事实并非如此呀,或许我真是个笨蛋,使用仅支持 BGRA 的 waylandsink 输出 I420 格式视频,CS 转换是 Rpi 所承受不了的。

更好的选择应该是 eglglessink,目前官方的源代码中就已经包含了对 Rpi 窗口系统的支持,编译启用后测试下地效果是很好的。看上去它是使用 Overlay 实现,默认使用当前的 dispmanx display,在 Wayland 桌面上运行看不到任何输出,要到 FrameBuffer 上运行可见到全屏的视频图像输出。不知道它是否支持设置 Window handle,晚上再写个程序测试一下吧。

Over!

GStreamer OpenMAX plugins

GStremaer OpenMAX plugins 在 Raspberry Pi 上跑起来了,中间遇到了一点小情况,解决后运行效果果然不是很理想。

GstOMX
GStreamer OpenMAX 是将 OpenMAX 的 Components 与 GStreamer 的 Elements 映射起来的插件,插件设计的还相对灵活,可通过配置文件调整许多参数。
源码包:gst-omx-1.0.0-1.src.tar.gz

小情况
videoconvert 运行就出现了段错误,调试后发现了它所使用的 orc 在 ARM 平台上存在 Bug,升级后即可正常工作。为什么要使用 videoconvert?见下文
源码包:orc-0.4.17-1.src.tar.gz

大杯具
omxh264dec 解码后的输出 Frames 格式为 I420 (YUV420),而 waylandsink 的输入 Frames 格式要求为 BGRA (XRGB8888),而且只支持这一种。这就需求做一次 videoconvert了。

videoconvert (I420 – BGRA)太占用 CPU 了,对于 Raspberry Pi 的 700MHz 的 CPU 来说,压力山大呀!

最后,还得想办法使用 OpenMAX 的 video_render component。

Over!