DJI-264图传码流,画面静止时会出现花屏,如何解决?

Completed

Comments

56 comments

  • develop

    之前是同一个开发板,H264_DJI,使用Period I,1Mbps, 会出现busy状态;当切换另一个psdk应用程序,使用GDR, 3Mbps,反而没有出现busy状态。 内部编码模块每次确保给出一个完整slice,psdk发送视频流部分代码一致,如果完整slice超过65000字节,就拆包发送。

    提供的csdn链接404。我这边使用的是arm-linux-gnueabihf-gcc版本的psdklib。

    0
    Comment actions Permalink
  • DJI Developer Support
    这边把加了sendto的errno打印的库(arm-linux-gnueabihf-gcc版本),和csdn链接中的内容,上传至以下链接了,您可以使用此库进一步排查。 链接:https://pan-sec.djicorp.com/s/5BN9rJ8KsH4DDem 密码:dji123
    0
    Comment actions Permalink
  • develop

    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 ?

    0
    Comment actions Permalink
  • develop

    后面打算使用同一块开发板和摄像头,相同的h264编码方式,相同场景,进行对比测试busy情况:第一种,使用psdk发送视频流的线程的程序(目前使用的方式);第二种,之后关闭psdk发送视频流的线程,使用单独的进程使用非阻塞udp发送视频流到192.168.110.1:23003(已验证app能正常显示图传)。

    0
    Comment actions Permalink
  • DJI Developer Support
    好的,感谢您的更新与反馈,这边提交给相应工程师确认,如有进展,将及时告知您。
    0
    Comment actions Permalink
  • develop

    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情况

    0
    Comment actions Permalink
  • DJI Developer Support
    收到您的视频文件,已提交给相应工程师确认,如有进展,将及时告知您。
    0
    Comment actions Permalink
  • DJI Developer Support
    工程师确认后,针对您提到的问题,回复如下: **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)),以这个为准.
    0
    Comment actions Permalink
  • develop

    是否分析过 前一条对比测试回复 的视频?  目前情况很奇怪:(1)使用psdk程序的推流,就报error;(2)使用socket的udp sendto函数推流,8M以内码流,没有遇到丢包情况。非阻塞设置MSG_NOSIGNAL | MSG_DONTWAIT时,也没有出现任何error的情况。(3)使用GDR无error。

     

    0
    Comment actions Permalink
  • DJI Developer Support
    您提到的对比测试,已经提交给工程师确认,及之前提到的MSG_NOSIGNAL | MSG_DONTWAIT, 删除后提供库进行测试, 建议您测一下,看是否仍有异常 ( 提供的库在以下网盘链接 ). 链接:https://pan-sec.djicorp.com/s/Qr6LdTc8fE846na 密码:dji123
    0
    Comment actions Permalink
  • DJI Developer Support
    另外,工程师看了您的对比测试,如果单独开线程可以解决问题,建议您先使用单独开线程方式处理,此问题我们也会同时进一步看是什么原因。
    0
    Comment actions Permalink
  • develop

    使用网盘中提供的删除MSG_NOSIGNAL | MSG_DONTWAIT的库进行测试, 1M、3M码流暂时没有遇到问题。使用3M码流的原因:psdk原始库出现busy情况,3M比1M更明显,基本上运行psdk程序就报error;切换使用云盘中的库编译的程序,没有出现问题。多次反复切换2个程序交替运行,对比结果明显。

    目前提供的库,是否仅删除了socket选项、增加了打印strerror(errno)? 后续api接口是否可切换?后续psdk升级如何使用?

    0
    Comment actions Permalink
  • DJI Developer Support
    好的,感谢您的反馈,这边需要工程师确认,如有进展,将及时告知您。
    0
    Comment actions Permalink
  • DJI Developer Support
    关于您的问题,工程师回复如下,另外如果您确认此问题已解决,这边将关闭此单。 1、目前提供的库,是否仅删除了socket选项、增加了打印strerror(errno)? 只删除了socket选项。 2、后续api接口是否可切换?后续psdk升级如何使用? 目前您可以先维持临时的lib使用,后续建议您切换至PSDK 3.0.0版本使用。 PSDK 3.0.0版本近期会发布,会修复该问题。
    0
    Comment actions Permalink
  • develop

    确认已解决。静候新版版发布。

    0
    Comment actions Permalink
  • develop

    你好。 目前使用了psdk v3,相同的编码配置和逻辑,不会有花屏的问题,不会出现busy,但是会出现持续卡屏的现象。

    在v3版本中,api函数 DjiPayloadCamera_SendVideoStream 是否底层直接调用了Osal_UdpSendData()函数?这个函数实现和提供仅删除socket选项的psdk v2的临时测试库中的实现是否存在差别?

    0
    Comment actions Permalink
  • DJI Developer Support
    这边提交工程师确认下,如有结果,再及时回复您。
    0
    Comment actions Permalink
  • DJI Developer Support
    另外想跟您确认下,您的飞机,遥控器和DJI Pilot是否都升至v3版本了。
    0
    Comment actions Permalink
  • DJI Developer Support
    工程师确认回复如下: 1. 直接调用了Osal_UdpSendData(),您可以自己dump数据进一步确认。 2. 基本无差别。
    0
    Comment actions Permalink
  • develop

    飞机、遥控器、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函数发送,未出现数据发送失败的情况,会出现卡屏现象。一个视频截图如下。

    0
    Comment actions Permalink
  • DJI Developer Support
    好的,这边提交工程师确认,如果有结果,将会及时告知您。
    0
    Comment actions Permalink
  • develop

    你好。我这边已经排查到问题。高亮屏遥控器性能过低,不能实时解码相机的码流,出现卡顿;手机端安装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首屏红色花屏的问题。

    0
    Comment actions Permalink
  • DJI Developer Support
    感谢您的反馈,这边同步给工程师处理,以及确认“是否有升级高亮屏硬件配置的计划”的问题。 关于您提到的GDR首屏花屏的问题,工程师仍在排查中,这边升至v3固件后没有看到花屏现象,但是首屏有卡顿黑屏问题,建议您测试下v3固件测试下,是否和我们测到的现象一致(可以的话提供下GDR数据测试的飞机数据,用调参导出来那个,及说明下测试时的时间点;这边已将复现过程的飞机数据提交相应工程师确认中,如果您这边也提交相关的数据,工程师可以对比确认)。
    0
    Comment actions Permalink
  • develop

    关于GDR问题的帖子链接 https://sdk-forum.dji.net/hc/zh-cn/community/posts/4407180830745 ,一个月前已提供了说明,也提供了GDR的裸流视频和psdk demo的复现流程,我们在链接帖子中跟进,后面我再测试v3的问题。

     

    0
    Comment actions Permalink
  • DJI Developer Support
    好的,您在另一个贴子提供的相关视频已提交工程师分析中。
    0
    Comment actions Permalink
  • DJI Developer Support
    已跟工程师确认,暂无升级M300机型对应的高亮屏硬件配置的计划。
    0
    Comment actions Permalink

Please sign in to leave a comment.