Android 4.0.4 MediaPlayer готовит проблему, используя URL-адреса RTSP
У меня возникла странная проблема с приложением потокового видео, над которым я работаю. Реальная потоковая передача видео / аудио работает нормально на всех моих тестовых устройствах. Однако, по-видимому, на любом устройстве 4.0+ при использовании URL-адреса RTSP prepare () мгновенно возвращается (это вызывает проблему с предоставлением надлежащей обратной связи пользователям во время загрузки видео и создает помехи нескольким другим системам, которые у меня установлены).
Ниже приведен блок кода, в котором я инициализирую и настраиваю свой MediaPlayer, но помните несколько вещей:
Мой метод initPlayer вызывается из AsyncTask.Видео в конечном итоге воспроизводится правильно, но подготовка к немедленному возврату создает отсутствие обратной связи с пользователем во время загрузки видео.Никаких ошибок не происходит в течение всего процессаstart () вызывается на MediaPlayer через метод onPrepared в моем OnPreparedListener, который, очевидно, становится проблемой, когда prepare () возвращается до того, как он фактически будет готов к воспроизведению.HTTP-потоки работают нормально, и на каждом тестовом устройстве ниже 4.0 проблема не возникает.Я пытался исправить это в течение смешного времени, иЯ не смог найти никого, кто сталкивался с этой проблемой. Любые идеи очень приветствуются.
public void initPlayer() {
//We first need to make sure the MediaPlayer isn't null
if(mMediaPlayer==null){
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setOnPreparedListener(mediaPlayerPreparedListener);
mMediaPlayer.setOnCompletionListener(mediaPlayerCompletionListener);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
//If a video/stream has been chosen while another is already playing
else if(mMediaPlayer.isPlaying()){
mMediaPlayer.reset();
}
//Video is not in full screen mode
second = false;
try {
mMediaPlayer.setDataSource(videoString);
holder = mPreview.getHolder();
mMediaPlayer.setDisplay(holder);
mMediaPlayer.prepare();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//onPreparedListener
private OnPreparedListener mediaPlayerPreparedListener = new OnPreparedListener(){
public void onPrepared(MediaPlayer mp) {
mp.start();
vidPb.setVisibility(View.INVISIBLE);
}
};