Уменьшите задержку во время потоковой и прямой трансляции

В настоящее время я использую приложение, которое использует метод, приведенный в качестве примера на libstreaming-example-1 ( libstreaming), для потоковой передачи камеры с устройства Android на сервер Ubuntu (с использованием openCV и libVLC). Таким образом, мое устройство Android работает как сервер и ожидает, пока клиент (сервер Ubuntu) отправит сигнал воспроизведения через RTSP, а затем начнет потоковую передачу по UDP.

Проблема, с которой я сталкиваюсь при потоковой передаче, заключается в том, что во время передачи я получаю задержку примерно 1,1 с, и я хочу уменьшить ее до максимума 150 мс.

Я пытался реализовать libstreaming-example-2 из libstreaming-examples, но у меня не получалось получить доступ к подробной документации, и я не мог понять, как получить правильный сигнал для отображения потоковой передачи на моем сервере, Кроме этого, я пытался понять, что я могу сделать с примером 1, чтобы разобраться с ним, но ничего нового до сих пор не было.

PS: я использую локальную сеть, поэтому сеть / пропускная способность не проблема.

Здесь идут вопросы:

  • Каким способом лучше всего добиться минимальной задержки при потоковой передаче видео с камеры?
  • Как я могу реализовать пример-2?
  • Является ли метод примера 2 потоковой передачи более эффективным, чтобы уменьшить задержку до 150 мс?
  • Связана ли эта задержка с распаковкой видео на стороне сервера? (Кадры не пропущены, FPS: 30)

Спасибо!

1 ответ

Была та же проблема, что и у вас, с огромной задержкой потока (около 1,5 - 1,6 с)

Моя установка - устройство Android, которое передает свою камеру через RTSP, используя libStreaming, принимающая сторона - устройство Android, использующее libVlc в качестве медиаплеера. Теперь я нашел решение уменьшить задержку до 250-300 мс. Это было достигнуто путем установки libVlc со следующими параметрами.

 mLibvlc = new LibVLC();
    mLibvlc.setVout(LibVLC.VOUT_ANDROID_WINDOW);
    mLibvlc.setDevHardwareDecoder(LibVLC.DEV_HW_DECODER_AUTOMATIC);
    mLibvlc.setHardwareAcceleration(LibVLC.HW_ACCELERATION_DISABLED);
    mLibvlc.setNetworkCaching(150);
    mLibvlc.setFrameSkip(true);
    mLibvlc.setChroma("YV12");
    restartPlayer();

private void restartPlayer() {
    if (mLibvlc != null) {
        try {
            mLibvlc.destroy();
            mLibvlc.init(this);
        } catch (LibVlcException lve) {
            throw new IllegalStateException("LibVLC initialisation failed: " + LibVlcUtil.getErrorMsg());
        }
    }
}

Вы можете поиграть с setNetworkCaching(int networkCaching), чтобы настроить задержку в битах

Пожалуйста, дайте мне знать, было ли это полезно для вас, или вы нашли лучшее решение в той или иной среде.

Другие вопросы по тегам