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();
      }
    }
  • 相关阅读:
    Kosaraju算法---强联通分量
    Java和C++的区别
    嵌入式面试题汇总
    tabbar 之 基本结构搭建
    路由 之 再识
    常见问题 之 vue项目中使用less报错
    路由 之 初识
    VueCLI3创建项目和目录结构与配置信息详解
    runtime-compiler 和 runtime-only的区别
    vueCLI2 之 目录结构
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4277531.html
Copyright © 2011-2022 走看看