在VideoView.java中提供了视频播放的实例。视频播放和音频播放一样都是通过MediaPlayer来实现的。
为了进行视频播放,必须设置数据源、音频流类型等,以加载不同的解码器和采用相应的音频冲突策略。为了捕捉到视频播放中的各种消息,需要设置不同的监听器。
MediaPlayer的常用方法包括:
SipManager用于初始化SIP链接和接入SIP服务等。能够创建SIP会话。比较常用的方法包括:
setDataSource() //设置数据源
getVideoHeight() //获得视频高度
getVideoWidth() //获得视频宽度
getDuration() //获得时长
getCurrentPosition() //获得当前位置
setVolume() //设置音量
start() //开始播放
stop() //停止播放
seekto() //定位
setAudioSessionId() //设置音频会话ID
try {
mMediaPlayer=new MediaPlayer(); //创建MediaPlayer
//设置监听器
mMediaPlayer.setOnPreparedListener(mPreparedListener);
mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener);
mDuration=-1;
mMediaPlayer.setOnCompletionListener(mCompletionListener);
mMediaPlayer.setOnErrorListener(mErrorListener);
mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener);
mCurrentBufferPercentage=0;
//设置数据源
mMediaPlayer.setDataSource(mContext, mUri);
mMediaPlayer.setDisplay(mSurfaceHolder);
//设置音频流类型
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.工补农 setScreenOnWhilePlaying(true);
mMediaPlayer.prepareAsync();
mCurrentState=STATE_PREPARING;
attachMediaController();
mMediaPlayer.start();
mCurrentState=STATE_PLAYING;
}
catch (IOException ex) {
Log.w(TAG, "Unable to open content: " + mUri, ex);
mCurrentState=STATE_ERROR;
mTargetState=STATE_ERROR;
mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0);
return;
}
catch (IllegalArgumentException ex) {
Log.w(TAG, "Unable to open content: " + mUri, ex);
mCurrentState=STATE_ERROR;
mTargetState=STATE_ERROR;
mErrorListener.onError(mMediaPlayer, MediaPlayer.MEDIA_ERROR_UNKNOWN, 0);
return;
}
…
视频播放的原生接口位于android_media_MediaPlayer.cpp文件中。