前一段时间,需要在媒体播放器中添加对webm视频文件的支持
android 自带打开webm文件
首先确定webm库文件是否存在
cd system/lib
确认是有相应的库文件的
证明底层framwork层是支持的,不用修改底层相应文件,只用在应用层进行修改
在MimeUtils.java中添加
add("video/ts", "ts");
add("video/m2ts", "m2ts");
add("video/webm","webm");
在自定义的VideoPlayerActivity中添加:
mSubHolder.addCallback (mSHCallback); //add for webm and wmv
mSubHolder.setType (SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
/*
* add for webm and wmv video cannot display pictures.
* add by mq 2016.11.15 for adapting Amlogic android 5.1 */
SurfaceHolder.Callback mSHCallback = new SurfaceHolder.Callback() {
public void surfaceChanged (SurfaceHolder holder, int format, int w, int h) {
}
public void surfaceCreated (SurfaceHolder holder) {
mSubHolder = holder;
setMediaData();
}
public void surfaceDestroyed (SurfaceHolder holder) {
mSubHolder = null;
}
};
private void setMediaData() {
// MediaBaseInfo localMediaBaseInfo = getCurrentMediaInfo();
MediaBaseInfo info = mVideoPlayList.get(mVedioPlayPos);
if (info == null || TextUtils.isEmpty(info.getData())) {
return;
}
resetPlayer();
mMediaPlayer.reset();
try {
mMediaPlayer.setDataSource(info.getData());
mMediaPlayer.setOnPreparedListener(onPreparedListener);
mMediaPlayer.prepareAsync();
mMediaPlayer.setOnCompletionListener(mOncompletionListener);
mMediaPlayer.setOnSeekCompleteListener(onSeekCompletionListener);
mMediaPlayer.setDisplay(mSubHolder); //add for some webm and wmv video cannot display pictures
// mMediaPlayer.setOnErrorListener(mOnErrorListener);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
vVedioName.setText(info.getDisplayName());
}
加入SurfaceHolder是为了解决播放视频时有声音无图像问题