public class Mymedia extends Activity implements
OnBufferingUpdateListener,
OnCompletionListener,
MediaPlayer.OnPreparedListener,
SurfaceHolder.Callback
{
private static final String TAG = "Mymedia ";
private int mVideoWidth;
private int mVideoHeight;
private MediaPlayer mMediaPlayer;
private SurfaceView mPreview;
private SurfaceHolder holder;
private String path;
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
mPreview = (SurfaceView) findViewById(R.id.surface);
/* 得到SurfaceHolder对象 */
holder = mPreview.getHolder();
/* 设置回调函数 */
holder.addCallback(this);
/* 设置风格 */
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
private void playVideo()
{
try
{
path = "http://www.dubblogs.cc:8751/android/Test/Media/3gp/test.3gp";
//path = "/sdcard/test.3gp";
/* 构建MediaPlayer对象 */
mMediaPlayer = new MediaPlayer();
/* 设置媒体文件路径 */
mMediaPlayer.setDataSource(path);
/* 设置通过SurfaceView来显示画面 */
mMediaPlayer.setDisplay(holder);
/* 准备 */
mMediaPlayer.prepare();
/* 设置事件监听 */
mMediaPlayer.setOnBufferingUpdateListener(this);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
catch (Exception e)
{
Log.e(TAG, "error: " + e.getMessage(), e);
}
}
public void onBufferingUpdate(MediaPlayer arg0, int percent)
{
Log.v(TAG, "onBufferingUpdate percent:" + percent);
}
public void onCompletion(MediaPlayer arg0)
{
Log.v(TAG, "onCompletion called");
}
public void onPrepared(MediaPlayer mediaplayer)
{
Log.v(TAG, "onPrepared called");
mVideoWidth = mMediaPlayer.getVideoWidth();
mVideoHeight = mMediaPlayer.getVideoHeight();
if (mVideoWidth != && mVideoHeight != )
{
/* 设置视频的宽度和高度 */
holder.setFixedSize(mVideoWidth, mVideoHeight);
/* 开始播放 */
mMediaPlayer.start();
}
}
/* 更改时出发的事件 */
public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k)
{
Log.v(TAG, "surfaceChanged called");
}
/* 销毁 */
public void surfaceDestroyed(SurfaceHolder surfaceholder)
{
Log.v(TAG, "surfaceDestroyed called");
}
/* 当SurfaceHolder创建时触发 */
public void surfaceCreated(SurfaceHolder holder)
{
Log.v(TAG, "surfaceCreated called");
playVideo();
}
/* 销毁 */
@Override
protected void onDestroy()
{
super.onDestroy();
if (mMediaPlayer != null)
{
mMediaPlayer.release();
mMediaPlayer = null;
}
}
}
主要是这段哈:
public void onPrepared(MediaPlayer mediaplayer)
{
Log.v(TAG, "onPrepared called");
mVideoWidth = mMediaPlayer.getVideoWidth();
mVideoHeight = mMediaPlayer.getVideoHeight();
if (mVideoWidth != && mVideoHeight != )
{
/* 设置视频的宽度和高度 */
holder.setFixedSize(mVideoWidth, mVideoHeight);
/* 开始播放 */
mMediaPlayer.start();
}
}

Android SurfaceView实现全屏播放例子的更多相关文章

  1. audio与video控件/标签的隐藏,iso/Android下自动全屏播放,短暂黑屏问题

    (一)audio音频标签 <audio src="xxx.mp3"></audio> (二)video视频标签 <video src="xx ...

  2. [转]Android WebView播放视频(包括全屏播放),androidwebview

    Android WebView播放视频(包括全屏播放),androidwebview 最近项目开发中用到了WebView播放视频的功能,总结了开发中犯过的错误,这些错误在开发是及容易遇到的,所以我这里 ...

  3. Android为TV端助力 集成第三方播放器,实现全屏播放

    下面这Demo链接:Android实现全屏播放,各种格式支持直播,点播,不收费!

  4. Android之针对WebView的全屏播放

    转载请标明转载处:http://bbs.csdn.net/topics/390839259 本人刚学android,菜鸟一个,第一次写帖子,最近因为项目要用webview加载html5的视频,开始不能 ...

  5. 解决video标签在微信中强制全屏、微信全屏播放(Android和IOS)

    在video标签中加上代码: x5-playsinline="true" webkit-playsinline="true" playsinline=" ...

  6. 用原生VideoView进行全屏播放时的问题

    之前参加了一个课程,里面有一节讲到了用视频作为启动界面.讲师用的是自定义VideoView,重写onMeasure方法,因为原生的VideoView在那情况下不能实现全屏播放.当时没有深入研究,现在补 ...

  7. 腾讯X5内核使用详解(X5内核播放器使用如何去除控制栏全屏播放)以及一些注意事项

    例子下载地址 https://www.lanzous.com/i2zsv5g      GIT就不用了麻烦的不行 本人安卓刚学 就上X5内核弄了老长时间由于对maven 和idea不熟悉刚开始导包都是 ...

  8. iphone H5视频行内播放(禁止全屏播放)

    一般用户都知道,ios在网页点击视频播放时,视频会弹出全屏播放框. video标签的playsinline.webkit-playsinline标记根本就不会起作用. 还有传闻说对于没有声音的视频不会 ...

  9. HTML5新标签video在iOS上默认全屏播放

    今天做一个app时发现一个问题,应用html5中的video标签加载视频,在Android手机上默认播放大小,但是换成iPhone手机上出问题了,默认弹出全屏播放,查找了好多论坛,都没有谈论这个的.然 ...

随机推荐

  1. Exam 70-462 Administering Microsoft SQL Server 2012 Databases 复习帖

    好吧最近堕落没怎么看书,估计这个月前是考不过了,还是拖到国庆之后考试吧.想着自己复习考试顺便也写点自己的复习的概要,这样一方面的给不准备背题库的童鞋有简便的复习方法(好吧不被题库的同学和我一样看MSD ...

  2. TortoiseSVN本地代码版本控制设置步骤。

    1.下载安装TortoiseSVN客户端. 2.在某个盘创建空的文件夹作为项目代码的版本库.在空的文件夹内部右键鼠标TortoiseSVN->Create repository here 3.在 ...

  3. JavaScript学习笔记(1)——JavaScript简介

          JavaScript一种解释性脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,该引擎为浏览器的一部分.JavaScript最早是用 ...

  4. mybatis关联查询

    场景:一个人有多个手机号,一个手机号对应一个人 CREATE TABLE test.mobile ( mid INT NOT NULL auto_increment, tel ), pid INT, ...

  5. post 提交数据

    1 默认:application/x-www-form-urlencoded 在网页表单中可设置 enctype的值,如果不设,默认是 application/x-www-form-urlencode ...

  6. HDU 1058 Humble Number

    Humble Number Problem Description A number whose only prime factors are 2,3,5 or 7 is called a humbl ...

  7. 重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考

    http://www.cnblogs.com/insus/p/4142264.html 重构if...else...或者switch程序块 为 中介者(Mediator)模式.的思考 首先普世的编程架 ...

  8. Java write And read Demo

    以下代码主要实现java中的读文件 和写入文件,练习一下流操作. 要点: 1.读取文件时,一定要加编码格式,否则中文乱码 import java.io.BufferedReader;import ja ...

  9. centos7下编译qt的mysql驱动

    在编译mysql驱动之前,首先要安装mysql,可以使用yum安装,这里将不再介绍. 在将qt和mysql都安装好之后,首先找到mysql的头文件以及他的共享库,我的mysql是使用yum安装的,头文 ...

  10. Sublime Text 3插件安装方法

    安装Sublime Tex 3t插件的方法: 按快捷键Ctrl + ~ 调出console 粘贴以下代码到console并回车: import urllib.request,os; pf = 'Pac ...