Поврежденный видео канал от DJI Lightbridge 2 - PullRequest
0 голосов
/ 19 октября 2018

Я пишу приложение для Android, которое должно получать видеопотоки от M600, но фид, который я получаю от светового моста, поврежден (отображаются только некоторые блочные пиксели в верхней части кадра).Я пробовал оба входа AV и HDMI, с разными источниками HDMI и на двух маяках.Однако камера EXT (вторичная видеокамера) работает, как и видео с Mavic.Дело в том, что канал отлично работает в 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 ...

Изображение видеопотока из примера приложения .Скриншоты YUV, декодированные с помощью ffmpeg, дают схожие результаты.

Так что, я что-то упустил?Или что-то не так с самим 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 голосов
/ 23 октября 2018

@ Nic, пожалуйста, попробуйте использовать setEXTVideoInputPortEnabled() и setBandwidthAllocationForHDMIVideoInputPort(), чтобы активировать правильный источник видео.и перед этим убедитесь, что вы вызвали метод setChannelSelectionMode() для установки режима выбора на AUTO

...