Android 4.0.4 MediaPlayer przygotowuje wydanie przy użyciu adresów URL RTSP

Mam dziwny problem z aplikacją do przesyłania strumieniowego wideo, nad którą pracuję. Rzeczywista transmisja 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, preparat () zwraca natychmiast (powoduje to problem z przekazywaniem użytkownikom odpowiednich informacji podczas ładowania wideo i zakłóca działanie kilku innych systemów, które mam na swoim miejscu).

Poniżej znajduje się blok kodu, w którym inicjuję i konfiguruję MediaPlayer, ale pamiętaj o kilku rzeczach:

Moja metoda initPlayer jest wywoływana z AsyncTask.Film ostatecznie gra poprawnie, ale przygotowanie powrotu natychmiast powoduje brak informacji zwrotnej dla użytkownika podczas ładowania wideo.Podczas całego procesu nie występują żadne błędystart () jest wywoływany w MediaPlayer za pomocą metody onPrepared w moim OnPreparedListener, co oczywiście staje się problemem, gdy preparat prepare () powraca przed faktycznym przygotowaniem do odtworzenia.Strumienie HTTP wydają się działać poprawnie, 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 udało mi się znaleźć nikogo, kto wpadłby w ten problem. Wszelkie pomysły byłyby bardzo 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);
        }
    };

questionAnswers(1)

yourAnswerToTheQuestion