Gstreamer中的sink插件及区别

在Gstreamer中,通常“sink”插件可以将获取的视频流输出到显示器。

参考网站:http://trac.gateworks.com/wiki/Yocto/gstreamer/video#tearing

 以下是iMX.6平台的输出sink列表:

  • gstreamer-imx specific sinks

    • imxg2dvideosink

    • imxipuvideosink

    • imxpxpvideosink

    • imxeglvivsink

  • Other GStreamer sinks

    • autovideosink

    • fbdevsink

    • fdsink

    • ximagesink/xvimagesink

    • fakesink

    • v4l2sink

如果需要更多,可以用 gst-inspect-1.0 | grep sink 命令查询。

imxg2dvideosink

这个视频接收器非常通用,可以输出任何大小的图像。它还可以转换图像(改变大小、旋转等),将图像放置在指定的位置,并可以接受以下视频格式:rgbx、bgrx、rgba、bgra、rgb16、nv12、nv21、i420、yv12、yuy2、uyvy。

对于绘制到显示器,这是我们推荐的gstreamer视频接收器。

imxg2dvideolink还支持垂直同步,以消除屏幕撕裂(screen tearing)。要启用此设置,将use-vsync属性设置为true。

屏幕撕裂:当视频输出与显示器的刷新率不同步时,会发生屏幕撕裂。将输出同步到刷新率的过程也称为“垂直同步”。

imxipuvideosink

这个视频接收器在输出尺寸上并没有那么通用。在许多情况下,它会拒绝一种格式并退出。但是,与imxg2dvideolink相比,它的一个优点是它包括一个去隔行器,可以接收更多的视频格式:rgb16、bgr、rgb、bgrx、bgr a、rgbx、rgba、abgr、uvy、v308、nv12、yv12、i420、y42b、y444。

只有在需要一个格式转换器来消除隔行扫描视频效果的影响时,或者,只有此视频接收器才能提供的某种视频格式时,才建议使用此插件。

设置插件属性 deinterlace=true 打开格式转换器。

imxpxpvideosink

此接收器仅在i.mx6solo和i.mx6dl处理器上可用。它可以做到与上述相同(减去有一个内置的逐行扫描),并支持以下视频格式:bgrx、rgb16、i420、yv12、y42b、nv12、yuy2、uyvy、yvyu。

如果资源有限,并且你需要将一些处理卸载到PXP引擎,则建议使用此插件。

可以设置属性 use-vsync=true,来避免屏幕撕裂。

imxeglvivsink

当您有x11显示器时,此接收器非常有用,并使用 Vivante direct textures 输出到主显示器。与imxipuvideosink一样,它具有灵活的输出视频格式列表:i420、yv12、nv12、nv21、uvy、rgb16、rgba、bgr a、rgbx、bgrx、bgr、argb、abgr、xrgb、xbgr。

当运行将输出到带有x11/wayland的显示器的管道时,建议使用此插件。要使用双缓冲(以消除撕裂),将FB_MULTI_BUFFER env变量设置为2。

autovideosink

在传统意义上,这个gstreamer接收器并不是真正的“视频”接收器。类似于Playbin和DecodeBin,这个插件会自动选择它认为最好的可用视频接收器(video sink)并使用这个sink。通常选择使用imxg2dvideolink,除非格式选择需要其他sink。通常不建议使用此插件,因为这个sink不能让开发者真正理解所用的管道(pipeline)。

fbdevsink

这个sink允许视频流直接输出到framebuffer上。

fdsink

这个sink允许你写入打开的文件描述符。

ximagexsink/xvimagesink

这些接收器使用标准的 Xlib API 调用输出到x11显示。xvimagesink用于xfree86视频输出。

fakesink 

这是一个非常有用的视频接收器。这个sink需要给它任何帧,然后将它们丢弃。如果出现问题 ( It takes whatever frames is given to it and drops them),对管道的调试会有帮助。

关于上句的英文,在其他文档看到一个很好的解释帮助理解:fakesink是一个数据只进不出的“黑洞”。例如,一个视频文件一般包括视频流和音频流。如果设备只能播放音频(例如音箱),那么视频流对于设备来说,就是没有意义的东西。这时可以用fakesink插件将之吃掉。否则,由于GStreamer会在视频流和音频流之间进行同步,如果视频流没有被消耗,音频流也无法向前进。

gst-launch-1.0 videotestsrc pattern=0 ! fakesink

v4l2sink

在video4linux2设备上显示时,此接收器(video sink)非常有用。通常不用于基于IMX6的产品,除非所有其他水槽都出现故障。

补充一下 ximagesink 与 xvimagesink 和v4l2sink的区别

1.  v4lsink, v4l2sink:video for linux的输出

2.  ximagesink:使用XWindow输出,基本都支持

3.  xvimagesink:使用XVideo extension输出,在ubuntu下要装一大堆库才支持

xvimagesink和v4lsink以及v4l2sink对视频输出的colorbalance做了处理,实现了Color Balance的接口,因此在利用上述视频输出插件时不需要做colorspace和videoscale的操作。

gst-launch filesrc location=xxx ! mpegdemux name=dmx dmx.video_00 ! queue ! mpeg2dec ! xvimagesink

反之,ximagesink必须要进行colorspace和videoscale的操作,才能正常输出。

gst-launch filesrc location=xxx ! mpegdemux name=dmx dmx.video_00 ! queue ! mpeg2dec ! ffmpegcolorspace ! videoscale ! ximagesink
发布了9 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sssuperqiqi/article/details/100145641