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);
        }
    };

Ответы на вопрос(1)

Ваш ответ на вопрос