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播放视频的更多相关文章

  1. Android MediaPlayer和SurfaceView播放视频

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

  2. 使用MediaPlayer和SurfaceView播放视频

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

  3. Android应用开发学习笔记之播放视频

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 在Android中,我们可以通过使用VideoView类或者MediaPlayer类来播放视频. 一.使用Video ...

  4. android 98 MediaPlayer+SurfaceView播放视频

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

  5. Android开发之MediaPlayer和SurfaceView组成视频播放器

    SurfaceView 使用双缓冲技术 是个重量级的组件 只要不可见,就不会创建,可见时,才会创建 只要不可见,就会销毁 SurfaceView一旦不可见,就会被销毁,一旦可见,就会被创建,销毁时停止 ...

  6. android开发之MediaPlayer+Service MP3播放器

    import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.Lis ...

  7. Android中的Surface和SurfaceView

    一.什么是Surface 简单的说Surface对应了一块屏幕缓冲区,每个window对应一个Surface,任何View都要画在Surface的Canvas上(后面有原因解释).传统的view共享一 ...

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

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

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

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

随机推荐

  1. elasticsearch 中的Multi Match Query

    在Elasticsearch全文检索中,我们用的比较多的就是Multi Match Query,其支持对多个字段进行匹配.Elasticsearch支持5种类型的Multi Match,我们一起来深入 ...

  2. 【机器学习实验】scikit-learn的主要模块和基本使用

    [机器学习实验]scikit-learn的主要模块和基本使用 引言 对于一些开始搞机器学习算法有害怕下手的小朋友,该如何快速入门,这让人挺挣扎的.在从事数据科学的人中,最常用的工具就是R和Python ...

  3. jsp获取url路径的方法

    如果你请求的URL是  http://localhost:8080/demo/Index.jsp request.getScheme() //输出:http request.getServerName ...

  4. 观察者模式Observer

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11409319.html 1. 定义定义对象间的一种一对多的依赖关系.当一个对象的状态发生改变时,所有依 ...

  5. leetcode-165周赛-1278-分割回文串③

    题目描述: 动态规划:O(N^3) class Solution: def palindromePartition(self, s: str, k: int) -> int: def cost( ...

  6. 【纪中集训】2019.08.10【NOIP提高组】模拟 A 组TJ

    T1 Description Solution 有待填坑-- T2 Description 给定一个\(h(≤10)\)层.\(n(≤10)\)行.\(m(≤10)\)列的由泥土组成的立方体,挖开\( ...

  7. APICloud框架——总结一下最近开发APP遇到的一些问题 (二)

    高度自适应 flex布局 允许子元素伸缩 手机号正则 function checkPhone(data){ if(!(/^1[34578]\d{9}$/.test(data))){ alert(&qu ...

  8. Python每日一题 007

    题目 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词. 很难客观的说每篇日记中最重要的词是什么,所以在这里就仅仅是将每篇日记中出 ...

  9. Tomcat内存问题解决办法

    使用Java程序从数据库中查询大量的数据时出现异常:java.lang.OutOfMemoryError: Java heap space 在JVM中如果98%的时间是用于GC且可用的 Heap si ...

  10. Hadoop2.7.3+Hbase-1.2.6+spark2.1.2完全分布式安装部署

    https://www.cnblogs.com/lzxlfly/p/7221890.html 总的下载地址:      http://mirror.bit.edu.cn/apache/ hadoop下 ...