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();
      }
    }
  • 相关阅读:
    Java基础知识强化102:线程间共享数据
    Java(Android)编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)
    Android开发经验01:31个Android开发实战经验
    TCP/IP协议原理与应用笔记19:IP分组的交付和路由选择
    Android 高级UI设计笔记08:Android开发者常用的7款Android UI组件(转载)
    Java(Android)编程思想笔记01:多态性的理解
    Java基础知识强化之集合框架笔记75:哈希表
    重置 linux系统后要配置的基本组件操作
    记一个空格导致的三小时排查
    windows无法启动redis服务,错误码1067
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4277531.html
Copyright © 2011-2022 走看看