作業中のビデオ ストリーミング アプリケーションで奇妙な問題が発生しています。ビデオ/オーディオの実際のストリーミングは、すべてのテスト デバイスで正常に動作しています。ただし、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);
}
};