Mam dziwny problem z aplikacją do strumieniowego przesyłania wideo, nad którą pracuję. Rzeczywiste przesyłanie wideo/audio działa dobrze na wszystkich moich urządzeniach testowych. Jednak na pozornie dowolnym urządzeniu 4.0+, gdy używa się adresu URL RTSP, prepare() zwraca natychmiast (powoduje to problem zapewniający odpowiednią informację dla użytkowników podczas ładowania wideo i przeszkadza w kilku innych systemach, które mam na miejscu).Android 4.0.4 Problem z przygotowaniem MediaPlayer przy użyciu adresów URL RTSP
Poniżej znajduje się fragment kodu, gdzie zainicjalizować i skonfigurować mój MediaPlayer, ale zachować kilka rzeczy na uwadze:
- metoda My initPlayer nazywa z AsyncTask.
- Obraz wideo ostatecznie odtwarza się poprawnie, ale natychmiastowe przygotowanie do powrotu powoduje brak informacji zwrotnej dla użytkownika podczas ładowania wideo.
- Żadne błędy nie występują podczas całego procesu
- Funkcja start() jest wywoływana w MediaPlayer za pomocą metody onPrepared w moim OnPreparedListener, co oczywiście staje się problemem, gdy prepare() zwraca, zanim będzie gotowy do odtworzenia .
- Strumienie HTTP wydają się działać dobrze, a na każdym urządzeniu testowym poniżej 4.0 problem nie występuje.
Próbowałem to naprawić przez śmieszną ilość czasu i nie byłem w stanie znaleźć nikogo innego, kto wpadł na ten problem. Wszelkie pomysły będą mile widziane.
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);
}
};
Jestem stoi ten sam problem teraz. Czy rozwiązałeś problem? jeśli tak, proszę odpowiedzieć na pytanie z rozwiązaniem. Czekanie...!!! –
Jakieś rozwiązanie? –
Niestety, nigdy nie znalazłem rozwiązania, chociaż przestałem pracować nad tym projektem jakiś czas temu. – bread