DJI Lightbridge 2的视频馈送损坏

时间:2018-10-19 09:45:26

标签: java android dji-sdk

我正在编写一个需要从M600接收视频供稿的android应用,但是我从光桥接收的供稿已损坏(仅在帧顶部显示了一些块状像素)。我已经尝试了AV和HDMI输入,具有不同的HDMI源和两个桥。 EXT摄像机(辅助视频输入)可以正常工作,而Mavic的视频也可以工作。问题是Feed在DJI Go中可以正常工作,因此无论如何这都是软件问题。这是我在代码中使用的简单回调:

mReceivedFirstVideoDataCallBack = new VideoFeeder.VideoDataCallback() {
        @Override
        public void onReceive(byte[] videoBuffer, int size) {
            if (mCodecManager != null && !isSecondFeedSelected) {
                mCodecManager.sendDataToDecoder(videoBuffer, size);
            }
        }
    };

然后:VideoFeeder.getInstance().getPrimaryVideoFeed().setCallback(mReceivedFirstVideoDataCallBack); 我也尝试过使用provideTranscodedVideoFeed(),没有区别。

运行DJI's own sample code ...

时遇到相同的问题

Picture of the video feed from the example app。用ffmpeg解码的YUV屏幕截图产生了相似的结果。

那么我想念什么吗?还是SDK本身有问题(尝试将其更新到4.7.1,仍然没有运气),如果可以的话,可以解决该问题吗?

编辑:这是我设置给SurfaceView持有者的回调:

SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
        @Override
        public void surfaceCreated(SurfaceHolder holder) {
            int videoViewWidth = mVideoSurfaceSmall.getWidth();
            int videoViewHeight = mVideoSurfaceSmall.getHeight();
            if (mCodecManager == null) {
                mCodecManager = new DJICodecManager(activity, holder, videoViewWidth, videoViewHeight);
            }
        }

        @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
            if (mCodecManager != null) {
                mCodecManager.cleanSurface();
                mCodecManager.destroyCodec();
            }
            mCodecManager = new DJICodecManager(activity, holder, width, height);
        }

        @Override
        public void surfaceDestroyed(SurfaceHolder holder) {
            if (mCodecManager != null) {
                mCodecManager.cleanSurface();
                mCodecManager.destroyCodec();
                mCodecManager = null;
            }
        }
    };

1 个答案:

答案 0 :(得分:0)

@Nic,请尝试使用setEXTVideoInputPortEnabled()setBandwidthAllocationForHDMIVideoInputPort()触发正确的视频源。 在此之前,请确保已调用setChannelSelectionMode()方法将选择模式设置为AUTO