您的位置:首页 > 移动开发 > Android开发

Android 通过VideoView+MediaPlayer实现视频播放

2017-02-16 11:23 1201 查看
现实视频播放有两种方法,第一种是利用了VideoView来实现的,第二种是MediaPlayer和SurfaceView实现。

第一种方法

运行效果如下:



在清单文件(AndroidManifest.xml)要加入读取内存卡的权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.g150825_android11_zuoye">

<!--添加使用内存卡的权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

<application android:allowBackup="true"       android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme">
<activity android:name=".VodeoPlayActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>


布局文件 action_local_video.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_local_video"
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"
tools:context="com.example.g150825_android11_zuoye.LocalVideoActivity">

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="300dp">
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent"      />
</RelativeLayout>

</RelativeLayout>


Java代码(LocalVideoActivity)

public class LocalVideoActivity extends AppCompatActivity {
private VideoView videoView ;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_local_video);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);   //全屏
//本地的视频 需要在手机SD卡根目录添加一个 fl1234.mp4 视频
//        String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath();
String videoUrl1 = Environment.getExternalStorageDirectory().getAbsolutePath()+"/storage/emulated/0/f11234.mp4" ;
Log.i("test","ddddddddddddd"+Environment.getExternalStorageDirectory().getPath());
Log.i("test",""+Environment.getExternalStorageDirectory().getPath());

//网络视频
// String videoUrl2 = Utils.videoUrl ;
Uri uri = Uri.parse( videoUrl1 );
videoView = (VideoView)this.findViewById(R.id.videoView );
//设置视频控制器
videoView.setMediaController(new MediaController(this));
//播放完成回调
videoView.setOnCompletionListener( new MyPlayerOnCompletionListener());
//设置视频路径
videoView.setVideoURI(uri);
// /开始播放视频
videoView.start();

}
class MyPlayerOnCompletionListener implements MediaPlayer.OnCompletionListener {
@Override    public void onCompletion(MediaPlayer mp) {
Toast.makeText( LocalVideoActivity.this, "播放完成了", Toast.LENGTH_SHORT).show();
}
}

public class Utils {
public static final String videoUrl = "http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" ;
}
}


第二种方法

运行效果如下:


Java代码(SurefaceViewActivity)

package com.example.g150825_android27;

import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Environment;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.ImageButton;
import android.widget.SeekBar;

import java.io.IOException;

public class SurefaceViewActivity extends AppCompatActivity {

private ImageButton ib_main_imagebutton;
private MediaPlayer mediaPlayer;
private SeekBar sb_main_bar;
private boolean isPlay=false;
private MyThread myThread;
private SurfaceView sv_sureface;
private SurfaceHolder surfaceHolder;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sureface_view);
ib_main_imagebutton = (ImageButton) findViewById(R.id.ib_main_imagebutton);
sb_main_bar = (SeekBar) findViewById(R.id.sb_main_bar);

sv_sureface = (SurfaceView) findViewById(R.id.sv_sureface);
surfaceHolder = sv_sureface.getHolder();
//给进度条设置监听
sb_main_bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
//获取SeekBar拖动之后的进度
int progress=seekBar.getProgress();
//跳转到某个位置播放
mediaPlayer.seekTo(progress);

}
});
}
public void isPlayPause(View view){
//1.开始播放
if(mediaPlayer==null) {
isPlay=true;
//播放应用内(raw文件)
//          mediaPlayer = MediaPlayer.create(this, R.raw.sqbm);
//播放手机内存卡
//判断是否有无内存卡
//         if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//得到内存卡的根目录
// String saPath=Environment.getExternalStorageDirectory().getAbsolutePath();
// String musicPath=saPath+"/Music/薛之谦 - 丑八怪.mp3";
//实例化
mediaPlayer=new MediaPlayer();
//设置音频流的类型
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//设置音源
try {
mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/啊啊/aaa.mp4"));
//播放网络音乐
//            mediaPlayer.setDataSource(this, Uri.parse("http://192.168.0116:8080/music.mp3"));
//设置显卡
mediaPlayer.setDisplay(surfaceHolder);

//准备(内存卡)
mediaPlayer.prepare();
//                //异步准备(播放网络音乐)
//                mediaPlayer.prepareAsync();

} catch (IOException e) {
e.printStackTrace();
}

//准备完成的监听

mediaPlayer.start();
//2.改变图标(暂停)
ib_main_imagebutton.setImageResource(android.R.drawable.ic_media_pause);
//4.获取到音乐播放总时长
int lengthOfTime=mediaPlayer.getDuration();
sb_main_bar.setMax(lengthOfTime);
//6.开启线程
myThread = new MyThread();
myThread.start();

//设置媒体播放器的监听
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
//音乐播放完成
isPlay=false;
myThread=null;
ib_main_imagebutton.setImageResource(android.R.drawable.ic_media_play);
sb_main_bar.setProgress(0);
}
});
//     }
}else if (mediaPlayer.isPlaying()){
isPlay=false;
mediaPlayer.pause();
//3.改变图标(播放)
ib_main_imagebutton.setImageResource(android.R.drawable.ic_media_play);
myThread=null;
}else {
isPlay=true;
mediaPlayer.start();
//2.改变图标(暂停)
ib_main_imagebutton.setImageResource(android.R.drawable.ic_media_pause);
myThread = new MyThread();
myThread.start();
}
}
//5.线程
class MyThread extends Thread{
@Override
public void run() {
super.run();
while(sb_main_bar.getProgress()<=sb_main_bar.getMax()){
//得到音乐当前播放的位置
int currentPosition=mediaPlayer.getCurrentPosition();
Log.i("test","currentPosition="+currentPosition);
//设置进度条的进度
sb_main_bar.setProgress(currentPosition);
//一秒走一次
SystemClock.sleep(1000);

if (!isPlay){
break;
}
}
}
}
}


布局文件(activity_sureface_view.xml)

<?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:layout_width="match_parent" android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1"
tools:context="com.example.g150825_android27.SurefaceViewActivity">

<SurfaceView
android:layout_width="360dp"
android:layout_height="300dp"
android:id="@+id/sv_sureface"
/><
a089
/span>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>

<SeekBar
android:layout_width="300dp"
android:layout_height="wrap_content"
android:id="@+id/sb_main_bar"
android:layout_gravity="center_vertical"

/>
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/ic_media_play"
android:id="@+id/ib_main_imagebutton"
android:onClick="isPlayPause"
/>
</LinearLayout>

</LinearLayout>


清单文件配置读取内存卡权限即可:

<!-- 读取内存卡的权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: