昨天介绍了VideoView播放视频,今天再介绍一种播放视频的方法MediaPlayer和SurfaceView,MediaPlayer播放音频,SurfaceView来显示图像,具体步骤如下:

1、创建MediaPlayer对象,并让它加载指定的视频文件。

2、在界面布局中定义SurfaceView组件,或在程序中创建SurfaceView组件,并为SurfaceView的SurfaceHolder添加Callback监听器。

3、调用MediaPlayer对象的setDisplay(SurfaceHolder sh)将所播放的视频图像输出到指定的SurfaceView组件。

4、调用MediaPlayer对象的start()、stop()和pause()方法控制视频的播放。

下面直接上个实例:

 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自己不管理的缓冲区
surfaceView.getHolder().setType(
SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// 设置播放时打开屏幕
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();
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 MediaPlayer和SurfaceView播放视频的更多相关文章

  1. 使用MediaPlayer和SurfaceView播放视频

    使用VideoView播放视频简单.方便,丹有些早期的开发者更喜欢使用MediaPlayer来播放视频,但由于MediaPlayer主要用于播放音频,因此它没有提供图像输出界面,此时 需要借助于Sur ...

  2. android中使用MediaPlayer和SurfaceView播放视频

    package com.test.video; import java.io.IOException; import android.media.AudioManager; import androi ...

  3. android 98 MediaPlayer+SurfaceView播放视频

    package com.itheima.videoplayer; import java.io.IOException; import android.media.MediaPlayer; impor ...

  4. android中使用setVideoURI()播放视频

    最近在做一个demo,要求播放视频,记录一下.使用的是VideoView控件,如果播放网络视频的话,视频应该是渐进流式的,格式嘛,大家应该都知道,一般是H.263或者H.264格式的扩展名为3gp或者 ...

  5. Android SurfaceView播放视频时横竖屏的调整

    对于横屏录制的视频就横屏播放,对于竖屏录制的视频就竖屏播放. 在mainifest文件里对负责播放的Activity添加以下属性“ android:configChanges="orient ...

  6. Android中使用VideoView 播放视频

    VideoView一般结合MediaController类使用,它会提供一个友好的图形界面,通过该界面可以控制视频的播放 package com.test.videoview; import andr ...

  7. Android MediaPlayer 和 NativePlayer 播放格式控制

    对于本机MediaPlayer 支持格型式试验: 对于原生 NativeMedia 的支持格式測试: 这个支持就比較失望了,眼下測试的手机仅仅支持 H.264视频及AAC音频,其他的格式都不支持. 使 ...

  8. 183使用 MediaPlayer Framework 框架播放视频

    效果如下: ViewController.h #import <UIKit/UIKit.h> #import <MediaPlayer/MediaPlayer.h> @inte ...

  9. 使用MediaPlayer类和SurfaceView来播放视频

    MediaPlayer可以播放视频,只需需要SurfaceView的配合,SurfaceView主要用于显示MediaPlayer播放的视频流媒体的画面渲染. SurfaceView是配合MediaP ...

随机推荐

  1. HTML5 UI框架Kendo UI Web教程:创建自定义组件(三)

    Kendo UI Web包 含数百个创建HTML5 web app的必备元素,包括UI组件.数据源.验证.一个MVVM框架.主题.模板等.在前面的2篇文章<HTML5 Web app开发工具Ke ...

  2. stack overflow--技术问答网站

    转自:http://baike.baidu.com/link?url=eMR6Pwdk9IkauI5B3nZb2Yo3VUAcK6vQfrMpcSMPWqgH0ngqFkup3Gdr3t_s_yZe_ ...

  3. asp.net关于页面不回发,不生成__doPostBack方法问题的完美解决方案

    1.有可能是使用net4.0+iis6之后没有打补丁.解决办法在IE10中登录我公司的一个网站时,点击其它菜单,页面总会自动重新退出到登录页,后检查发现,IE10送出的HTTP头,和.AUTH Coo ...

  4. Centos7下安装配置Redsocks

    Redsocks是一个开源的网络程序,代码依赖开源的libevent网络库.Redsocks允许你将所有TCP连接重定向到SOCKS或HTTPS代理,比如Shadowsocks(Centos7下安装配 ...

  5. Android 内存泄漏总结

    内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题.内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收 ...

  6. python学习之安装模块

    安装pip下载python模块 yum -y install python-pip pip install pandas (pandas要安装的模块名) 默认使用的官方python源,这个在国内访问很 ...

  7. Android ActionBar的基本用法

    一  说明android 3.0后出现, 在3.0之前称为Title Bar  显示位置在标题栏上可以显示应用程序的图标和activity的标题创建方式的和系统菜单相似, 区别在于: android: ...

  8. R绘图基础

    一,布局 R绘图所占的区域,被分成两大部分,一是外围边距,一是绘图区域. 外围边距可使用par()函数中的oma来进行设置.比如oma=c(4,3,2,1),就是指外围边距分别为下边距:4行,左边距3 ...

  9. Writing Text Files On The Client in Oracle Forms 10g

    Below is the example to write file on client in Oracle Forms 10g with webutil library package.Note:  ...

  10. 深入浅出设计模式——原型模式(Prototype Pattern)

    模式动机在面向对象系统中,使用原型模式来复制一个对象自身,从而克隆出多个与原型对象一模一样的对象.在软件系统中,有些对象的创建过程较为复杂,而且有时候需要频繁创建,原型模式通过给出一个原型对象来指明所 ...