android中使用MediaPlayer和SurfaceView播放视频
package com.test.video; import java.io.IOException; import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.SurfaceHolder.Callback;
import android.view.View.OnClickListener;
import android.widget.ImageButton; public class MainActivity extends Activity implements OnClickListener { private MediaPlayer player;
private SurfaceView view ;
private int position = 0;
private ImageButton paly, pause, stop;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view = (SurfaceView) findViewById(R.id.surfaceView);
player = new MediaPlayer();
paly = (ImageButton) findViewById(R.id.play);
pause = (ImageButton) findViewById(R.id.pause);
stop = (ImageButton) findViewById(R.id.stop);
// 设置SurfaceView自己不管理缓冲区
view.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// 设置播放时打开屏幕
view.setKeepScreenOn(true);
view.getHolder().addCallback(new Surfacelistener()); paly.setOnClickListener(this);
pause.setOnClickListener(this);
stop.setOnClickListener(this);
} @Override
public void onClick(View v) { try {
switch (v.getId()) {
// 单击播放按钮
case R.id.play:
play();
break;
// 暂停按钮
case R.id.pause:
if (player.isPlaying()) {
player.pause();
position = player.getCurrentPosition();
} else {
if (position > 0) player.seekTo(position);
player.start();
}
break;
// 停止按钮
case R.id.stop:
if (player.isPlaying()) {
player.stop();
}
break; default:
break;
}
} catch (Exception e) {
e.printStackTrace();
}
} private void play() throws Exception {
player.reset();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
// 设置需要播放的视频
Uri uri = Uri.parse("android.resource://com.test.video/" + R.raw.video );
player.setDataSource(this, uri);
// 把视频画面输出到SurfaceView
player.setDisplay(view.getHolder());
player.prepare();
player.start();
} private class Surfacelistener implements Callback { @Override
public void surfaceCreated(SurfaceHolder holder) {
if (position > 0) {
try {
// 开始播放
play();
// 并直接从指定位置开始播放
player.seekTo(position);
position = 0;
} catch (Exception e ) { }
}
} @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {} @Override
public void surfaceDestroyed(SurfaceHolder holder) {} } // 当其他的Activity被打开时,暂停播放
@Override
protected void onPause() {
if (player.isPlaying()) {
position = player.getCurrentPosition();
// 暂停播放
player.stop();
}
super.onPause();
} @Override
protected void onDestroy() {
if (player.isPlaying()) {
player.stop();
}
player.release();
super.onDestroy();
}
}
android中使用MediaPlayer和SurfaceView播放视频的更多相关文章
- Android MediaPlayer和SurfaceView播放视频
昨天介绍了VideoView播放视频,今天再介绍一种播放视频的方法MediaPlayer和SurfaceView,MediaPlayer播放音频,SurfaceView来显示图像,具体步骤如下: 1. ...
- 使用MediaPlayer和SurfaceView播放视频
使用VideoView播放视频简单.方便,丹有些早期的开发者更喜欢使用MediaPlayer来播放视频,但由于MediaPlayer主要用于播放音频,因此它没有提供图像输出界面,此时 需要借助于Sur ...
- Android应用开发学习笔记之播放视频
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 在Android中,我们可以通过使用VideoView类或者MediaPlayer类来播放视频. 一.使用Video ...
- android 98 MediaPlayer+SurfaceView播放视频
package com.itheima.videoplayer; import java.io.IOException; import android.media.MediaPlayer; impor ...
- Android开发之MediaPlayer和SurfaceView组成视频播放器
SurfaceView 使用双缓冲技术 是个重量级的组件 只要不可见,就不会创建,可见时,才会创建 只要不可见,就会销毁 SurfaceView一旦不可见,就会被销毁,一旦可见,就会被创建,销毁时停止 ...
- android开发之MediaPlayer+Service MP3播放器
import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.Lis ...
- Android中的Surface和SurfaceView
一.什么是Surface 简单的说Surface对应了一块屏幕缓冲区,每个window对应一个Surface,任何View都要画在Surface的Canvas上(后面有原因解释).传统的view共享一 ...
- Android SurfaceView播放视频时横竖屏的调整
对于横屏录制的视频就横屏播放,对于竖屏录制的视频就竖屏播放. 在mainifest文件里对负责播放的Activity添加以下属性“ android:configChanges="orient ...
- 183使用 MediaPlayer Framework 框架播放视频
效果如下: ViewController.h #import <UIKit/UIKit.h> #import <MediaPlayer/MediaPlayer.h> @inte ...
随机推荐
- 箭头函数与普通function的区别
1. 箭头函数没有自己的this,它里面的this是继承所属上下文中的this,而且使用call与apply都无法改变 let obj = { name: 'obj' } function fn1() ...
- 使用while循环实现菜单
- QT问题解决
1.pro文件下各个变量的含义 https://www.zybuluo.com/breakerthb/note/582395 2.如何在pro文件中导入其他的库 https://blog.csdn.n ...
- Android功耗评测系列之——软件评测方案原理
软件评测方案也有很多种,但核心原理都是同一个. 软件评测方案中,所有Android功耗的统计都是通过代码进行估算,没有任何实体电路和硬件设备参与统计汇报. 这个配置文件存储在Android ...
- JAVA读取Excel2003、2007、2010教程
import java.io.File;import java.io.FileInputStream;import org.apache.poi.ss.usermodel.Row;import org ...
- OpenLayers API整理
整理的Openlayers 的知识笔记,随着运用不断加深理解,也会不断更新. 本文链接:Openlayers API整理 作者:狐狸家的鱼 GitHub:八至 一.创建地图 1.地图Map 创建地图底 ...
- OS---磁盘存储器
1.概述 1.1 磁盘存储器 不仅 容量大.存取速度快 而且 可以随机存取: 现代计算机都配置了 磁盘存储器,以 它 为主 存放文件: 对文件 的操作,都将涉及对磁盘的访问: 1.2 ...
- Update Vim to 8.0 in Ubuntu
add PPA sudo add-apt-repository ppa:jonathonf/vim Update and Install sudo apt-get update sudo apt-ge ...
- InnoDB索引存储结构
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11429438.html InnoDB默认创建的主键索引是聚簇索引(Clustered Index),其 ...
- UNP学习第13章 守护进程和inetd超级服务器
Unix系统中的syslogd守护进程通常由某个系统初始化脚本启动,而且在系统工作期间一直运行. 源自Berkeley的syslogd实现在启动时执行以下步骤. (1)读取配置文件.通常为/etc/s ...