Android SurfaceView实现全屏播放例子
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实现全屏播放例子的更多相关文章
- audio与video控件/标签的隐藏,iso/Android下自动全屏播放,短暂黑屏问题
(一)audio音频标签 <audio src="xxx.mp3"></audio> (二)video视频标签 <video src="xx ...
- [转]Android WebView播放视频(包括全屏播放),androidwebview
Android WebView播放视频(包括全屏播放),androidwebview 最近项目开发中用到了WebView播放视频的功能,总结了开发中犯过的错误,这些错误在开发是及容易遇到的,所以我这里 ...
- Android为TV端助力 集成第三方播放器,实现全屏播放
下面这Demo链接:Android实现全屏播放,各种格式支持直播,点播,不收费!
- Android之针对WebView的全屏播放
转载请标明转载处:http://bbs.csdn.net/topics/390839259 本人刚学android,菜鸟一个,第一次写帖子,最近因为项目要用webview加载html5的视频,开始不能 ...
- 解决video标签在微信中强制全屏、微信全屏播放(Android和IOS)
在video标签中加上代码: x5-playsinline="true" webkit-playsinline="true" playsinline=" ...
- 用原生VideoView进行全屏播放时的问题
之前参加了一个课程,里面有一节讲到了用视频作为启动界面.讲师用的是自定义VideoView,重写onMeasure方法,因为原生的VideoView在那情况下不能实现全屏播放.当时没有深入研究,现在补 ...
- 腾讯X5内核使用详解(X5内核播放器使用如何去除控制栏全屏播放)以及一些注意事项
例子下载地址 https://www.lanzous.com/i2zsv5g GIT就不用了麻烦的不行 本人安卓刚学 就上X5内核弄了老长时间由于对maven 和idea不熟悉刚开始导包都是 ...
- iphone H5视频行内播放(禁止全屏播放)
一般用户都知道,ios在网页点击视频播放时,视频会弹出全屏播放框. video标签的playsinline.webkit-playsinline标记根本就不会起作用. 还有传闻说对于没有声音的视频不会 ...
- HTML5新标签video在iOS上默认全屏播放
今天做一个app时发现一个问题,应用html5中的video标签加载视频,在Android手机上默认播放大小,但是换成iPhone手机上出问题了,默认弹出全屏播放,查找了好多论坛,都没有谈论这个的.然 ...
随机推荐
- (一)问候Spring4
第一节:Spring 简介 Spring 作者:Rod Johnson: 官方网站:http://spring.io/ 最新开发包及文档下载地址:http://repo.springsource.or ...
- Json 映射 的使用 及 JS 数组的使用
Json 映射的使用: var nameMap = { 'A': 'A1', 'B': 'B1', 'B': 'B1' }; var selectedName='A'; if (nameMap[sel ...
- 转:ASP.NET MVC 3 and App_Code folder
问题: In ASP.NET Webform, App_Code is standardfolder to putting code and using it at run-time.But I th ...
- OC_NSString
// // main.m // OC_NSString // // Created by qianfeng on 15/6/10. // Copyright (c) 2015年 qianfeng. A ...
- Java实战之02Hibernate-03Session中的常用方法
九.Session中的常用方法 1.save方法 都是临时态————>持久态 2.persist方法 作用: 持久化临时态对象. 与save方法的区别: 开始了事务:persist和save没有 ...
- 10_Jaxws使用自定义pojo发布服务
[简述] 查询三天的天气信息(天气概况.日期.温度),测试jaxws是否支持自定义pojo发布服务. [开发过程] 服务端: 1.自定义pojo(天气概况.日期.温度) 2.开发SEI接口及实现类 3 ...
- I Take It All Back: Using Windows Installer (MSI) Rollback Actions
Original Link: http://blogs.flexerasoftware.com/installtalk/2011/10/i-take-it-all-back-using-windows ...
- [Guava官方文档翻译] 1.Guava简介 (Introduction)
用户指南 Guava包含Google在Java项目中用到的一些核心库:collections, caching, primitives support, concurrency 库, common a ...
- Hibernate3.3 小记
//----------------事务(修改.删除.保存) Session s=getSession(); Transaction t=s.beginTransaction(); getSessio ...
- leetcode Largest Rectangle in Histogram 单调栈
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4052343.html 题目链接 leetcode Largest Rectangle in ...