zoukankan      html  css  js  c++  java
  • 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 != 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();
    }
    /* 销毁 */
    @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 != 0 && mVideoHeight != 0)
      {
       /* 设置视频的宽度和高度 */
       holder.setFixedSize(mVideoWidth, mVideoHeight);
       /* 开始播放 */
       mMediaPlayer.start();
      }
    }
  • 相关阅读:
    MySql不同版本安装
    逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式
    逆向知识十三讲,汇编中数组的表现形式,以及还原数组
    逆向知识第十二讲,识别全局变量,静态全局变量,局部静态变量,以及变量.
    逆向知识十一讲,识别函数的调用约定,函数参数,函数返回值.
    常见注入手法第三讲,远程线程注入
    病毒分析第二讲,分析病毒的主要功能
    病毒分析第一讲,分析病毒注意事项,以及简单分析主要功能
    逆向知识第十讲,循环在汇编中的表现形式,以及代码还原
    逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4277531.html
Copyright © 2011-2022 走看看