首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GStreamer/ iMX6 :通过h264和PC之间的串口传输iMX6编码的视频

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

Stack Overflow用户
提问于 2018-06-25 13:36:14
回答 1查看 1.4K关注 0票数 0

最近,我开始从事一个针对基于imx6处理器的实时视频流应用程序的项目。简要描述一下我到目前为止所做的事情和我想要做的事情:

  1. 安装程序: imx6板(边界设备Sabre )充当视频服务器(使用GStreamer imx ),并在其上运行Ubuntu的PC机接收来自imx6的数据并使用GStreamer功能进行视频流。
  2. 在imx6处理器上,我运行了'testvideosrc‘,并使用imx6和PC之间的eternet接口使用RTP通过UDP成功地对其进行了流处理。
  3. 使用Linux中的设备文件访问串口,接下来我尝试将视频数据从imx6板转储到串口,并在PC上读取这个串口。为此,这两个设备的波特率被配置为115200波特。编码‘比特率’被配置为5Kbps。以下是命令:

IMX6:

代码语言:javascript
复制
#gst-launch-1.0 -v videotestsrc pattern=18 ! video/x- raw,width=100,height=50 ! imxvpuenc_h264 bitrate=5 ! h264parse ! filesink location=/dev/ttyUSB1 

个人电脑:

代码语言:javascript
复制
#CAPS=video/x-h264 
#gst-launch-1.0 -v filesrc location=/dev/ttyUSB1 ! $CAPS ! h264parse ! avdec_h264 ! autovideosink sync=true 

在imx6板上没有观察到错误。然而,我在PC端看到了以下错误:

代码语言:javascript
复制
# 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 … 
  1. 由于编码速率为5 5Kbps (如上面的命令所指定的bitrate=5),我认为可以通过串口发送此数量的数据。我认识到,目前的上限谈判失败了,但是,我不知道如何进行。
  2. 在PC端,使用'cat /dev/ttyUSB1 1‘读取串行端口的操作在数据有限的情况下成功。数据是不可读的(正如预期的那样),但是它不是一个连续的流。

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

我后来的测试,将是使用一个实际的相机(MIPI),并尝试通过串行口流它。这似乎是可行的,还是一个完全疯狂的想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-04 12:21:47

有了下面的命令,我就可以使它在19200波特的串口上工作。然而,在5-6秒的范围内,延迟非常高.波特率为1M时,它的工作时间不太明显,延迟小于1s。

imx6:

代码语言:javascript
复制
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

个人电脑:

代码语言:javascript
复制
gst-launch-1.0 -v filesrc location=/dev/ttyUSB1 blocksize=1024 ! $CAPS !
h264parse ! avdec_h264 lowres=2 skip-frame=0 ! autovideosink sync=false 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51024824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档