nvidia nx平台 Gstreamer tcpserverink延迟2-3秒问题调试2

free-jdx 2021-07-30 17:20:54 5218

1. 前言
2.  测试结果
3. 使用同一个sdp文件
4.  分析
5. 用Windows Gstreamer库接收流
1. 前言

承接上篇
https://www.ebaina.com/articles/140000012900

2. 测试结果

使用gst-inspect-1.0 生效了

(1)gst-launch-1.0 videotestsrc in UDP
它工作得很好,大约20毫秒的延迟

(2)gst-launch-1.0 videotestsrc in TCP

必须指定NX的IP地址,
使用tcpclientsrc还是tcpserverrc:

gst-launch-1.0 tcpserversrc host=NX.Address.IP port=5000 ! 
'application/x-rtp,encoding-name=H264,payload=96' 
! rtph264depay ! avdec_h264 ! xvimagesink sync=0

采集不到

发送pipeline(NX):

gst-launch-1.0 videotestsrc is-live=1 
! video/x-raw,width=1280,height=720 
! timeoverlay valignment=4 halignment=1 
! nvvidconv ! 'video/x-raw(memory:NVMM),width=1280,height=720' 
! tee name=t ! nvv4l2h264enc insert-sps-pps=1 idrinterval=15 
! h264parse ! rtph264pay 
! tcpserversink host=NX.Address.IP port=5000 sync=0 t. 
! queue ! nvegltransform 
! nveglglessink sync=0

(3)gst-launch-1.0 OpenCV in UDP

std::string gst_out = "appsrc 
! video/x-raw,width=1920,height=1080 
! videoconvert 
! timeoverlay valignment=4 halignment=1 
! nvvidconv ! 'video/x-raw(memory:NVMM),width=1920,height=1080' 
! tee name=t 
! nvv4l2h264enc insert-sps-pps=1 idrinterval=15 
! h264parse ! rtph264pay 
! udpsink host=PC.Address.IP port=5000 sync=0 t. 
! queue ! nvegltransform ! nveglglessink sync=0

它工作的0-20ms延迟(计算与几张照片)注意到视频转换,
否则它不会推帧到管道
我也有一些帧都模糊了
这并不经常发生,
看来延迟来自tcpserverink。

现在传输工作得很好(我还把编码器从264改为265,质量高多了)。
我不能接收我的流与VLC使用
udp://@NX.Address.IP:PORT .
似乎我需要定义数据包大小,找不到哪些参数可以做到这一点。

3. 使用同一个sdp文件

设法使视频与UDP与Gstreamer在
一个应用程序与VLC与一个sdp文件,
但我现在有500ms的延迟,我使用相同的管道之前:

std::string gst_out = "appsrc 
! video/x-raw,width=1920,height=1080 
! videoconvert ! timeoverlay valignment=4 halignment=1 
! nvvidconv 
! video/x-raw(memory:NVMM),width=1920,height=1080 
! tee name=t ! nvv4l2h265enc insert-sps-pps=1 idrinterval=15 
! h265parse ! rtph265pay 
! udpsink host=PC.Address.IP port=5000 sync=0 t. 
! queue ! nvegltransform ! nveglglessink sync=0

sdp文件:

v=0
m=video #PORT RTP/AVP 96
c=IN IP4 192.168.1.21
a=rtpmap:96 H265/90000

能减少这个延迟吗?
不确定,但似乎在VLC中有缓冲机制。
它可能有助于运行在CBR +设置虚拟缓冲区大小。
它避免了I和P帧之间的突发比特率,
并可能在有限的网络带宽提供更好的稳定性。

例子如下:

如何设置:虚拟缓冲区大小
如何设置CBR模式?
num-buffers=XXX (src的属性)是虚拟缓冲区的大小?
$ gst-launch-1.0 filesrc location= park_joy_1080p50.y4m 
! y4mdec ! nvvidconv ! nvv4l2h264enc 
bitrate=14000000 control-rate=1 vbv-size=450000 
! h264parse ! qtmux ! filesink location= park_joy.mov

$ gst-launch-1.0 filesrc location= park_joy_1080p50.y4m 
! y4mdec ! nvvidconv ! nvv4l2h265enc
 bitrate=14000000 control-rate=1 vbv-size=450000 
 ! h265parse ! qtmux ! filesink location= park_joy_265.mov

安装/运行ffmpeg检查PSNR

$ gst-launch-1.0 filesrc location= park_joy_1080p50.y4m ! y4mdec ! filesink location=park_joy_50.yuv
$ sudo apt install ffmpeg

$ ffmpeg -i park_joy.mov -f rawvideo -video_size 1920x1080 -framerate 50 -i park_joy_50.yuv -lavfi "ssim;[0:v][1:v]psnr" -f null -       ffmpeg version 3.4.6-0ubuntu0.18.04.1 Copyright (c) 2000-2019 the FFmpeg developers
  (...skip)
[Parsed_ssim_0 @ 0x55c102f010] SSIM Y:0.713943 (5.435473) U:0.732030 (5.719138) V:0.788833 (6.753741) All:0.729439 (5.677350)
[Parsed_psnr_1 @ 0x55c102eda0] PSNR y:24.882475 u:30.801891 v:34.448052 average:26.262739 min:22.971376 max:30.380294
4. 分析

VLC中似乎有缓冲机制
事实上,它看起来是这样的,
当我把之前的管道放入VLC时,
可以经常看到一些模糊的帧。
可以通过调整比特率和设置vbv大小来纠正。
现在可以使用UDP,现在有1-2秒的管道延迟:

std::string gst_out = "appsrc 
! video/x-raw,width=1920,height=1080 
! videoconvert ! timeoverlay valignment=4 halignment=1 
! nvvidconv ! video/x-raw(memory:NVMM),width=1920,height=1080 
! tee name=t 
! nvv4l2h265enc EnableTwopassCBR=1 insert-sps-pps=1 idrinterval=2 
bitrate=64000000 vbv-size=1600000 maxperf-enable=1 
! h265parse ! rtph265pay config-interval=1 pt=96 
! udpsink host=PC.Address.IP port=PORT sync=0 async=0  t. 
! nvegltransform 
! nveglglessink max-lateness=11000 sync=0";

尝试删除这些参数
max-late =11000, EnableTwopassCBR=1,
insert-sps-pps=1, idrinterval=2,
似乎对流没有任何影响

5. 用Windows Gstreamer库接收流

不使用VLC
用Windows Gstreamer库接收流

用udpsink有大约30毫秒的延迟。
如果有人想把它发送到VLC,
这里是一个适合我的管道,
但不能得到比1s延迟更好的:

std::string gst_out = "appsrc is-live=1 
! video/x-raw, width=1920, height=1080 
! videoconvert 
! timeoverlay valignment=4 halignment=1 
! nvvidconv ! video/x-raw(memory:NVMM), width=1920, height=1080 
! tee name=t ! nvv4l2h265enc EnableTwopassCBR=1 
insert-sps-pps=1 idrinterval=15 iframeinterval=1000 
bitrate=64000000 vbv-size=1600000 maxperf-enable=1 
preset-level=1 ! h265parse ! rtph265pay config-interval=1 pt=96 
! udpsink host=IP.address port=PORTsync=0 async=0 t. 
! nvegltransform 
 nveglglessink max-lateness=11000 sync=0";

接收端需要打开一个.sdp文件来读取该流。
调整码率有助于抑制帧的模糊

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
free-jdx
红包 95 4 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区