Декодирование живого RTSP-потока: большая задержка видео с помощью MediaPlayer на Android

Я проигрываю поток Live RTSP из VLC на ПК в класс Android MediaPlayer (оба в одной локальной сети). Он воспроизводится плавно, без ошибок - проблема в том, что декодированное видео на экране отстает примерно на 5-7 секунд от живого.

Из отладки и обратных вызовов я вижу, что живые данные поступают на устройство <1 с после запуска mMediaPlayer.prepareAsync () . Это когда класс MediaPlayer начинает определять, в каком формате поток, с какими размерами и т. Д. Затем непосредственно перед отображением видео на экране (через 5–7 секунд) вызывается onPrepared () , где я вызовите mMediaPlayer.start () . Похоже, этот start () воспроизводит видео, которое изначально было снято с начала этапа подготовки.

Я пробовал seekTo (5000) как до, так и после start () , но это никак не повлияло на задержку.

Для приложения для видеосвязи в реальном времени задержка настройки в несколько секунд вполне подходит, но эта задержка после представления видео для меня недоступна.

public void surfaceCreated(SurfaceHolder holder)
{
   mMediaPlayer = new MediaPlayer();
   mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
   mMediaPlayer.setOnInfoListener(this);
   mMediaPlayer.setOnErrorListener(this);
   mMediaPlayer.setOnVideoSizeChangedListener(this);
   mMediaPlayer.setOnBufferingUpdateListener(this);
   mMediaPlayer.setDataSource("rtsp://192.168.1.4:5544/test");
   mMediaPlayer.setDisplay(holder);
   mMediaPlayer.setScreenOnWhilePlaying(true);
   mMediaPlayer.setOnPreparedListener(this);
   mMediaPlayer.setOnCompletionListener(this);
   mMediaPlayer.prepareAsync();
   ...
public void onPrepared(MediaPlayer mediaplayer)
{
   mMediaPlayer.start();
...

Есть идеи, как я могу уменьшить это отставание или довести до конца то, что буферизуется MediaPlayer? У меня устройство 3.1, minSdkVersion - 2.2.

РЕДАКТИРОВАТЬ:

Я нашел несколько высоких и низких отметок в AwesomePlayer.cpp (2s и 8s). В качестве быстрого теста я взломал libstagefright.so, чтобы сделать эти 0,1 и 1. Однако это не повлияло на задержку. Мои поиски продолжаются ...

8
задан barkside 20 January 2012 в 16:47
поделиться