Serial port GStreamer/iMX6:通过iMX6和PC之间的串行端口传输h264编码视频

Serial port GStreamer/iMX6:通过iMX6和PC之间的串行端口传输h264编码视频,serial-port,video-streaming,gstreamer,h.264,imx6,Serial Port,Video Streaming,Gstreamer,H.264,Imx6,最近,我开始从事一个项目,该项目的目标是基于imx6处理器的实时视频流应用程序。快速描述我迄今为止所做的工作以及我正在尝试做的工作: 设置:imx6板(Boundary devices Sabre Lite)充当视频服务器(使用GStreamer imx插件),以及一台运行Ubuntu的PC,该PC从imx6接收数据,并使用GStreamer功能播放视频 在imx6处理器上,我运行了“testvideosrc”,并使用imx6和PC之间的eternet接口通过UDP使用RTP成功地将其传输 在L

最近,我开始从事一个项目,该项目的目标是基于imx6处理器的实时视频流应用程序。快速描述我迄今为止所做的工作以及我正在尝试做的工作:

  • 设置:imx6板(Boundary devices Sabre Lite)充当视频服务器(使用GStreamer imx插件),以及一台运行Ubuntu的PC,该PC从imx6接收数据,并使用GStreamer功能播放视频
  • 在imx6处理器上,我运行了“testvideosrc”,并使用imx6和PC之间的eternet接口通过UDP使用RTP成功地将其传输
  • 在Linux中使用设备文件访问串行端口,接下来我尝试将视频数据从imx6板转储到串行端口,并在PC上读取该串行端口。为此,两个设备的波特率都配置为115200波特。编码“比特率”配置为5Kbps。以下是命令:
  • IMX6:

    个人电脑:

    imx6板上未观察到任何错误。 但是,我在PC端看到以下错误:

    # GST_DEBUG=3 gst-launch-1.0 -v filesrc location=/dev/ttyUSB1 ! $CAPS ! h264parse ! avdec_h264 ! autovideosink sync=true 
      Setting pipeline to PAUSED … 
      0:00:00.066439392 15475 0x556d8a01d160 WARN basesrc gstbasesrc.c:3583:gst_base_src_start_complete: pad not activated yet 
      Pipeline is PREROLLING … 
      0:00:21.730466251 15475 0x556d8a000940 WARN capsfilter 
      gstcapsfilter.c:455:gst_capsfilter_prepare_buf: error: Filter caps do not completely specify the output format 
      0:00:21.730523691 15475 0x556d8a000940 WARN capsfilter gstcapsfilter.c:455:gst_capsfilter_prepare_buf: error: Output caps are unfixed: video/x-h264, width=(int)[ 1, 8192 ], height=(int)[ 1, 8192 ], framerate=(fraction)[ 0/1, 2147483647/1 ] 
      0:00:21.730676173 15475 0x556d8a000940 WARN basetransform gstbasetransform.c:2159:default_generate_output: could not get buffer from pool: error 
      0:00:21.730742223 15475 0x556d8a000940 WARN basesrc gstbasesrc.c:3055:gst_base_src_loop: error: Internal data stream error. 
      0:00:21.730775478 15475 0x556d8a000940 WARN basesrc gstbasesrc.c:3055:gst_base_src_loop: error: streaming stopped, reason error (-5) 
      ERROR: from element /GstPipeline:pipeline0/GstCapsFilter:capsfilter0: Filter caps do not completely specify the output format 
      Additional debug info: 
      gstcapsfilter.c(455): gst_capsfilter_prepare_buf (): /GstPipeline:pipeline0/GstCapsFilter:capsfilter0: 
      Output caps are unfixed: video/x-h264, width=(int)[ 1, 8192 ], height=(int)[ 1, 8192 ], framerate=(fraction)[ 0/1, 2147483647/1 ] 
      ERROR: pipeline doesn’t want to preroll. 
      Setting pipeline to NULL … 
      Freeing pipeline … 
    
  • 由于编码速率为5Kbps(比特率=5,如上述命令中所指定),因此我认为可以通过串行端口发送此数量的数据。我意识到,目前,caps谈判失败,但我不确定如何继续

  • 在PC端,使用“cat/dev/ttyUSB1”读取串行端口成功,数据有限。数据无法读取(如预期),但它不是连续流

  • 有没有人有办法解决这个问题。我还认为,当我试图使用GStreamer读取串行数据文件时,我误解了Linux设备文件的用法


    我稍后的测试是使用一个实际的摄像头(MIPI),并尝试通过串行端口传输它。这似乎是可行的,还是一个完全疯狂的想法?

    通过以下命令,我可以在波特率为19200的串行设备上工作。但是,延迟在5-6秒的范围内非常高。波特率为1M时,它的工作延迟小于1s

    imx6:

    个人电脑:


    上述问题通过以下方式解决:
    CAPS=video/x-h264,宽度=100,高度=50,帧速率=30/1
    但是,在PC端,GStreamer不显示任何视频。我本来希望看到一个弹出窗口并显示videotestsrc模式,但事实并非如此。我尝试了不同的比特率(1,5,10,50),结果是相同的。有没有人对我如何进行这项工作有更多的建议。
    #CAPS=video/x-h264 
    #gst-launch-1.0 -v filesrc location=/dev/ttyUSB1 ! $CAPS ! h264parse ! avdec_h264 ! autovideosink sync=true 
    
    # GST_DEBUG=3 gst-launch-1.0 -v filesrc location=/dev/ttyUSB1 ! $CAPS ! h264parse ! avdec_h264 ! autovideosink sync=true 
      Setting pipeline to PAUSED … 
      0:00:00.066439392 15475 0x556d8a01d160 WARN basesrc gstbasesrc.c:3583:gst_base_src_start_complete: pad not activated yet 
      Pipeline is PREROLLING … 
      0:00:21.730466251 15475 0x556d8a000940 WARN capsfilter 
      gstcapsfilter.c:455:gst_capsfilter_prepare_buf: error: Filter caps do not completely specify the output format 
      0:00:21.730523691 15475 0x556d8a000940 WARN capsfilter gstcapsfilter.c:455:gst_capsfilter_prepare_buf: error: Output caps are unfixed: video/x-h264, width=(int)[ 1, 8192 ], height=(int)[ 1, 8192 ], framerate=(fraction)[ 0/1, 2147483647/1 ] 
      0:00:21.730676173 15475 0x556d8a000940 WARN basetransform gstbasetransform.c:2159:default_generate_output: could not get buffer from pool: error 
      0:00:21.730742223 15475 0x556d8a000940 WARN basesrc gstbasesrc.c:3055:gst_base_src_loop: error: Internal data stream error. 
      0:00:21.730775478 15475 0x556d8a000940 WARN basesrc gstbasesrc.c:3055:gst_base_src_loop: error: streaming stopped, reason error (-5) 
      ERROR: from element /GstPipeline:pipeline0/GstCapsFilter:capsfilter0: Filter caps do not completely specify the output format 
      Additional debug info: 
      gstcapsfilter.c(455): gst_capsfilter_prepare_buf (): /GstPipeline:pipeline0/GstCapsFilter:capsfilter0: 
      Output caps are unfixed: video/x-h264, width=(int)[ 1, 8192 ], height=(int)[ 1, 8192 ], framerate=(fraction)[ 0/1, 2147483647/1 ] 
      ERROR: pipeline doesn’t want to preroll. 
      Setting pipeline to NULL … 
      Freeing pipeline … 
    
    gst-launch-1.0 -v videotestsrc pattern=18 ! video/x-raw,width=100,height=50
    ! imxvpuenc_h264 bitrate=5 ! h264parse ! filesink location=/dev/ttyUSB0
    blocksize=1024 max-bitrate=19000 sync=false
    
    gst-launch-1.0 -v filesrc location=/dev/ttyUSB1 blocksize=1024 ! $CAPS !
    h264parse ! avdec_h264 lowres=2 skip-frame=0 ! autovideosink sync=false