我正在GStreamer 1.0上编写一个非常基本的管道,我想了解为什么在显示流之前我需要一个视频转换.
gst-launch-1.0 videotestsrc ! vertigotv ! videoconvert ! autovideosink
如果我从管道中删除视频会话然后我收到一个错误,并且流不播放:
Setting pipeline to PAUSED ... Pipeline is PREROLLING ... ERROR: from element /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0: Internal data flow error. Additional debug info: gstbasesrc.c(2933): gst_base_src_loop (): /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0: streaming task paused, reason not-negotiated (-4) ERROR: pipeline doesn't want to preroll. Setting pipeline to NULL ... Freeing pipeline ...
我不明白为什么无法自动协商上限.
以下是眩晕水槽垫的功能模板:
Capabilities: video/x-raw format: { RGBx, BGRx } width: [ 1, 2147483647 ] height: [ 1, 2147483647 ] framerate: [ 0/1, 2147483647/1 ]
这是autovideosink的src pad的功能模板:
Capabilities: ANY
有人可以解释为什么这个元素是管道的必要条件.为什么我需要在显示管道之前切换颜色空间?有没有办法不使用这个元素(也许使用上限)?
vertigotv
元素只能处理RGBx和BGRx格式的原始视频帧。autovideosink
无法保证支持RGBx / BGRx格式。您需要使用videoconvert
元素来确保vertigotv
的源极和autovideosink
的水槽垫片之间的兼容性。
autovideosink
是一个bin,其中包含实际的视频接收器。autovideosink
的接收器功能由其内部视频接收器的接收器功能决定。
它可以使用几种类型的视频接收器。glimagesink
,例如,可以在没有videoconvert
(因为它可以读取RGBx / BGRx帧)的情况下工作。osxvideosink
另一方面,如果没有,则将无法工作videoconvert
(因为缺少对RGBx / BGRx的支持)。
万一autovideosink
使用支持RGBx / BGRx的视频接收器,videoconvert
元素将仅通过帧而不执行任何工作。因此,您可以放心地将其保留在所有情况下。