本文实例为大家分享了视频播放器的两种方式,供大家参考,具体内容如下
1)、SurfaceView
在布局文件中
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_media_play" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context="com.zking.android_contentresolve.MediaPlayActivity"> <SurfaceView android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/sv_media_surface" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <SeekBar android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/seekBar" android:layout_weight="1" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/ic_media_play" android:onClick="isPlayOrPause" /> </LinearLayout></LinearLayout>
在Activity里面和播放内存卡上音乐的代码差不多,只是视频多了个显示内容,关键代码就是这三条
//播放内存上的视频mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Movies/sister.mp4"));
//准备(内存卡)mediaPlayer.prepare();
//将媒体播放器捕捉的画面展示在SurfaceView 上mediaPlayer.setDisplay(sv_media_surface.getHolder());
但是没看前面博客的筒子可能会觉得看不懂,所以还是把完整的代码粘贴出来
public class MediaPlayActivity extends AppCompatActivity {
private SeekBar seekBar;
private MediaPlayer mediaPlayer;
private SurfaceView sv_media_surface;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_media_play);
seekBar = (SeekBar) findViewById(R.id.seekBar);
sv_media_surface = (SurfaceView) findViewById(R.id.sv_media_surface);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override public void onStopTrackingTouch(SeekBar seekBar) {
//获取拖动结束后的位置 int progress=seekBar.getProgress();
//跳转到某个位置播放 mediaPlayer.seekTo(progress);
}
}
);
}
public void isPlayOrPause(View view){
final ImageButton imageButton= (ImageButton) view;
if(mediaPlayer==null){
//代表第一次播放音乐 //播放内存卡内的音频 mediaPlayer=new MediaPlayer();
//设置类型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//设置音源 try {
//播放内存上的视频 mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Movies/sister.mp4"));
//准备(内存卡) mediaPlayer.prepare();
//将媒体播放器捕捉的画面展示在SurfaceView 上 mediaPlayer.setDisplay(sv_media_surface.getHolder());
//必须在播放前加载音频文件(异步准备)// mediaPlayer.prepareAsync();
}
catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
//把图标改成暂停的图标(这里的暂停图标就是播放时的状态) imageButton.setImageResource(android.R.drawable.ic_media_pause);
//获取音乐的总时长 int duration=mediaPlayer.getDuration();
//设置进度条的最大值为音乐的总时长 seekBar.setMax(duration);
new MyThread();
}
else if(mediaPlayer.isPlaying()){
//正在播放音乐 mediaPlayer.pause();
//把图标改成播放的图标(暂停状态) imageButton.setImageResource(android.R.drawable.ic_media_play);
}
else{
mediaPlayer.start();
imageButton.setImageResource(android.R.drawable.ic_media_pause);
}
}
class MyThread extends Thread{
@Override public void run() {
super.run();
while(seekBar.getProgress()<seekBar.getMax()){
//获取当前音乐播放的位置 int currentPosition=mediaPlayer.getCurrentPosition();
//让进度条跟着时间走 seekBar.setProgress(currentPosition);
}
}
}
}
2)、VideoView,如果在项目中,仅仅只是播放视频的话,这种方式会比较简单,但是如果是要做视频播放器的话,还是使用第一种方法
布局文件
<VideoView android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/vv_main_vedio" />
Activity
public class VedioActivity extends AppCompatActivity {
private VideoView vv_main_vedio;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vedio);
vv_main_vedio = (VideoView) findViewById(R.id.vv_main_vedio);
//给videoView设置播放来源 vv_main_vedio.setVideoPath("file://mnt/sdcard/Movies/sister.mp4");
//实例化媒体控制器 MediaController mediaController=new MediaController(this);
//给activity_vedio设置控制器 vv_main_vedio.setMediaController(mediaController);
mediaController.setMediaPlayer(vv_main_vedio);
}
}
VideoView通过与MediaController类结合使用,开发者可以不用自己控制播放与暂停。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。