Уменьшите задержку во время потоковой и прямой трансляции
В настоящее время я использую приложение, которое использует метод, приведенный в качестве примера на 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), чтобы настроить задержку в битах
Пожалуйста, дайте мне знать, было ли это полезно для вас, или вы нашли лучшее решение в той или иной среде.