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手机上出问题了,默认弹出全屏播放,查找了好多论坛,都没有谈论这个的.然 ...
随机推荐
- 使用resumable.js上传大文件(视频)兵转换flv格式
前台代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Video.asp ...
- Linq 中的TakeWhile 和 SkipWhile
这两个概念容易搞混 理解了一番后 在这里写下便于记忆 SkipWhile 可以理解为如果条件满足 就一直跳过 知道不满足后 就取剩下的所有元素(后面的不会再判断) TakeWhile 可以理解为 ...
- HDU 4430 Yukari's Birthday(二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4430 题目大意:给定n个蜡烛,围绕蛋糕的中心插同心圆,从里往外分别是第1圈.第2圈....第r圈,第 ...
- SQL 不同的数据类型
SQL 不同的数据类型 1.SQL TEXT 2.SQL VARCHAR(SIZE) VARCHAR(X) Case: user name, email, country, subject, pass ...
- 九度OJ 1120 全排列 -- 实现C++STL中next_permutation()
题目地址:http://ac.jobdu.com/problem.php?pid=1120 题目描述: 给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列. 我们假设对于小写字母有'a' ...
- poj 3783 Balls 动态规划 100层楼投鸡蛋问题
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4098409.html 题目链接:poj 3783 Balls 动态规划 100层楼投鸡蛋问题 ...
- opensuse安装mysql-workbench
首先安装好mysqlserver,做本地测试其实不用安装mysqlclient. 到http://software.opensuse.org/package/mysql-workbench 下载相应版 ...
- NFS挂载及写入故障
最近在做架构时,分离出来一台图片服务器,图片服务器是通过NFS(网络文件系统)给两台web服务器提供图片存储的,在编辑NFS配置文件(/etc/exports)时:想了一下,允许访问NFS共享目录的范 ...
- python学习_应用pickle模块封装和拆封数据对象
学习文件数据处理的时候了解到有pickle模块,查找官方文档学习了一些需要用到的pickle内容. 封装是一个将Python数据对象转化为字节流的过程,拆封是封装的逆操作,将字节文件或字节对象中的字节 ...
- 2014年度辛星html教程夏季版第七节
经过前面六节的学习,我们大致清楚了HTML教程中的基础内容,那么接下来我们开始继续向后推进,可以说,下面我们介绍一下HTML中的区块. ***************区块*************** ...