Android mediaplayer_vadio视频

来源:互联网 发布:凸优化中科大 编辑:程序博客网 时间:2024/05/29 13:54

MainActivity .class

package cn.bgs.mediaplayer_vadio;



import java.io.File;
import java.io.IOException;


import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore.Audio.Media;
import android.app.Activity;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
 * SurfaceView->小游戏;自定义视频播放器;自定义相机(扫描二维码);
 * SurfaceView与View区别->surfaceView可以局部刷新;效率高于View
 * SurfaceHolder->SurfaceView下媒体空间->播放前载入媒体
 * 原生支持视频格式:mp4,直播流:rtsp(占用资源大)
 * 主流视频格式:直播流:m3u8(优酷);flash(webview播放)->维他蜜(vetamio);ffement
 * */
public class MainActivity extends Activity implements Callback, OnClickListener {
private Button mBtn;
private SurfaceView mSf;
private SurfaceHolder holder;
private MediaPlayer player;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
player=new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);

mBtn=(Button) findViewById(R.id.mBtn);
mSf=(SurfaceView) findViewById(R.id.mSf);
mSf.setKeepScreenOn(true);//播放的时候设置屏幕长亮
holder=mSf.getHolder();//获取holder的对象
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
//holder的回调监听
holder.addCallback(this);
mBtn.setOnClickListener(this);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
Toast.makeText(MainActivity.this, "视频准备完毕", 0).show();
player.setDisplay(holder);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub

}
@Override
public void onClick(View v) {
try {
File file=new File(Environment.getExternalStorageDirectory(), "aa.3gp");
//给播放器设置播放资源
player.setDataSource(file.getAbsolutePath());
//player.setDataSource(MainActivity.this,Uri.parse("http://tj-ctfs.ftn.qq.com/ftn_handler/a146cf137b16a6e73e7e864a5d1219169834ed82e97318dd07c1b67df12b89cf6ed29eb593386867bf98d1b1a77697a9ada6e57bbfa21a8f09732ef2913d8fca/?fname=aa.3gp&k=0365653532e5bbc909e06f70146557190e505551065c5453155c510d064851500c0048570607501b08555007060352555c53520732636557594b5652426558&fr=00&&txf_fid=a0af8ead9f85f0333550585dc54f7e541f56f09c&xffz=2195456"));
player.setOnPreparedListener(new OnPreparedListener() {

@Override
public void onPrepared(MediaPlayer mp) {
player.start();
}
});
player.prepareAsync();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//程序退出时播放停止
player.stop();
}

}


XML

activity_main.XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
<Button 
   android:id="@+id/mBtn"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:text="播放"
   />
<SurfaceView 
   android:id="@+id/mSf"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   />
</LinearLayout>