我正在尝试使用Gstreamer设置UDP流,该流旨在将H264短暂地转换为原始视频,使用延迟时钟项目中的库对时间戳进行编码,并在显示为视频之前重新编码为H264。接收监视器。管道的发送端和接收端可以通信,但没有显示OpenGL视频。使这个问题复杂化的是,延迟时钟(timestampoverlay)中使用的库需要RGB原始输入提要进行编码,因此我必须从原始RGB开始或在管道中的某个位置转换为原始RGB。
我尝试使用与传输器相同的解码方法来更改流水线并测试本地自动视频接收器,并且视频确实以我想要的方式编码的时间戳显示在那里,我尝试更改具有队列的管道,并添加视频转换思维,这可能是问题所在,但我仍然得到相同的结果。由于我最初认为是Raspberry Pi上的速度下降问题,所以我没有尝试从原始视频开始,以后再去H264,但这是我仍然可以尝试的方法。
我的服务渠道:
gst-launch-1.0 -v -e rpicamsrc bitrate=50000 ! 'video/x-h264,framerate=10/1,width=560,height=420' ! h264parse ! avdec_h264 ! videoconvert ! video/x-raw, format=\(string\)RGB ! timestampoverlay ! videoconvert ! x264enc tune=zerolatency ! 'video/x-h264' ! rtph264pay config-interval=1 pt=96 ! gdppay ! udpsink host=192.168.168.149 port=5000
我的接收管道:
gst-launch-1.0 -v -e udpsrc port=5000 ! gdpdepay ! rtph264depay ! h264parse ! queue ! avdec_h264 ! videoconvert ! autovideosink sync=false
据我所知,管道根本没有产生任何错误消息,这非常令人沮丧。
我在接收器端得到的:
将管道设置为PAUSED ...管道处于活动状态,不需要 PREROLL ...将管道设置为PLAYING ...新时钟:GstSystemClock /GstPipeline:pipeline0/GstGDPDepay:gdpdepay0.GstPad:src:caps = “ application / x-rtp \,\ media \ =(string)video \,\ 时钟速率\ =(整数)90000 \,\编码名称\ =(字符串)H264 \,\ 打包模式\ =(字符串)1 \,\ profile-level-id \ =(字符串)f40016 \,\ sprop-parameter-sets \ =(字符串)\“ Z / QAFpGWQCMN / jcBagwCCoAAAAMAgAAACkeLFyQ \\ = \\,aOvMRIRA \” \,\ 有效负载\ =(int)96 \,\ ssrc \ =(uint)2608932143 \,\ timestamp-offset \ =(uint)2718199440 \,\ seqnum-offset \ =(uint)12403 \,\ a-framerate \ =(string)10“ /GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0.GstPad:src:caps =“视频/ x-h264 \,\流格式\ =(字符串)avc \,\对齐\ =(字符串)au \,\ codec_data \ =(缓冲区)01f40016ffe1001d67f40016919640230dfe37016a0c020a80000003008000000a478b172401000668ebcc448440 \,\ 级别\ =(字符串)2.2 \,\个人资料\ =(字符串)高-4:4:4“ /GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:src:caps = “ video / x-h264 \,\流格式\ =(字符串)avc \,\ 对齐\ =(字符串)au \,\ codec_data \ =(缓冲区)01f40016ffe1001d67f40016919640230dfe37016a0c020a80000003008000000a478b172401000668ebcc448440 \,\ 级别\ =(字符串)2.2 \,\个人资料\ =(字符串)high-4:4:4 \,\ pixel-aspect-ratio \ =(分数)1/1 \,\ width \ =(int)560 \,\ 高度\ =(整数)420 \,\帧速率\ =(分数)10/1 \,\ 已解析\ =(布尔值)为真” /GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink:caps = “ video / x-h264 \,\流格式\ =(字符串)avc \,\ 对齐\ =(字符串)au \,\ codec_data \ =(缓冲区)01f40016ffe1001d67f40016919640230dfe37016a0c020a80000003008000000a478b172401000668ebcc448440 \,\ 级别\ =(字符串)2.2 \,\个人资料\ =(字符串)high-4:4:4 \,\ pixel-aspect-ratio \ =(分数)1/1 \,\ width \ =(int)560 \,\ 高度\ =(整数)420 \,\帧速率\ =(分数)10/1 \,\ 已解析\ =(布尔值)为真” /GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink:caps = “ video / x-h264 \,\流格式\ =(字符串)avc \,\ 对齐\ =(字符串)au \,\ codec_data \ =(缓冲区)01f40016ffe1001d67f40016919640230dfe37016a0c020a80000003008000000a478b172401000668ebcc448440 \,\ 级别\ =(字符串)2.2 \,\个人资料\ =(字符串)high-4:4:4 \,\ pixel-aspect-ratio \ =(分数)1/1 \,\ width \ =(int)560 \,\ 高度\ =(整数)420 \,\帧速率\ =(分数)10/1 \,\ 已解析\ =(布尔值)为真” /GstPipeline:pipeline0/GstH264Parse:h264parse0.GstPad:sink:caps = “ video / x-h264 \,\流格式\ =(字符串)avc \,\ 对齐\ =(字符串)au \,\ codec_data \ =(缓冲区)01f40016ffe1001d67f40016919640230dfe37016a0c020a80000003008000000a478b172401000668ebcc448440 \,\ 级别\ =(字符串)2.2 \,\个人资料\ =(字符串)高-4:4:4“ /GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0.GstPad:sink:caps =“ application / x-rtp \,\ media \ =(string)video \,\ Clock-rate \ =(int)90000 \,\ encoding-name \ =(string)H264 \,\ 打包模式\ =(字符串)1 \,\ profile-level-id \ =(字符串)f40016 \,\ sprop-parameter-sets \ =(字符串)\“ Z / QAFpGWQCMN / jcBagwCCoAAAAMAgAAACkeLFyQ \\ = \\,aOvMRIRA \” \,\ 有效负载\ =(int)96 \,\ ssrc \ =(uint)2608932143 \,\ timestamp-offset \ =(uint)2718199440 \,\ seqnum-offset \ =(uint)12403 \,\ a-framerate \ =(string)10“ 重新分配延迟... /GstPipeline:pipeline0/avdec_h264:avdec_h264-0.GstPad:sink:caps = “ video / x-h264 \,\流格式\ =(字符串)avc \,\ 对齐\ =(字符串)au \,\ codec_data \ =(缓冲区)01f40016ffe1001d67f40016919640230dfe37016a0c020a80000003008000000a478b172401000668ebcc448440 \,\ 级别\ =(字符串)2.2 \,\个人资料\ =(字符串)high-4:4:4 \,\ pixel-aspect-ratio \ =(分数)1/1 \,\ width \ =(int)560 \,\ 高度\ =(整数)420 \,\帧速率\ =(分数)10/1 \,\ 解析\ =(布尔值)真
除非提出要求,否则我会把发送器的一面留在外面,因为会出现很多文本,但gdppay键盘似乎只出现两次,并且没有连续循环,就像我认为它可以正常工作一样正确地
编辑:两个管道的极大简化版本使我面临相同的问题。 正在发送:
gst-launch-1.0 -v rpicamsrc bitrate=50000 ! 'video/x-raw,framerate=10/1,width=560,height=420' ! videoconvert ! timestampoverlay ! videoconvert ! x264enc tune=zerolatency ! rtph264pay config-interval=1 pt=96 ! gdppay ! udpsink host=192.168.168.149 port=5000
接收:
gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false
收件人消息:
新时钟:GstSystemClock /GstPipeline:pipeline0/GstGDPDepay:gdpdepay0.GstPad:src:caps = “ application / x-rtp \,\ media \ =(string)video \,\ 时钟速率\ =(整数)90000 \,\编码名称\ =(字符串)H264 \,\ 打包模式\ =(字符串)1 \,\ profile-level-id \ =(字符串)f40016 \,\ sprop-parameter-sets \ =(字符串)\“ Z / QAFpGWQCMN / jcBagwCCoAAAAMAgAAACkeLFyQ \\ = \\,aOvMRIRA \” \,\ 有效负载\ =(int)96 \,\ ssrc \ =(uint)1088247522 \,\ timestamp-offset \ =(uint)4107427474 \,\ seqnum-offset \ =(uint)11212 \,\ a-framerate \ =(string)10“ /GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0.GstPad:src:caps =“视频/ x-h264 \,\流格式\ =(字符串)avc \,\对齐\ =(字符串)au \,\ codec_data \ =(缓冲区)01f40016ffe1001d67f40016919640230dfe37016a0c020a80000003008000000a478b172401000668ebcc448440 \,\ 级别\ =(字符串)2.2 \,\个人资料\ =(字符串)高-4:4:4“ /GstPipeline:pipeline0/avdec_h264:avdec_h264-0.GstPad:sink:caps = “ video / x-h264 \,\流格式\ =(字符串)avc \,\ 对齐\ =(字符串)au \,\ codec_data \ =(缓冲区)01f40016ffe1001d67f40016919640230dfe37016a0c020a80000003008000000a478b172401000668ebcc448440 \,\ 级别\ =(字符串)2.2 \,\个人资料\ =(字符串)高-4:4:4“ /GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0.GstPad:sink:caps =“ application / x-rtp \,\ media \ =(string)video \,\ Clock-rate \ =(int)90000 \,\ encoding-name \ =(string)H264 \,\ 打包模式\ =(字符串)1 \,\ profile-level-id \ =(字符串)f40016 \,\ sprop-parameter-sets \ =(字符串)\“ Z / QAFpGWQCMN / jcBagwCCoAAAAMAgAAACkeLFyQ \\ = \\,aOvMRIRA \” \,\ 有效负载\ =(int)96 \,\ ssrc \ =(uint)1088247522 \,\ timestamp-offset \ =(uint)4107427474 \,\ seqnum-offset \ =(uint)11212 \,\ a-framerate \ =(string)10“
此流到达udpsink,然后相关的关联数据继续进行,直到我关闭它为止。