8

作業中のビデオ ストリーミング アプリケーションで奇妙な問題が発生しています。ビデオ/オーディオの実際のストリーミングは、すべてのテスト デバイスで正常に動作しています。ただし、4.0 以降のデバイスでは、RTSP URL を使用すると、prepare() が即座に返されます (これにより、ビデオの読み込み中にユーザーに適切なフィードバックを提供する問題が発生し、私が配置している他のいくつかのシステムに干渉します)。

以下は、MediaPlayer を初期化してセットアップするコード ブロックですが、いくつかの点に注意してください。

  • 私の initPlayer メソッドは AsyncTask から呼び出されます。
  • ビデオは最終的に正しく再生されますが、すぐに戻る準備をすると、ビデオの読み込み中にユーザーへのフィードバックが不足します。
  • プロセス全体でいかなる種類のエラーも発生しません
  • start() は、私の OnPreparedListener の onPrepared メソッドを介して MediaPlayer で呼び出されます。これは、実際に再生する準備が整う前に 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);
        }
    };
4

1 に答える 1