博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android SurfaceView实现全屏播放例子
阅读量:4709 次
发布时间:2019-06-10

本文共 2784 字,大约阅读时间需要 9 分钟。

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 != 0 && mVideoHeight != 0)  {   /* 设置视频的宽度和高度 */   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();}/* 销毁 */@Overrideprotected 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 != 0 && mVideoHeight != 0)  {   /* 设置视频的宽度和高度 */   holder.setFixedSize(mVideoWidth, mVideoHeight);   /* 开始播放 */   mMediaPlayer.start();  }}

 

转载于:https://www.cnblogs.com/zhujiabin/p/4277531.html

你可能感兴趣的文章
数据结构与算法分析(C++)读书笔记
查看>>
(转)nginx应用总结(1)--基础认识和应用参数优化配置
查看>>
(转)关于sql和MySQL的语句执行顺序(必看!!!)
查看>>
UVALive 3668 A Funny Stone Game(博弈)
查看>>
信息论随笔2: 交叉熵、相对熵
查看>>
再学习之MyBatis.
查看>>
CodeWars题目筛选
查看>>
MySQL— 索引
查看>>
电子书下载:Professional Web Design: Techniques and Templates, 4th Edition
查看>>
10要点解决IE6兼容性问题
查看>>
Seven Python Tools All Data Scientists Should Know How to Use
查看>>
cocos2d-x学习之路(二)——分析AppDelegate和HelloWorldScene文件
查看>>
Asp.net 对于服务器控件添加Client端方法
查看>>
在Salesforce中创建Approval Process
查看>>
NFS服务搭建与配置
查看>>
python计算文件md5值
查看>>
android 4.1 Emulator Skins
查看>>
Web站点防注入注意事项(转)
查看>>
第0次作业
查看>>
广播接收器——接收系统广播
查看>>