android中使用MediaPlayer播放视频
16lz
2021-01-23
Android中播放视频主要有两种方式:
-
使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型
- 使用SurfaceView+MediaPlayer+seekbar,这种方式效果比较好,这里也重点介绍
-
使用android自带的VideoView,等下会简单介绍
步骤:
- 调用player.setDataSource()方法设置要播放的资源,可以是文件、文件路径、或者URL。
- 调用MediaPlayer.setDisplay(holder)设置surfaceHolder,surfaceHolder可以通过surfaceview的getHolder()方法获得。
- 调用MediaPlayer.prepare()来准备。
- 调用MediaPlayer.start()来播放视频
布局文件package com.pxd.mediaplayer;import android.media.AudioManager;import android.media.MediaPlayer;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.SurfaceView;import android.view.View;import android.widget.ImageButton;import android.widget.SeekBar;import java.io.File;import java.io.IOException;public class MainActivity extends AppCompatActivity { private MediaPlayer mediaPlayer; private SeekBar seekBar; private SurfaceView sv_main_surface; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); seekBar = (SeekBar) findViewById(R.id.seekBar); sv_main_surface = (SurfaceView) findViewById(R.id.sv_main_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 play(View view) throws IOException { final ImageButton imageButton= (ImageButton) view; if(mediaPlayer==null){ mediaPlayer=new MediaPlayer(); //设置类型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); /* 得到文件路径 *//* 注:文件存放在SD卡的根目录,一定要进行prepare()方法,使硬件进行准备 */ File file = new File(String.valueOf(Environment.getExternalStorageDirectory())); try{ /* 为MediaPlayer 设置数据源 */ mediaPlayer.setDataSource(file.getAbsolutePath()+"/Movies/OPPO.mp4"); /* 准备 */ mediaPlayer.prepare(); //将播放器捕捉的画面展示到SurfaceView画面上 mediaPlayer.setDisplay(sv_main_surface.getHolder()); }catch(Exception ex){ ex.printStackTrace(); } mediaPlayer.start(); // 把图标变为暂停图标 imageButton.setImageResource(android.R.drawable.ic_media_pause); //获取音乐的总时长 int duration=mediaPlayer.getDuration(); //设置进度条的最大值为音乐总时长 seekBar.setMax(duration); new MyThread().start(); }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); } } }}
第一种方式基本就这样可以实现啦<?xml version="1.0" encoding="utf-8"?>
package com.pxd.mediaplayer;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.MediaController;import android.widget.VideoView;import java.io.File;public class VideoActivity extends AppCompatActivity { private VideoView vv_main_video; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video); vv_main_video = (VideoView) findViewById(R.id.vv_main_video); //给VideoView设置播放来源 File file = new File(String.valueOf(Environment.getExternalStorageDirectory())); vv_main_video.setVideoPath(file.getAbsolutePath()+"/Movies/OPPO.mp4"); //实例化一个媒体控制器 MediaController mediaController=new MediaController(this); vv_main_video.setMediaController(mediaController); mediaController.setMediaPlayer(vv_main_video); }}
布局就是一个VideoView 我这里就不贴代码了~~~
更多相关文章
- AndroidManifest.xml文件剖析 (二)
- android中使用sqlite、复制assets下的数据库到SD卡、支持大于1M
- Android验证码倒计时实现方式总结
- Android原生方式实现夜间模式