Android开发之视频播放

这篇博客介绍了如何在Android应用中实现视频播放功能,主要利用MediaPlayer类和SurfaceView组件。通过设置布局文件和Java代码,实现了视频的播放、暂停、重置和停止等操作。
摘要由CSDN通过智能技术生成
Android中视频播放可以参照音频的播放,同样是用到MediaPlayer这个类,以及有关摄像头操作的SurfaceView组件,布局文件如下:
Android开发之视频播放
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@android:color/white"
    android:weightSum="1">
    <EditText  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center"
    android:text="oppo.mp4"
    android:id="@+id/txt_name"
    />
     
    <LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"  
    >
    <ImageButton  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/play"
    android:id="@+id/btn_play" 
    />
    <ImageButton  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/pause"
    android:id="@+id/btn_pause" 
    />
    <ImageButton  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/reset"
    android:id="@+id/btn_reset" 
    />
    <ImageButton  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/stop"
    android:id="@+id/btn_stop" 
    />
    </LinearLayout>
     
    <SurfaceView 
    android:layout_width="fill_parent" 
    android:layout_height="240dip" 
    android:layout_weight="0.37"
    android:id="@+id/surfaceView" 
    />
</LinearLayout>
布局文件不用过多解释,现在来看VideoActivity.java中的代码
public class VideoActivity extends Activity {
private EditText txt_name;
private ImageButton btn_play;
private ImageButton btn_pause;
private ImageButton btn_reset;
private ImageButton btn_stop;
private String fileName;
private SurfaceView surfaceView;
private MediaPlayer mediaPlayer;
private int position;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mediaPlayer = new MediaPlayer();
        txt_name = (EditText) findViewById(R.id.txt_name);
        btn_play = (ImageButton) findViewById(R.id.btn_play);
        btn_pause = (ImageButton) findViewById(R.id.btn_pause);
        btn_reset = (ImageButton) findViewById(R.id.btn_reset);
        btn_stop = (ImageButton) findViewById(R.id.btn_stop);
        surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
        surfaceView.getHolder().setFixedSize(176, 144);//设置视频像素值
        surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        surfaceView.getHolder().addCallback(new Callback() {
    public void surfaceDestroyed(SurfaceHolder holder) {//Activity挂起的时候surfaceView会被摧毁       position = mediaPlayer.getCurrentPosition();
  mediaPlayer.stop();
}
    public void surfaceCreated(SurfaceHolder holder) {//Activity resume后的surfaceView会被创建
if(position>0){
try {
play();
mediaPlayer.seekTo(position);
} catch (IOException e) {
Log.e(TAG, e.toString());
}
   
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {
}
});
        VedioListener listener = new VedioListener();
        btn_play.setOnClickListener(listener);
        btn_pause.setOnClickListener(listener);
        btn_reset.setOnClickListener(listener);
        btn_stop.setOnClickListener(listener);
        Log.i(TAG, "onCreate()");  
    }
    private final class VedioListener implements View.OnClickListener{
public void onClick(View v) {
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
//如果SD卡不存在,则返回
Toast.makeText(VideoActivity.this, R.string.sdcarderror, 1);
return;
}
fileName = txt_name.getText().toString();
ImageButton button = (ImageButton)v;
try {
switch(v.getId()){
case R.id.btn_play:
play();
    break;
case R.id.btn_pause:
if(mediaPlayer.isPlaying()){
mediaPlayer.pause();
}else{
mediaPlayer.start();
}
break;
case R.id.btn_reset:
if(mediaPlayer.isPlaying()){
mediaPlayer.seekTo(0);
}else{
play();
}
break;
case R.id.btn_stop:
if(mediaPlayer.isPlaying()){
mediaPlayer.stop();
}
break;
}
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
    }

private void play() throws IOException {
    File videoFile = new File(Environment.getExternalStorageDirect ory(), fileName);
mediaPlayer.reset();//重置为初始状态
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDisplay(surfaceView.getHolder());
mediaPlayer.setDataSource(videoFile.getAbsolutePath());
mediaPlayer.prepare();//缓冲
mediaPlayer.start();//播放
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值