This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM5728:AM5728 GStreamer Ducatih264dec0无法与 Matroska Muxer 链接

Guru**** 2562050 points
Other Parts Discussed in Thread: AM5728

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/734246/linux-am5728-am5728-gstreamer-ducatih264dec0-cannot-link-with-matroska-muxer

器件型号:AM5728

工具/软件:Linux

我在 AM5728 EVM 上使用最新的 TI AM5728处理器 SDK (05.00.00.15)。

我有2个 USB Web 摄像头连接到 SDK、并且可以为每个网页成功地同时运行 GST 启动过程、如下所示:

gst_debug=3 gst-launch-1.0 v4l2src device=/dev/video1! 'video/x-raw、format=(string) YUY2、width=(int) 640、height=(int) 480、framerate=30/1'! 视频转换! 'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480'! ducatih264enc! h264parse! ducatih264dec! landsink sync-false

gst_debug=1 gs-launch-1.0 -e -v v4l2src device=/dev/video2 io-mode=4! 'video/x-raw、format=(string) UYVY、width=(int) 160、height=(int) 120'! 视频转换! 'video/x-raw、format=(string) NV12、width=(int) 160、height=(int) 120'! ducatih264enc! h264parse! ducatih264dec! landwaysink 同步=错误 

现在、我要将两个流多路复用到 matroska 文件中、如下所示。 但是、它失败、出现错误"WARNING:ERRORING F管线:Could not link ducatih264dec0 to mux"

GST-LAUNCH-1.0 -v -e \
v4l2src device=/dev/video2 IO-mode=4\!
'video/x-raw、format=(string) UYVY、width=(int) 160、height=(int) 120'\
! 视频转换\!
'video/x-raw、format=(string) NV12、width=(int) 160、height=(int) 120'\
! ducatih264enc\!
多路复用。 \
v4l2src 设备=/dev/video1 \
!! 队列最大大小缓冲区=0最大大小时间=0最大大小字节=0 \
!! 'video/x-raw、format=(string) YUY2、width=(int) 640、height=(int) 480、framerate=30/1'\
! 视频转换\!
'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480'\
! ducatih264enc\
!! 多路复用。 \
matroskamux name=mux Min-index-interval=1000000000 \
!! 队列最大大小缓冲区=0最大大小时间=0最大大小字节=0 \
!! 文件链接位置= test-phil-class.mkv 

我该怎么做? 谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    其工作原理为:

    GST-LAUNCH-1.0 -v -e \
    v4l2src device=/dev/video2 IO-mode=4\!
    'video/x-raw、format=(string) UYVY、width=(int) 160、height=(int) 120'\
    ! 视频转换\!
    'video/x-raw、format=(string) NV12、width=(int) 160、height=(int) 120'\
    ! ducatih264enc\!
    队列\
    !! "VIDEO/x-h264、宽=160、高=120"\
    ! h264parse \!
    多路复用。 \
    v4l2src 设备=/dev/video1 \
    !! 队列最大大小缓冲区=0最大大小时间=0最大大小字节=0 \
    !! 'video/x-raw、format=(string) YUY2、width=(int) 640、height=(int) 480、framerate=30/1'\
    ! 视频转换\!
    'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480'\
    ! ducatih264enc\!
    队列\
    !! "VIDEO/x-h264、宽=640、高=480"\
    ! h264parse \
    !! 多路复用。 \
    matroskamux name=mux Min-index-interval=1000000000 streamable=true \
    !! 队列最大大小缓冲区=0最大大小时间=0最大大小字节=0 \
    !! 文件链接位置= test-video.mkv 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Phil、您好、

    感谢您分享该解决方案、请验证您的答案、以便结束该主题。

    此外、我建议您对流水线进行一些更改、例如:

    1.您可以将视频转换替换为管道的以下部分中的 VPE 元素:

    v4l2src 设备=/dev/video1 \

        !! 队列最大大小缓冲区=0最大大小时间=0最大大小字节=0 \

        !! 'video/x-raw、format=(string) YUY2、width=(int) 640、height=(int) 480、framerate=30/1'

      !! 视频转换\

      !! 'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480'\

    Gts铰 刀 VPE 元件在其输入端接受 YUY2、NV12和 YUV 格式。 通过这种方式、CPU 负载将降低。

    2. h264解析两个分支中的 add queue 元素后。

    BR
    玛格丽塔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Margarita、

    感谢您的建议。 我尝试过它们、似乎出现格式错误-请参阅以下内容:

    GST-LAUNCH-1.0 -v -e \
    v4l2src device=/dev/video2 IO-mode=4\!
    'video/x-raw、format=(string) UYVY、width=(int) 160、height=(int) 120'\
    ! VPE \!
    'video/x-raw、format=(string) NV12、width=(int) 160、height=(int) 120'\
    ! ducatih264enc\!
    队列\
    !! "VIDEO/x-h264、宽=160、高=120"\
    ! h264parse \!
    队列\!
    多路复用。 \
    v4l2src 设备=/dev/video1 \
    !! 队列最大大小缓冲区=0最大大小时间=0最大大小字节=0 \
    !! 'video/x-raw、format=(string) YUY2、width=(int) 640、height=(int) 480、framerate=30/1'\
    ! VPE \!
    'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480'\
    ! ducatih264enc\!
    队列\
    !! "VIDEO/x-h264、宽=640、高=480"\
    ! h264parse \!
    队列\
    !! 多路复用。 \
    matroskamux name=mux Min-index-interval=1000000000 streamable=true \
    !! 队列最大大小缓冲区=0最大大小时间=0最大大小字节=0 \
    !! 文件链接位置= test-phil-class.mkv 

    错误:

    警告:错误管道:无法将 v4l2src0链接到 vpe0、vpe0无法处理 cap video/x-raw、format=(string) UYVY、width=(int) 160、height=(int) 120
    

    然后、我尝试更改了视频2的格式:

    GST-LAUNCH-1.0 -v -e \
    v4l2src device=/dev/video2 IO-mode=4\!
    'video/x-raw、format=(string) YUY2、width=(int) 160、height=(int) 120'\
    ! VPE \!
    'video/x-raw、format=(string) NV12、width=(int) 160、height=(int) 120'\
    ! ducatih264enc\!
    队列\
    !! "VIDEO/x-h264、宽=160、高=120"\
    ! h264parse \!
    队列\!
    多路复用。 \
    v4l2src 设备=/dev/video1 \
    !! 队列最大大小缓冲区=0最大大小时间=0最大大小字节=0 \
    !! 'video/x-raw、format=(string) YUY2、width=(int) 640、height=(int) 480、framerate=30/1'\
    ! VPE \!
    'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480'\
    ! ducatih264enc\!
    队列\
    !! "VIDEO/x-h264、宽=640、高=480"\
    ! h264parse \!
    队列\
    !! 多路复用。 \
    matroskamux name=mux Min-index-interval=1000000000 streamable=true \
    !! 队列最大大小缓冲区=0最大大小时间=0最大大小字节=0 \
    !! 文件链接位置= test-phil-class.mkv 

    错误:

    正在将管道设置为暂停...
    管道处于活动状态,不需要 PREROLL...
    正在将管道设置为正在播放...
    新时钟:GstSystemClock
    错误:来自元素/GstPipeline0/GstV4l2Src:v4l2src0:内部数据流错误。
    其他调试信息:
    ./../../../gstreamer-1.12.2/libs/gst/base/gstbasesrc.c (2939):GST_BASE_SRC_LOOP ():/GstPipeline:流水线0/GstV4l2Src:v4l2src0:
    流媒体停止、原因未协商(-4)
    EOS 开启关闭-等待 EOS 错误后
    等待 EOS ...
    /GstPipeline0/GstV4l2Src:v4l2src1.GstPad:src:cap = video/x-raw、format=(string) yuY2、width=(int) 640、height=(int) 480、framerate=(fraction) 30/1、 Pixer-Aspi-Rati=(Fraction) 1/1、Interlace-mode=(string) progressive、colorimetry =(string) 2:4:7:1
    /GstPipeline0/GstQueue:queue2.GstPad:sink:cap = video /x-raw、format=(string) yuY2、width=(int) 640、height=(frame/frate) 480、height= 1) Pixer-Aspi-Rati=(Fraction) 1/1、Interlace-mode=(string) progressive、colorimetry =(string) 2:4:7:1
    /GstPipeline0/GstQueue:queue2.GstPad:sink:cap = video /x-raw、format=(string) yuY2、width=(int) 640、height=(frame/frate) 480、height= 1) Pixer-Aspi-Rati=(Fraction) 1/1、Interlace-mode=(string) progressive、Colorimetry =(string) 2:4:7:1
    /GstPipeline:lifine0/GstVpe:vpe1.GstPad:src:cap = VIDEO/x-raw、format=(string) NV12、width=(interlace) 640、interlace (int)、int-mode = 480、int-lace (interlace)、int-raint=480、int-mode Pixer-Aspire-Rati=(Frame)1/1、framerate=(fraction) 30/1
    /GstPipeline:lifine0/GstCapsFilter:capsfilter4.GstPad:src:cap = VIDEO/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480、inter-mode-=逐行、conter-mode=(string)、conprogressive)字符串 Pixel-Aspi-Aspi-Rati=(fraction) 1/1、framerati=(fraction) 30/1
    /GstPipeline:流水线0/GstDutatiH264Enc:ducatih264enc1.GstPad:src:cap = VIDEO/x-h264、alignment=(string) au、streame-format=(string) byte-stream、height =(int) 480、宽度=(int) 480、int (int) Pixer-Aspi-Rati=(fraction) 1/1、framerati=(fraction) 30/1、interlace-mode=(string) progressive、colorimetry =(string) bt601、chroma-sit=(string) jpeg
    /GstPipeline0/GstQueue:queue3.GstPad:link:cap = video /xeure-sites=(string)、the-throphe=(string)、the-fegrobegh= 640、t (begreh= 640、字符串宽度=)、字符串对齐、字符串宽度= 640、 Pixer-Aspi-Rati=(fraction) 1/1、framerati=(fraction) 30/1、interlace-mode=(string) progressive、colorimetry =(string) bt601、chroma-sit=(string) jpeg
    /GstPipeline0/GstQueue:queue3.GstPad:src:cap = video / x)begrophe=(true= 640、th-stream=(tram=(string)、t) traming=(t)、trame-qualignment (t)、t = 640、t (trame-que=)、t (in Pixer-Aspi-Rati=(fraction) 1/1、framerati=(fraction) 30/1、interlace-mode=(string) progressive、colorimetry =(string) bt601、chroma-site=(string) jpeg
    /GstPipeline0/GstCapsFilter:capsfilter5.GstPad:src:x=480、threame=(string)、threame-from-cap (string)、x=(trlfrom-cap)、tramine-cap (in)、x=(tramine-cap (tramine-cap)、x=64 Pixer-Aspi-Rati=(fraction) 1/1、framerati=(fraction) 30/1、interlace-mode=(string) progressive、colorimetry =(string) bt601、chroma-site=(string) jpeg
    /GstPipeline0/GstH264Parse:h264parse1.GstPad:h640、stream=(begth-fink)、trace=(byte-from-cap)、x=(begrobegth-cap)、tranthe-cap (tranthe-cap (begin) x、tranthe-cap (tr Pixer-Aspi-Rati=(fraction) 1/1、framerati=(fraction) 30/1、interlace-mode=(string) progressive、colorimetry =(string) bt601、chroma-site=(string) jpeg
    /GstPipeline0/GstCapsFilter:capsfilter5.GstPad:640、cheft =(string) x=160、threame-from-from-from-from-cap (string)、(string)、tram-from-transce=(string)、trane+(begreame+、trane=(tr Pixel-Aspi-Rati=(fraction) 1/1、framerati=(fraction) 30/1、interlace-mode=(string) progressive、colorimetry =(string) bt601、chroma-site=(string) jpeg
    /GstPipeline0/GstDucatiH264Encc:ducatih264ence.1t、cace=(transceperthe-cap)、traneperth=(traction)、transceperthe-cap (traneintx) x=(traneperthe-cap (traneintx)、transcex (rand Pixer-Aspire-Rati=(Frame)1/1、framerate=(frame)30/1
    /GstPipeline0/GstCapsFilter:capsfilter4.GstPad:SINK:cap = VIDEO/x-RAW、format=(string) NV12、width=(int) 640、height=(int) 480、inter-mode-=渐进、字符串 像素宽高比=(小数) 1/1、帧速率=(小数) 30/1
    /GstPipeline:流水线0/GstVpe:vpe1.GstPad:灌电流:电容=视频/x-raw、format=(string) YUY2、width=(int) 640、height=(int) 480、帧速率=(frame=1) 30、frame/framex、YU1 Pixer-Aspi-Rati=(Fraction) 1/1、Interlace-mode=(string) progressive、colorimetry =(string) 2:4:7:1
    /GstPipeline0/GstCapsFilter:capsfilter3.GstPad:sink:cap = video /x-raw、format=(string) yu640、width=(framex) yu640、frate (framex)、frature=(framex) yu640、width=(frature= 1) yu640、frature=30 ( Pixer-Aspi-Rati=(Fraction) 1/1、Interlace-mode=(string) progressive、Colorimetry =(string) 2:4:7:1
    /GstPipeline:lifine0/GstVpe:vpe1.GstPad:src:cap = VIDEO/x-raw、format=(string) NV12、width=(interlace) 640、interlace (int)、int-mode = 480、int-lace (interlace)、int-raint=480、int-mode Pixer-Aspire-Rati=(Frame)1/1、framerate=(frame)30/1
    /GstPipeline0/GstCapsFilter:capsfilter4.GstPad:SINK:cap = VIDEO/x-RAW、format=(string) NV12、width=(int) 640、height=(int) 480、inter-mode-=渐进、字符串 像素宽高比=(小数) 1/1、帧率=(小数) 30/1
    
    **(GST-LAUNCH-1.0:1455):严重**:GST_FD_MEMORY_GED:
    
    
    
    
    
    
    
    
    错误"GST_IS IS _FD_LOLOLOADator (MEM->LALOLOADator)**(GST_GST_LAUNCH_GST_GST_FD_MEMORY):"GST_FD-1.0_LAUNCH_GST_GE_GE_GST_LAUNCHERR (GST_GST_GST_GST_GST_GST_LAUNCH_G_FD-1.0_GE_GST_GE_GST_GE_G_FD-1.0_LAUNCH):"GST_GST_GST_GST_GST_LAUNCHERR:"g_GST_G_FD-1.0_GST_GE_G_FD_GE_LAUNCH_GE_GE_GE_GE_GE_G_FLAUNCHERR (GST_G_FD-1.0"(GST_GST_G 从元素/GstPipeline:流水 线0/GstV4l2Src:v4l2src1:内部数据流错误。
    其他调试信息:
    ./../../../gstreamer-1.12.2/libs/gst/base/gstbasesrc.c (2939):gst_base_src_loop ():/GstPipeline:lipine0/GstV4l2Src:v4l2src1:
    流媒体停止、原因错误(-5)
    错误:来自元素/GstPipeline0/GstQueue:queue2:内部数据流错误。
    其他调试信息:
    ./../../gstreamer-1.12.2/plugins/elements/gstqueue.c (990):GST_Queue_handle_sink_event ():/GstPipeline0/GstQueue:queue2:
    流式传输停止、原因错误(-5) 

    您对如何使其正常工作有什么建议吗? 感谢你的帮助。



  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    VPE 将不适用于具有 UYVY 至 nv12 CSC 的第一个视频分支。 请参考我之前的答案了解原因。
    这是您的工作流水线、具有您可以尝试的更改:


    GST-LAUNCH-1.0 -v -e \
    v4l2src device=/dev/video2 IO-mode=4 \
    !! 'video/x-raw、format=(string) UYVY、width=(int) 160、height=(int) 120'\
    !! 视频转换\
    !! 'video/x-raw、format=(string) NV12、width=(int) 160、height=(int) 120'\
    !! ducatih264enc\
    !! 队列\
    !! "VIDEO/x-h264、宽= 160、高= 120 "\
    !! h264parse! 队列\
    !! 多路复用。 \
    v4l2src 设备=/dev/video1 \
    !! 队列最大大小缓冲区=0最大大小时间=0最大大小字节=0 \
    !! 'video/x-raw、format=(string) YUY2、width=(int) 640、height=(int) 480、framerate=30/1'
    !! VPE num-input-buffers=8 \
    !! 'video/x-raw、format=(string) NV12、width=(int) 640、height=(int) 480'\
    !! ducatih264enc\
    !! 队列\
    !! "VIDEO/x-h264、宽=640、高=480"\
    !! h264parse! 队列\
    !! 多路复用。 \
    matroskamux name=mux Min-index-interval=1000000000 streamable=true \
    !! 队列最大大小缓冲区=0最大大小时间=0最大大小字节=0 \
    !! 文件链接位置= test-video.mkv

    BR
    玛格丽塔
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Phil、您好、

    感谢您验证该线程。
    如果您有新的问题、请打开新的 e2e 线程、让我们知道。

    BR
    玛格丽塔