A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 老衲玩IT 中级黑马   /  2013-8-26 10:14  /  1951 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. <span style="line-height: 1.5;">public class MediaPlayerDemo_Video extends Activity implements</span>
  2.         OnBufferingUpdateListener, OnCompletionListener,
  3.         OnPreparedListener, OnVideoSizeChangedListener,
  4.         SurfaceHolder.Callback {

  5.     private static final String TAG = "MediaPlayerDemo";
  6.     private int mVideoWidth;
  7.     private int mVideoHeight;
  8.     private MediaPlayer mMediaPlayer;
  9.     private SurfaceView mPreview;
  10.     private SurfaceHolder holder;
  11.     private Bundle extras;
  12.     private static final String MEDIA = "media";
  13.     private static final int LOCAL_AUDIO = 1;
  14.     private static final int STREAM_AUDIO = 2;
  15.     private static final int RESOURCES_AUDIO = 3;
  16.     private static final int LOCAL_VIDEO = 4;
  17.     private static final int STREAM_VIDEO = 5;
  18.     private boolean mIsVideoSizeKnown = false;
  19.     private boolean mIsVideoReadyToBePlayed = false;

  20.     /**
  21.      *
  22.      * Called when the activity is first created.
  23.      */
  24.     @Override
  25.     public void onCreate(Bundle icicle) {
  26.         super.onCreate(icicle);
  27.         setContentView(R.layout.mediaplayer_2);
  28.         mPreview = (SurfaceView) findViewById(R.id.surface);
  29.         holder = mPreview.getHolder();
  30.         holder.addCallback(this);
  31.         holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  32.         extras = getIntent().getExtras();
  33.     }
  34.     private void playVideo(Integer Media,String path) {
  35.         doCleanUp();
  36.         try {
  37.             switch (Media) {
  38.                 case LOCAL_VIDEO:
  39.                     if (path.equals("")) {
  40.                         // Tell the user to provide a media file URL.
  41.                         Toast
  42.                                 .makeText(
  43.                                         MediaPlayerDemo_Video.this,"文件名不能为空",
  44.                                         Toast.LENGTH_LONG).show();
  45.                     }
  46.                     break;
  47.                 case STREAM_VIDEO:
  48.                     if (path.equals("")) {
  49.                         // Tell the user to provide a media file URL.
  50.                         Toast .makeText(
  51.                                         MediaPlayerDemo_Video.this,"文件名不能为空",
  52.                                         Toast.LENGTH_LONG).show();
  53.                     }

  54.                     break;
  55.             }
  56.             // 创建媒体播放器和设置监听器
  57.             mMediaPlayer = new MediaPlayer();
  58.             mMediaPlayer.setDataSource(path);
  59.             mMediaPlayer.setDisplay(holder);
  60.             //准备播放
  61.             mMediaPlayer.prepare();
  62.             mMediaPlayer.setOnBufferingUpdateListener(this);
  63.             mMediaPlayer.setOnCompletionListener(this);
  64.             mMediaPlayer.setOnPreparedListener(this);
  65.             mMediaPlayer.setOnVideoSizeChangedListener(this);
  66.             mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  67.         } catch (Exception e) {
  68.             Log.e(TAG, "error: " + e.getMessage(), e);
  69.         }
  70.     }
  71.     //缓冲更新提示
  72.     public void onBufferingUpdate(MediaPlayer arg0, int percent) {
  73.         Log.d(TAG, "onBufferingUpdate percent:" + percent);

  74.     }
  75.     //播放器做好了准备
  76.     public void onPrepared(MediaPlayer mediaplayer) {
  77.         Log.d(TAG, "onPrepared called");
  78.         mIsVideoReadyToBePlayed = true;
  79.         if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
  80.             startVideoPlayback();
  81.         }
  82.     }
  83.     //播放完成
  84.     public void onCompletion(MediaPlayer arg0) {
  85.         Log.d(TAG, "onCompletion called");
  86.     }
  87.     //暂停
  88.     @Override
  89.     protected void onPause() {
  90.         super.onPause();
  91.         releaseMediaPlayer();
  92.         doCleanUp();
  93.     }
  94.     //销毁
  95.     @Override
  96.     protected void onDestroy() {
  97.         super.onDestroy();
  98.         releaseMediaPlayer();
  99.         doCleanUp();
  100.     }
  101.     //释放内存
  102.     private void releaseMediaPlayer() {
  103.         if (mMediaPlayer != null) {
  104.             mMediaPlayer.release();
  105.             mMediaPlayer = null;
  106.         }
  107.     }
  108.     //重置
  109.     private void doCleanUp() {
  110.         mVideoWidth = 0;
  111.         mVideoHeight = 0;
  112.         mIsVideoReadyToBePlayed = false;
  113.         mIsVideoSizeKnown = false;
  114.     }
  115.     @Override
  116.     public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
  117.         Log.v(TAG, "onVideoSizeChanged called");
  118.         if (width == 0 || height == 0) {
  119.             Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")");
  120.             return;
  121.         }
  122.         mIsVideoSizeKnown = true;
  123.         mVideoWidth = width;
  124.         mVideoHeight = height;
  125.         if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
  126.             startVideoPlayback();
  127.         }
  128.     }
  129.     //开始播放
  130.     private void startVideoPlayback() {
  131.         Log.v(TAG, "startVideoPlayback");
  132.         holder.setFixedSize(mVideoWidth, mVideoHeight);
  133.         mMediaPlayer.start();
  134.     }
  135.     public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) {
  136.         Log.d(TAG, "surfaceChanged called");

  137.     }
  138.     public void surfaceDestroyed(SurfaceHolder surfaceholder) {
  139.         Log.d(TAG, "surfaceDestroyed called");
  140.     }
  141.     public void surfaceCreated(SurfaceHolder holder) {
  142.         Log.d(TAG, "surfaceCreated called");
  143.         //从extras中获得媒体类型和媒体文件的路径,并开始播放
  144.         playVideo(extras.getInt(MEDIA),extras.getString("path"));
  145.     }

  146. }
复制代码

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马