一个简单的视频控制播放,使用原生控件进行视频处理,可以根据需要可以自行扩展。
效果图:
遇到的问题1:mediaPlay.setOnPreparedListener()第一次播放无法初始化问题 这个方法不知道什么情况,第二次之后就正常了。使用了异步的方法进行UI数据更新,也是不行。所以另找了方法去实现时间和seekbar拖动控制播放的功能。如果不需要控制,只是显示,就无所谓了、
解决方法:
使用mediaPlay.setOnPreparedListener()代替,内部调用setOnBufferingUpdateListener()方法进行数据更新,然后搞个线程将UI更新一下就ok了,效果还行。
代码片段(因为写demo喜欢写一起,有点乱,就先只放代码片段,需要完整的私聊发邮箱地址):
private SurfaceView surfaceview;
private MediaPlayer player;
SurfaceHolder holder;
private SeekBar video_seekbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
video_seekbar = (SeekBar) findViewById(R.id.video_seekbar);
surfaceview = (SurfaceView) findViewById(R.id.surfaceview);
video_time = (TextView) findViewById(R.id.video_time);
holder = surfaceview.getHolder();
player = new MediaPlayer();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
//开始运行时,就直接播放
Play();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
//当画面发生变化执行
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//当画面不见得时候执行
stop();
}
});
video_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Overri