Android - SurfaceView+MediaPlayer、VideoView 2种方法播放视频
2017-02-13 23:08
816 查看
Android当中实现视频播放的方式有两种,即:通过VideoView实现或者通过SurfaceView + MediaPlayer实现。
首先为大家介绍SurfaceView+MediaPlayer播放视频的方法,这种方法和我的上一篇博文播放音频差不多,只是需要将媒体播放捕捉的画面展示到surfaceView控件上即可,加一句代码即可
xml文件代码,这里点击imageButton开始播放视频,需要定义一个SurfaceView用来放视频
Activity代码,我这里是播放内存卡里的视频,
下面为大家介绍VideoView播放视频的方法
xml文件代码,这里只需要定义一个VideoView控件
Activity代码,同上,也是播放内存卡里的视频文件
VideoView这种方法明显要简单很多,如果想自己写一个播放器,可以用SurfaceView+MediaPlayer的方法
如果觉得有用的话就点个赞吧
首先为大家介绍SurfaceView+MediaPlayer播放视频的方法,这种方法和我的上一篇博文播放音频差不多,只是需要将媒体播放捕捉的画面展示到surfaceView控件上即可,加一句代码即可
mediaPlayer.setDisplay(media_player_surfaceView.getHolder());
与VideoView的不同点就是需要自己定义进度条和暂停按钮
xml文件代码,这里点击imageButton开始播放视频,需要定义一个SurfaceView用来放视频
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_media_player" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <!--放视频的surfaceView--> <SurfaceView android:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/media_player_surfaceView"/> <LinearLayout android:layout_marginTop="10dp" android:layout_width="match_parent" android:layout_height="wrap_content">
<!--进度条可以调节进度--> <SeekBar android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/media_player_seekBar" />
<!--暂停和播放按钮--><ImageButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@android:drawable/ic_media_play"android:onClick="playpause"/> </LinearLayout></LinearLayout>
Activity代码,我这里是播放内存卡里的视频,
package com.zking.a24provider; import android.content.Intent; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; 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.IOException; public class MediaPlayerActivity extends AppCompatActivity { private SeekBar media_player_seekBar; private MediaPlayer mediaPlayer; private SurfaceView media_player_surfaceView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_media_player); media_player_seekBar = (SeekBar) findViewById(R.id.media_player_seekBar); media_player_surfaceView = (SurfaceView) findViewById(R.id.media_player_surfaceView); //给进度条设置拖动改变监听事件,必须是在拖动结束后设置 media_player_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=media_player_seekBar.getProgress(); //跳转到某个位置播放 mediaPlayer.seekTo(progress); } }); } //播放或暂停按钮点击事件 public void playpause(View view){ final ImageButton button_play=(ImageButton) view; if(mediaPlayer==null){ //1.播放应用内音频文件 //mediaPlayer = MediaPlayer.create(this, R.raw.love); //2.播放内存卡中音频文件 mediaPlayer=new MediaPlayer(); //设置类型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //设置音频 try {
//内存卡里的一个视频 mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/i音乐/我的下载/VID_20161002_194913.mp4")); //准备一下 mediaPlayer.prepare(); //将媒体播放捕捉的画面展示到surfaceView mediaPlayer.setDisplay(media_player_surfaceView.getHolder());
} catch (IOException e) { e.printStackTrace(); }
//开始mediaPlayer.start(); //把图标修改为暂停的图标 button_play.setImageResource(android.R.drawable.ic_media_pause); //获取音乐的总时长 int duration=mediaPlayer.getDuration(); //设置进度条的最大值为音乐的总时长 media_player_seekBar.setMax(duration); //使用线程让进度条动起来 new MyThread().start(); }else if(mediaPlayer.isPlaying()){ mediaPlayer.pause(); //把图标修改为播放的图标 button_play.setImageResource(android.R.drawable.ic_media_play); }else{ mediaPlayer.start(); //把图标修改为暂停的图标 button_play.setImageResource(android.R.drawable.ic_media_pause); } } class MyThread extends Thread{ @Override public void run() { super.run(); while (media_player_seekBar.getProgress()<=media_player_seekBar.getMax()){ //获取当前音乐播放的位置 int currentPosition=mediaPlayer.getCurrentPosition(); //让进度条动起来 media_player_seekBar.setProgress(currentPosition); } } }}
下面为大家介绍VideoView播放视频的方法
xml文件代码,这里只需要定义一个VideoView控件
<?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_vedio" 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.a24provider.VideoActivity"> <VideoViewandroid:layout_width="match_parent" android:layout_height="300dp" android:id="@+id/vedio_vedioView"/> </LinearLayout>
Activity代码,同上,也是播放内存卡里的视频文件
package com.zking.a24provider; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.MediaController; import android.widget.VideoView; public class VideoActivity extends AppCompatActivity { private VideoView vedio_vedioView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video);
//先找到控件id vedio_vedioView = (VideoView) findViewById(R.id.vedio_vedioView); //给vedioView设置播放来源 vedio_vedioView.setVideoPath("file://mnt/sdcard/i音乐/我的下载/VID_20161002_194913.mp4"); //实例化媒体控制器 MediaController mediaController=new MediaController(this); vedio_vedioView.setMediaController(mediaController); mediaController.setMediaPlayer(vedio_vedioView); } }
VideoView这种方法明显要简单很多,如果想自己写一个播放器,可以用SurfaceView+MediaPlayer的方法
如果觉得有用的话就点个赞吧
相关文章推荐
- Android两种播放视频的方法(SurfaceView+MediaPlayer+SeekBar)跟(VideoView+MediaController)
- Android视频播放框架Vitamio集成及使用MediaPlayer+SurfaceView、VideoView+MediaController实现播放网络视频
- android视频播放(二) 利用android原生的MediaPlayer+SurfaceView
- Android 视频播放之MediaPlayer+SurfaceView
- Android视频播放: SurfaceView+MediaPlayer播放视频(二)
- android中使用surfaceview+MediaPlayer播放视频
- Android中使用surfaceview+MediaPlayer播放视频
- android播放视频(三)利用原生的MediaPlayer+SurfaceView之提高
- Android SurfaceView + MediaPlayer实现分段视频无缝播放
- android视频播放简单实现示例(VideoView&MediaPlayer)
- Android MediaPlayer+SurfaceView播放视频 (异常处理)
- android 随手记 videoview循环播放网络视频 和mediaplayer+sufaceview播放网络视频
- Android 使用 MediaPlayer + SurfaceView 播放视频
- Android - SurfaceView + MediaPlayer实现分段视频无缝播放
- Android SurfaceView+MediaPlayer实现视频播放
- Android MediaPlayer+SurfaceView播放视频(附Demo)
- Android SurfaceView+MediaPlayer 播放本地raw文件夹下的视频
- android下面使用SurfaceView+ mediaPlayer播放视频
- android 随手记 videoview循环播放网络视频 和mediaplayer+sufaceview播放网络视频
- Android SurfaceView+ mediaplayer 重复播放视频