Получение ошибки LiveStreamManager -3 в DJI Mobile SDK при попытке потоковой передачи в пользовательский RTMP?

Я пытаюсь реализовать приложение, которое отправляет живое видео с дрона на мой собственный сервер rtmp. Когда я использую LiveStreamManager из DJI Mobile SDK, он выдает код ошибки -3, и поток не запускается. Как я могу использовать этот API?

Мое приложение успешно регистрируется, я могу настраивать миссии и получать телеметрию с дрона. Но когда я пытаюсь использовать LiveStreamManeger, он не работает, несмотря ни на что. Даже за счет реализации точно так, как это реализовано в Образец кода не работает. В документации по API DJI, похоже, также не хватает нескольких методов.

Вот моя реализация

    private void setupLiveStream() {
        DJISDKManager.getInstance().getLiveStreamManager().registerListener(listener);
        initListener();
        DJISDKManager.getInstance().getLiveStreamManager().setAudioStreamingEnabled(false);
        DJISDKManager.getInstance().getLiveStreamManager().setVideoSource(LiveStreamManager.LiveStreamVideoSource.Primary);
        liveURL = "rtmp://mycustomrtmp.com/drone/live_testDJI";
    }

    private void initListener() {
        listener = new LiveStreamManager.OnLiveChangeListener() {
            @Override
            public void onStatusChanged(int i) {
                setResultToToast("status changed : " + i);
            }
        };
    }
    private void StartStreaming(){
        if (!isLiveStreamManagerOn()) {
            return;
        }
        if (DJISDKManager.getInstance().getLiveStreamManager().isStreaming()) {
            setResultToToast("already started the Stream!");
            return;
        }
        new Thread() {
            @Override
            public void run() {
                DJISDKManager.getInstance().getLiveStreamManager().setLiveUrl(liveURL);// + vehicleID);
                int result = DJISDKManager.getInstance().getLiveStreamManager().startStream();
                DJISDKManager.getInstance().getLiveStreamManager().setStartTime();
                setResultToToast("LiveStream Start: " + result +
                        "\n isVideoStreamSpeedConfigurable:" + DJISDKManager.getInstance().getLiveStreamManager().isVideoStreamSpeedConfigurable() +
                        "\n isLiveAudioEnabled:" + DJISDKManager.getInstance().getLiveStreamManager().isLiveAudioEnabled());
            }
        }.start();
    }

Я всегда получаю код возврата -3. Когда я использую образец кода, я могу заставить его работать. Единственное отличие состоит в том, что я вызываю функцию isVideoStreamSpeedConfigurable (), она возвращает true в моем коде и false в образце кода. Но я не видел, где можно поставить эту штуку на false. Как мне реализовать LiveStreamingManager?


person Marcello Moreira    schedule 17.04.2019    source источник
comment
Пока что я использую образец кода и конвертирую его в свое приложение. Процесс идет медленно, так как я удаляю классы один за другим и проверяю, как это повлияет на приложение.   -  person Marcello Moreira    schedule 23.04.2019


Ответы (2)


Отвечая на свой вопрос ...

Мне удалось решить проблему. Очевидно, чтобы иметь возможность использовать LiveStreamManager, вы должны сначала вызвать функцию VideoFeeder.getPrimaryVideoFeed () где-нибудь в вашем коде, иначе она выдаст код ошибки -3.

Используя образец кода, в internal.utils.VideoFeedView есть класс, который можно использовать для этой цели.

Сначала я объявил о частной собственности VideoFeedView.

Затем в своем конструкторе класса я вызываю функцию initUI.

private VideoFeedView primaryVideoFeed;

private void initUI() {
   primaryVideoFeed.registerLiveVideo(VideoFeeder.getInstance().getPrimaryVideoFeed(),true);
   startStreaming();

}
person Marcello Moreira    schedule 25.04.2019
comment
У меня такая же проблема, но ваше решение мне не подходит. Где ты это узнал, может там есть для меня еще решения. - person Rabbi Shuki Gur; 22.09.2019
comment
На самом деле я нашел методом проб и ошибок. DJI MSDK почти не поддерживает, да и сам DJI, похоже, не заинтересован. Нам, разработчикам, приходится искать эти обходные пути. - person Marcello Moreira; 23.09.2019

Не знаю, повезло ли мне, но для меня следующий код решил мою проблему. Больше мне не нужно было ничего, вроде VideoFeedView. В чем причина использования этого? Я работал на mavic 2 pro и транслировал 30 кадров в секунду 720p на YouTube.

    private LiveStreamManager l;
    public int live_streaming_start(String live_url){
      Log.d("MavicMax", "LiveStream:live_streaming_start:" + live_url);
      l = DJISDKManager.getInstance().getLiveStreamManager();
      l.registerListener((x)->{Log.d("MavicMax", "LiveStream callback:" + x);});
      l.setVideoSource(LiveStreamManager.LiveStreamVideoSource.Primary);
      l.setVideoEncodingEnabled(true);
      l.setLiveUrl(live_url);
      int r = 0;
      r = l.startStream();
      return r;
}
person Mats Bohlinsson    schedule 25.10.2020
comment
Вы показываете пользователю видео в реальном времени? как использовать uxsdk и fpvwidget? - person Marcello Moreira; 27.10.2020
comment
Да, uxsdk, разве это не работает, вы имеете в виду? - person Mats Bohlinsson; 28.10.2020