播放视频的两种方式:
使用VideoView播放视频(方便,推荐)
使用MediaPlayer和SurfaceView播放视频(早期的方式)
第一种方式:
使用VideoView播放视频的步骤如下:
在界面布局文件中定义VideoView组件,或在程序中创建VideoView组建
调用VideoView的如下两个方法加载指定视频
setVideoPath(String paht):加载path文件所代表的视频
setVideoURI(URI uri):加载uri所对应的视频
调用VideoVIew的start(),stop(),pause()方法来控制视频播放
MediaContraller类
与VideoView一起结合使用的还有一个MediaContraller类,它的作用时提供一个友好的图形控制界面,通过该控制界面来控制视频的播放,快进键,暂停键,后退键以及播放进度
条都是该类提供
例子代码:
xml布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 定义VideoView播放视频 -->
<VideoView
android:id="@+id/video"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
Activity:
import java.io.File;
import android.app.Activity;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.widget.MediaController;
import android.widget.VideoView;
public class VedioViewTest extends Activity {
VideoView videoView;
MediaController mController;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.main);
// 获取界面上VideoView组件
videoView = (VideoView) findViewById(R.id.video);
// 创建MediaController对象
mController = new MediaController(this);
File video = new File("/mnt/sdcard/movie.mp4");
if (video.exists()) {
videoView.setVideoPath(video.getAbsolutePath()); //①
// 设置videoView与mController建立关联
videoView.setMediaController(mController); //②
// 设置mController与videoView建立关联
mController.setMediaPlayer(videoView); //③
// 让VideoView获取焦点
videoView.requestFocus();
}
}
}
第二种方式:
使用MediaPlayer播放视频的步骤如下:
创建MediaPlayer对象,并让它加载指定的视频文件
在界面布局文件中定义SurfaceView组件,或在程序中创建SurfaceView组件,并为SurfaceView的SurfaceView的SurfaceHolder增加Callback监听器
调用 MediaPlayer对象的setPisplay(SurfaceHolder sh):将所播放的视频图像输出到指定的SurfaceView组件
调用MediaPlayer对象的start(),stop(),和pause()方法来控制视频的播放
例子代码:
xml布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="360dp"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="center_horizontal">
<ImageButton
android:id="@+id/play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/play"
/>
<ImageButton
android:id="@+id/pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pause"
/>
<ImageButton
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/stop"
/>
</LinearLayout>
</RelativeLayout>
Activity:
import java.io.IOException;
import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.ImageButton;
public class SurfaceViewPlayVideo extends Activity
implements OnClickListener
{
SurfaceView surfaceView;
ImageButton play, pause, stop;
MediaPlayer mPlayer;
// 记录当前视频的播放位置
int position;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取界面中的3个按钮
play = (ImageButton) findViewById(R.id.play);
pause = (ImageButton) findViewById(R.id.pause);
stop = (ImageButton) findViewById(R.id.stop);
// 为3个按钮的单击事件绑定事件监听器
play.setOnClickListener(this);
pause.setOnClickListener(this);
stop.setOnClickListener(this);
// 创建MediaPlayer
mPlayer = new MediaPlayer();
surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
// 设置播放时打开屏幕
surfaceView.getHolder().setKeepScreenOn(true);
surfaceView.getHolder().addCallback(new SurfaceListener());
}
@Override
public void onClick(View source)
{
try
{
switch (source.getId())
{
// 播放按钮被单击
case R.id.play:
play();
break;
// 暂停按钮被单击
case R.id.pause:
if (mPlayer.isPlaying())
{
mPlayer.pause();
}
else
{
mPlayer.start();
}
break;
// 停止按钮被单击
case R.id.stop:
if (mPlayer.isPlaying()) mPlayer.stop();
break;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void play() throws IOException
{
mPlayer.reset();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
// 设置需要播放的视频
mPlayer.setDataSource("/mnt/sdcard/movie.3gp");
// 把视频画面输出到SurfaceView
mPlayer.setDisplay(surfaceView.getHolder()); //①
mPlayer.prepare();
// 获取窗口管理器
WindowManager wManager = getWindowManager();
DisplayMetrics metrics = new DisplayMetrics();
// 获取屏幕大小
wManager.getDefaultDisplay().getMetrics(metrics);
// 设置视频保持纵横比缩放到占满整个屏幕
surfaceView.setLayoutParams(new LayoutParams(metrics.widthPixels
, mPlayer.getVideoHeight() * metrics.widthPixels
/ mPlayer.getVideoWidth()));
mPlayer.start();
}
private class SurfaceListener implements SurfaceHolder.Callback
{
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height)
{
}
@Override
public void surfaceCreated(SurfaceHolder holder)
{
if (position > 0)
{
try
{
// 开始播放
play();
// 并直接从指定位置开始播放
mPlayer.seekTo(position);
position = 0;
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder)
{
}
}
// 当其他Activity被打开,暂停播放
@Override
protected void onPause()
{
if (mPlayer.isPlaying())
{
// 保存当前的播放位置
position = mPlayer.getCurrentPosition();
mPlayer.stop();
}
super.onPause();
}
@Override
protected void onDestroy()
{
// 停止播放
if (mPlayer.isPlaying()) mPlayer.stop();
// 释放资源
mPlayer.release();
super.onDestroy();
}
}
分享到:
相关推荐
android播放视频文件源代码,有注释
Android 播放视频 源代码。可以正常运行。
android播放视频,教你怎么在项目中播放视频,很好用的示例
Android播放视频library.zip
Android播放视频的方式有三种: 一、使用意图播放,调用本地安装的播放器,选择一个进行播放。 二、使用VideoView播放(VideoView其实是对MediaPlayer的封装,使用起来很简单,但是缺少灵活性)。 三、使用...
使用Android播放视频,使用了MediaPlayer控件和SurfaceView控件,如果有看不明白的地方,请提问。注意:使用时在SD卡中添加.mp4视频文件,本例是在/storage/sdcard/中添加.mp4文件。
主要为大家详细介绍了Android播放视频的三种方式,使用其自带的播放器、VideoView、MediaPlayer类和SurfaceView来实现,感兴趣的小伙伴们可以参考一下
NULL 博文链接:https://byandby.iteye.com/blog/845125
vlc实现本地mp4或其他格式的视频播放,代码里面携带支持x86的libvlc-x86-3.1.0.aar包
Android 视频播放 开源 vitamio
播放视频外挂srt字幕,其他字幕可以自己修改一下解析方法就行了,收1分,我也是需要分的。
android视频播放android视频播放android视频播放android视频播放android视频播放android视频播放android视频播放android视频播放android视频播放android视频播放android视频播放android视频播放android视频播放...
android视频播放,利用VideoView播放视频,编译环境为AndroidStudio,如果没有该编译器可以查找单独代码文件进行查看
Android WebView播放视频开发中总结的一些经验,希望同大家分享,这个是相应的Demo,一些经验和注释都在代码中写到。
Unity3D Android播放视频-附件资源
android网络视频播放器,可截图
android 播放视频包括网络URL,asset目录下文件,本地视频文件
源码参考,欢迎下载