DJI DJICodecManager isDecoderOK() always returns false for Matrice 600 and onYUVDataReceived callback not called

DJI DJICodecManager isDecoderOK() always returns false for Matrice 600 and onYUVDataReceived callback not called

当尝试从 Matrice 600 获取 yuv 视频数据时,大约有 5% 的时间可以正常工作。但大多数时候,我从未收到 onYUVDataCallback。当我使用 DJICodecManager.isDecoderOK() 检查解码器状态时,我收到 false。对于它确实有效的极少数情况,isDecoderOK() returns true.

我正在使用如下依赖项

implementation ('com.dji:dji-sdk:4.14')
compileOnly ('com.dji:dji-sdk-provided:4.14')
api ('com.dji:dji-uxsdk:4.14',
        { exclude group: 'com.amap.api' }
)

我正在创建编解码器管理器,启用 yuvdata 并将 yuv 回调设置为此实现 DJICodecManager.YuvDataCallback

   this.djiCodecManager = new DJICodecManager(context.getApplicationContext(), (SurfaceTexture)null, 0, 0, UsbAccessoryService.VideoStreamSource.Camera);
    
   this.djiCodecManager.enabledYuvData(true);
   this.djiCodecManager.setYuvDataCallback(this);

我创建了数据侦听器并将其添加到回调中。我总是在 videoDataListener 中获取数据。然后我发送数据到解码器。但是我没有在 onYUVDataReceived 中收到 callbcak(除非在极少数情况下,我不确定为什么它有时有效,有时无效。) 它适用于其他 DJI 无人机。我对 Matrice 600 所做的唯一更改是使用 getSecondaryVideoFeed() 而不是 getPrimaryVideoFeed()。

this.videoDataListener = (data, size) -> {
    counter++;
    djiCodecManager.sendDataToDecoder(data, size);
}
    
    
if (VideoFeeder.getInstance().getSecondaryVideoFeed() != null && this.videoDataListener != null) {               
    VideoFeeder.getInstance().getSecondaryVideoFeed().addVideoDataListener(this.videoDataListener);
}

到目前为止,我已经尝试过 provideTranscodedVideoFeed()、getPrimaryVideoFeed()。 DJICodecManager isDecoderOK() 返回 false 的原因可能是什么?您有任何解决方法吗?

我的解决方法是将 DJI gradle 依赖项添加到主应用程序模块以及我的动态模块,该模块包含我所有的 dji 相关代码并且已经具有依赖项。

必须有更好的方法来做到这一点,因为将 DJI sdk 内容拆分到主应用程序模块之外并进入动态模块的全部目的是将应用程序减小到可部署到 Google 的大小捆绑播放。