DJI-264图传码流,画面静止时会出现花屏,如何解决?
Completed动态ip , DJI-H264标准, 1280*720,30fps,gop 30,无B帧,码率1Mbps。
按照码流要求,增加了AUD信息,在分包发送前,代码保存裸流,vlc正常播放。
第三方软件分析码流,帧率正确。
-
这边把加了sendto的errno打印的库(arm-linux-gnueabihf-gcc版本),和csdn链接中的内容,上传至以下链接了,您可以使用此库进一步排查。 链接:https://pan-sec.djicorp.com/s/5BN9rJ8KsH4DDem 密码:dji123 -
H264_DJI,使用Period I,1Mbps。使用提供的lib重新编译,运行仍然会有busy的情况。日志文件:https://space.dingtalk.com/s/gwHOAyRH4QLODQRqlgPaACA2YTBhYTBjMmE0MTQ0YWJkYmY4MzI2MWI0NDY3NDEzZg 密码: a9Lj。我这里的具体场景和一些情况说明如下:
1、1Mbps下,正常室内没有出现busy问题,室外大部分场景也没有busy问题。在对着墙面、地面静止不动时,就会出现busy,这里的详细日志中出现busy的情况就是对着墙面或者地面,当转动镜头时,就不会出现busy问题。
2、网口硬件没有问题,在这个开发板上使用udp推送15Mbps的码流到PC上解码正常,也未出现socket的错误。这里怀疑是socket使用上遇到上述特定场景出现的情况。
关于socket方面,需要协助排查psdk中的问题:(1)库中打印sendto error是否仅仅是开发板端的信息?(2)应该使用的是udp?sendto函数使用了哪些选项?是否存在其他逻辑上的问题导致该选项出现错误,导致errorno=11的情况?(3)码流1M,30fps,平均1秒也就100KB数据量,看实时带宽是没有达到上限的,如果I帧数据量大(超过60K进行了拆包发送),某些未知情况下是否也会造成busy问题?(4)erroeno 11 查man是EAGAIN,为什么你给的是Resourcetemporarily unavailable ?
-
H264-DJI,使用Period I,1Mbps。进行了对比测试:第一种,使用psdk发送视频流的线程的程序(目前使用的方式);第二种,之后关闭psdk发送视频流的线程,使用单独的进程使用非阻塞udp发送视频流到192.168.110.1:23003。
视频中先展示第一种,再展示第二种,再展示第一种, 使用独立的udp程序发送视频流无sendto错误(第一种psdk中图传线程单独提出编译运行,同样编码方式,替换psdk api为socket sendto)。整个对比测试中无人机、负载未移动和操作,使用手机ssh控制程序运行,仅使用pilot界面切换界面。流程见视频字幕说明。
视频链接如下(~70M):https://space.dingtalk.com/s/gwHOAySM-wLODQRqlgPaACBkMDg3N2JmYjNlNDU0NmZlYTQxMjMzMGVkMTExMjFkNA 密码: YncA
另外相同测试场景下,当前Period I结构下3Mbps码流,使用psdk发送视频流api函数,一样能出现busy情况。但是,切换GDR结构下的3Mbps码流,使用psdk发送视频流api函数,不出现busy情况。
-
工程师确认后,针对您提到的问题,回复如下: **1、库中打印sendto error是否仅仅是开发板端的信息?** -->是运行PSDK调用sendto的error信息 **2、应该使用的是udp?sendto函数使用了哪些选项?是否存在其他逻辑上的问题导致该选项出现错误,导致errorno=11的情况?** -->MSG_NOSIGNAL | MSG_DONTWAIT, 可删除后提供库进行测试, 已经去除该标志位,可提供给用户测试 ( 提供的库在以下网盘链接 ). 链接:https://pan-sec.djicorp.com/s/Qr6LdTc8fE846na 密码:dji123 **3、码流1M,30fps,平均1秒也就100KB数据量,看实时带宽是没有达到上限的,如果I帧数据量大(超过60K进行了拆包发送),某些未知情况下是否也会造成busy问题?** -->出错的原因是sendto发送失败了,导致上层busy, 和带宽没有关系. **4、erroeno 11 查man是EAGAIN,为什么你给的是Resourcetemporarily unavailable ?** -->系统底层打印出来的,strerror(errno)),以这个为准. -
是否分析过 前一条对比测试回复 的视频? 目前情况很奇怪:(1)使用psdk程序的推流,就报error;(2)使用socket的udp sendto函数推流,8M以内码流,没有遇到丢包情况。非阻塞设置MSG_NOSIGNAL | MSG_DONTWAIT时,也没有出现任何error的情况。(3)使用GDR无error。
-
您提到的对比测试,已经提交给工程师确认,及之前提到的MSG_NOSIGNAL | MSG_DONTWAIT, 删除后提供库进行测试, 建议您测一下,看是否仍有异常 ( 提供的库在以下网盘链接 ). 链接:https://pan-sec.djicorp.com/s/Qr6LdTc8fE846na 密码:dji123 -
飞机、遥控器、pilot都已经升级到最新v3版本,如图。
使用psdk v3,图传卡屏问题说明
(1)和之前测试一样,使用 H264-DJI,Period Struct,720p 30fps,3Mbps。(已确认编码发送无问题,在前面pask v2中,单独使用测试库、直接使用socket api发送无问题)
(2)添加测试log代码:每次nalu在调用 DjiPayloadCamera_SendVideoStream 前,先打印长度,之后分包发送;在 Osal_UdpSendData 函数中添加当前发送成功长度和未发送的长度。如下图:
(3)如前面测试一样,浮窗显实时带宽、通道状态。
(4)录制视频,首部持续在fpv、相机画面中晃动。
测试情况结果:
使用1080p 60fps录制pilot和控制台信息,视频链接(~70M)为
https://space.dingtalk.com/s/gwHOAzAy9wLODQRqlgPaACA5MWNkMzg3NGU3YjA0M2M0YjQzMjQ4MTEwMDRkZDY3OQ 密码: NXct
测试过程中,通道实时带宽未过上限,状态也未出现过busy。控制台中,超过60000的nalu,也分次调用了socket sendto函数发送,未出现数据发送失败的情况,但会出现卡屏现象。一个视频截图如下。
-
你好。我这边已经排查到问题。高亮屏遥控器性能过低,不能实时解码相机的码流,出现卡顿;手机端安装pilot能够正常显示。
相同编码参数和编码格式 H264-DJI,Period Struct,720p 30fps,3Mbps,使用 psdk v2和v3版本开发的程序都会在dji pilot显示出现问题,前者出现花屏,后者出现卡顿;换用GDR Struct就显示正常。下面截图是3Mbps下不同Struct的测试时的帧数据量对比。左侧是Period,室外测试时最大的I帧数据量达到170KB,P帧和I帧数据量差距比较大,室内测试数据量波动相对较小;右侧是使用GDR,每一帧的数据量相差不大,很平稳。
psdk发送目前正常,高亮屏解码端对于这种波动不能实时处理,导致了period和gdr显示的差异。
对比录制了高亮屏和手机使用pilot显示解码负载图像的视频,链接如下https://space.dingtalk.com/s/gwHOAzG09wLODQRqlgPaACAxZTY4ODQwOTM5YmM0Y2MwOWFlMDhjODM1OWI5NTVmZA 密码: 26Pb
视频中的操作流程和现象如下:(1)高亮屏显示相机图传,进入app无画面,转动无人机画面,出现了图传(2)静止一会,转动无人机,fpv实时显示画面,负载图传回卡顿一会再显示(3)遥控器、飞机不关机,直接将手机通过usb接入到高亮屏打开pilot,显示不会出现任何问题。
另外两个额外的问题。后期是否有升级高亮屏硬件配置的计划?我这边打算使用GDR,需要你们尽快解决另外一个帖子中关于gdr首屏红色花屏的问题。
-
关于GDR问题的帖子链接 https://sdk-forum.dji.net/hc/zh-cn/community/posts/4407180830745 ,一个月前已提供了说明,也提供了GDR的裸流视频和psdk demo的复现流程,我们在链接帖子中跟进,后面我再测试v3的问题。
Please sign in to leave a comment.
Comments
56 comments