Introduction

Customized PlayerThis article interpret how to implement a customized video player instead of the UI of android’s MediaController and how to handle error of android’s MediaPlayer to enable it continue replaying from the last position after reset the engine of media player

Background

I have googled lots of open source player for android, unfortunately almost all of the players are just for music but not for video, audio isn’t easy to play failed compared with video, I implement the customized player to enable developer easy to modify controller UI of media player and pay attention to the drawback of VideoView control provided by Android

Using the code

Android provide MediaPlayer and VideoView/MediaController to create player, but if dislike the UI and hope to redesign a player to enable it increasing more features such as adjusting volume or full screen , you can refer to my customized player code , it include 3 files, MediaControllerEx.java, VideoViewEx.java, PlayerActivity.java, MediaControllerEx.java implement the controller UI layout for player,if you want to adjust the SeekBar height, you should replace the default style with your customized style.

// layout your own UI for controller

protected View makeControllerView() {

LayoutInflater inflate = (LayoutInflater) mContext

.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

mRoot = inflate.inflate(R.layout.media_controller_view, null);

initControllerView(mRoot);

return mRoot;

}

//SeekBar style for controller

<style name="player_seekbar">

<item name="android:indeterminateOnly">false</item>

<item name="android:progressDrawable">@drawable/seekbar_style_drawable</item>

<item name="android:indeterminateDrawable">@drawable/seekbar_style_drawable</item>

<item name="android:minHeight">10dip</item>

<item name="android:maxHeight">10dip</item>

<item name="android:thumb">@drawable/controller_playhead_drawable</item>

<item name="android:thumbOffset">8px</item>

<item name="android:focusable">true</item>

</style>

//assign the seek position when setting video path in VideoViewEx.java

public void setVideoPath(String path,int position) {

setVideoURI(Uri.parse(path),position);

}

/**

* The MediaPlayer often change to error state when playing video,and then prompt "can't play this video" dialog, so you have to handle these error via remembering the played time and replaying video after reset MediaPlayer engine

*/

private MediaPlayer.OnErrorListener mOnErrorListener = new MediaPlayer.OnErrorListener() {

public boolean onError(MediaPlayer mp, int what, int extra) {

switch (what) {

case MediaPlayer.MEDIA_ERROR_SERVER_DIED:

Toast.makeText(PlayerActivity.this, "MEDIA_ERROR_SERVER_DIED",

Toast.LENGTH_SHORT).show();

showErrorDlg(what);

return true;

case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:

Toast.makeText(PlayerActivity.this,

"MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK",

Toast.LENGTH_SHORT).show();

break;

case MediaPlayer.MEDIA_ERROR_UNKNOWN:

Toast.makeText(PlayerActivity.this, "MEDIA_ERROR_UNKNOWN",

Toast.LENGTH_SHORT).show();

break;

}

setProgressContainer(true, getString(R.string.msg_handle_error));

int position=mVideoView.getCurrentPosition();

if(position>0){

mCurPosition=position;

}

mVideoView.setVideoPath(mCurrentMediaUrl,position);

return true;

}

};

Points of Interest

My interest includes streaming player, decoder/encoder/demuxer of android's openCore media framework

History

CustomizedPlayer 0.1 version.

备注:懒得用中文再描述一遍,需要继续完善的地方是如何在播放过程中有相应的提示信息(如正在缓冲,网络断线,出错处理等)

  • Download Customized Player

更多相关文章

  1. android语音识别和语音播报相关资料总结
  2. android:ImageView,访问网上图片并显示出来
  3. Android(安卓)中文字符转UTF-8编码
  4. android sqlite 中文乱码。。麻烦详细点
  5. Android(安卓)OpenGL之生成FloatBuffer
  6. Android流式播放MP3
  7. Android,HTTP请求中文乱码
  8. Android(安卓)串口数据处理
  9. Android中文翻译组 - 简介

随机推荐

  1. Android DatePicker和TimePicker实践
  2. linux系统和android系统的区别
  3. Android面试题精选,自己收藏下
  4. androidstudio搭建flutter环境,遇到的问题
  5. Android中的soundpool小结
  6. Android开发学习:ImageView的scaletype属
  7. android调用Webservice方法
  8. eclipse导入已存在的android工程时遇到An
  9. android简易画图板与五子棋
  10. Android中LocationManager的简单使用,获