android 下不错的 播放器实例 SeeJoPlayer

android 下不错的 播放器实例 SeeJoPlayer
资源下载需要积分:2
  • 8781***@qq.com 开通了 黄金会员
    5小时前
  • 5356***@qq.com 开通了 钻石会员
    13小时前
  • 1879***@qq.com 开通了 铂金会员
    23小时前
  • 1909***@qq.com 开通了 永久会员
    1天前
  • 2221***@qq.com 开通了 钻石会员
    1天前
  • 9736***@qq.com 开通了 铂金会员
    1天前
  • 6348***@qq.com 开通了 黄金会员
    1天前
  • 2183***@qq.com 开通了 永久会员
    1天前
  • 3872***@qq.com 开通了 黄金会员
    2天前
  • 6327***@qq.com 开通了 黄金会员
    2天前
  • 2401***@qq.com 开通了 钻石会员
    2天前
  • 6368***@qq.com 开通了 钻石会员
    2天前
  • 2507***@qq.com 开通了 铂金会员
    2天前
  • 5561***@qq.com 开通了 永久会员
    2天前
  • 8628***@qq.com 开通了 铂金会员
    3天前
  • 7270***@qq.com 开通了 永久会员
    3天前
  • 8435***@qq.com 开通了 铂金会员
    3天前
  • 2730***@qq.com 开通了 铂金会员
    3天前
  • 源码分类:游戏源码
  • 发布日期:2020-03-01 10:26
  • 展示次数:361
  • 下载次数:1
  • 收藏次数:10
  • 分享人员:本站会员

Android 下播放器实例 供学习和研究使用package com.zh_weir.videoplayer;   /*  * Copyright (C) 2006 The Android Open source Project  *  * Licensed under the Apache License, Version 2.0 (the "License");  * you may not use this file except in compliance with the License.  * You may obtain a copy of the License at  *  *      http://www.apache.org/licenses/LICENSE-2.0  *  * Unless required by applicable law or agreed to in writing, software  * distributed under the License is distributed on an "AS IS" BASIS,  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  * See the License for the specific language governing permissions and  * limitations under the License.  */   import android.R.integer; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionlistener; import android.media.MediaPlayer.OnErrorListener; import android.net.Uri; import android.os.Powermanager; import android.util.AttributeSet; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.Viewgroup.LayoutParams; import android.widget.MediaController; import android.widget.MediaController.MediaPlayerControl;   import Java.io.IOException;    /**  * Displays a video file.  The VideoView class  * can load images from various sources (such as resources or content  * providers), takes care of computing its measurement from the video so that  * it can be used in any layout manager, and provides various display options  * such as scaling and tinting.  */ public class VideoView extends SurfaceView implements MediaPlayerControl {     private String tag = "VideoView";           private Context mContext;           // settable by the client     private Uri         mUri;     private int         mDuration;       // All the stuff we need for playing and showing a video     private SurfaceHolder mSurfaceHolder = null;     private MediaPlayer mMediaPlayer = null;     private boolean     mIsPrepared;     private int         mVideoWidth;     private int         mVideoHeight;     private int         mSurfaceWidth;     private int         mSurfaceHeight;     private MediaController mMediaController;     private OnCompletionListener mOnCompletionListener;     private MediaPlayer.OnPreparedListener mOnPreparedListener;     private int         mCurrentbufferPercentage;     private OnErrorListener mOnErrorListener;     private boolean     mStartWhenPrepared;     private int         mSeekWhenPrepared;       private MySizeChangeLinstener mMyChangeLinstener;           public int getVideoWidth(){         return mVideoWidth;     }           public int getVideoHeight(){         return mVideoHeight;     }           public void setVideoScale(int width , int height){         LayoutParams lp = getLayoutParams();         lp.height = height;         lp.width = width;         setLayoutParams(lp);     }           public interface MySizeChangeLinstener{         public void doMyThings();     }           public void setMySizeChangeLinstener(MySizeChangeLinstener l){         mMyChangeLinstener = l;     }           public VideoView(Context context) {         super(context);         mContext = context;         initVideoView();     }       public VideoView(Context context, AttributeSet attrs) {         this(context, attrs, 0);         mContext = context;         initVideoView();     }       public VideoView(Context context, AttributeSet attrs, int defStyle) {         super(context, attrs, defStyle);         mContext = context;         initVideoView();     }           @Override     protected void onMeasure(int widthMeasureSpec, int heightmeasureSpec) {         //Log.i("@@@@", "onMeasure");         int width = getDEFAULTSize(mVideoWidth, widthMeasureSpec);         int height = getDefaultSize(mVideoHeight, heightMeasureSpec);         /*if (mVideoWidth > 0 && mVideoHeight > 0) {             if ( mVideoWidth * height  > width * mVideoHeight ) {                 //Log.i("@@@", "image too tall, correcting");                 height = width * mVideoHeight / mVideoWidth;             } else if ( mVideoWidth * height  < width * mVideoHeight ) {                 //Log.i("@@@", "image too wide, correcting");                 width = height * mVideoWidth / mVideoHeight;             } else {                 //Log.i("@@@", "aspect ratio is correct: "                           //width "/" height "="                          //mVideoWidth "/" mVideoHeight);             }         }*/         //Log.i("@@@@@@@@@@", "setting size: "   width   'x'   height);         setMeasuredDimension(width,height);     }       public int resolveAdjustedSize(int desiredSize, int measureSpec) {         int result = desiredSize;         int specMode = MeasureSpec.getMode(measureSpec);         int specSize =  MeasureSpec.getSize(measureSpec);           switch (specMode) {             case MeasureSpec.UNSPECIFIED:                 /* Parent says we can be as big as we want. Just don't be larger                  * than max size imposed on ourselves.                  */                 result = desiredSize;                 break;               case MeasureSpec.AT_MOST:                 /* Parent says we can be as big as we want, up to specSize.                  * Don't be larger than specSize, and don't be larger than                  * the max size imposed on ourselves.                  */                 result = Math.min(desiredSize, specSize);                 break;               case MeasureSpec.EXACTLY:                 // No choice. Do what we are told.                 result = specSize;                 break;         }         return result; }       private void initVideoView() {         mVideoWidth = 0;         mVideoHeight = 0;         getHolder().addCallback(mSHCallback);         getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);         setFocusable(true);         setFocusableInTouchMode(true);         requestFocus();     }       public void setVideoPath(String path) {         setVideoURI(Uri.parse(path));     }       public void setVideoURI(Uri uri) {         mUri = uri;         mStartWhenPrepared = false;         mSeekWhenPrepared = 0;         openVideo();         requestLayout();         invalidate();     }       public void stopPlayback() {         if (mMediaPlayer != null) {             mMediaPlayer.stop();             mMediaPlayer.release();             mMediaPlayer = null;         }     }       private void openVideo() {         if (mUri == null || mSurfaceHolder == null) {             // not ready for playback just yet, will try again later             return;         }         // Tell the music playback service to pause         // TODO: these constants need to be published somewhere in the framework.         Intent i = new Intent("com.android.music.musicservicecommand");         i.putExtra("command", "pause");         mContext.sendBroadcast(i);           if (mMediaPlayer != null) {             mMediaPlayer.reset();             mMediaPlayer.release();             mMediaPlayer = null;         }         try {             mMediaPlayer = new MediaPlayer();             mMediaPlayer.setOnPreparedListener(mPreparedListener);             mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener);             mIsPrepared = false;             Log.v(TAG, "reset duration to -1 in openVideo");             mDuration = -1;             mMediaPlayer.setOnCompletionListener(mCompletionListener);             mMediaPlayer.setOnErrorListener(mErrorListener);             mMediaPlayer.setOnBufferingupdateListener(mBufferingUpdateListener);             mCurrentBufferPercentage = 0;             mMediaPlayer.setDataSource(mContext, mUri);             mMediaPlayer.setDisplay(mSurfaceHolder);             mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);             mMediaPlayer.setScreenOnWhilePlaying(true);             mMediaPlayer.prepareAsync();             attachMediaController();         } catch (IOException ex) {             Log.w(TAG, "Unable to open content: "   mUri, ex);             return;         } catch (IllegalArgumentException ex) {             Log.w(TAG, "Unable to open content: "   mUri, ex);             return;         }     }       public void setMediaController(MediaController controller) {         if (mMediaController != null) {             mMediaController.hide();         }         mMediaController = controller;         attachMediaController();     }       private void attachMediaController() {         if (mMediaPlayer != null && mMediaController != null) {             mMediaController.setMediaPlayer(this);             View anchorView = this.getParent() instanceof View ?                     (View)this.getParent() : this;             mMediaController.setAnchorView(anchorView);             mMediaController.setEnabled(mIsPrepared);         }     }       MediaPlayer.OnVideoSizeChangedListener mSizeChangedListener =         new MediaPlayer.OnVideoSizeChangedListener() {             public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {                 mVideoWidth = mp.getVideoWidth();                 mVideoHeight = mp.getVideoHeight();                                   if(mMyChangeLinstener!=null){                     mMyChangeLinstener.doMyThings();                 }                                   if (mVideoWidth != 0 && mVideoHeight != 0) {                     getHolder().setFixedSize(mVideoWidth, mVideoHeight);                 }             }     };       MediaPlayer.OnPreparedListener mPreparedListener = new MediaPlayer.OnPreparedListener() {         public void onPrepared(MediaPlayer mp) {             // briefly show the mediacontroller             mIsPrepared = true;             if (mOnPreparedListener != null) {                 mOnPreparedListener.onPrepared(mMediaPlayer);             }             if (mMediaController != null) {                 mMediaController.setEnabled(true);             }             mVideoWidth = mp.getVideoWidth();             mVideoHeight = mp.getVideoHeight();             if (mVideoWidth != 0 && mVideoHeight != 0) {                 //Log.i("@@@@", "video size: "   mVideoWidth  "/"  mVideoHeight);                 getHolder().setFixedSize(mVideoWidth, mVideoHeight);                 if (mSurfaceWidth == mVideoWidth && mSurfaceHeight == mVideoHeight) {                     // We didn't actually change the size (it was already at the size                     // we need), so we won't get a "surface changed" callback, so                     // start the video here instead of in the callback.                     if (mSeekWhenPrepared != 0) {                         mMediaPlayer.seekTo(mSeekWhenPrepared);                         mSeekWhenPrepared = 0;                     }                     if (mStartWhenPrepared) {                         mMediaPlayer.start();                         mStartWhenPrepared = false;                         if (mMediaController != null) {                             mMediaController.show();                         }                     } else if (!isPlaying() &&                             (mSeekWhenPrepared != 0 || getCurrentPosition() > 0)) {                        if (mMediaController != null) {                            // Show the media controls when we're paused into a video and make 'em stick.                            mMediaController.show(0);                        }                    }                 }             } else {                 // We don't know the video size yet, but should start anyway.                 // The video size might be reported to us later.                 if (mSeekWhenPrepared != 0) {                     mMediaPlayer.seekTo(mSeekWhenPrepared);                     mSeekWhenPrepared = 0;                 }                 if (mStartWhenPrepared) {                     mMediaPlayer.start();                     mStartWhenPrepared = false;                 }             }         }     };       private MediaPlayer.OnCompletionListener mCompletionListener =         new MediaPlayer.OnCompletionListener() {         public void onCompletion(MediaPlayer mp) {             if (mMediaController != null) {                 mMediaController.hide();             }             if (mOnCompletionListener != null) {                 mOnCompletionListener.onCompletion(mMediaPlayer);             }         }     };       private MediaPlayer.OnErrorListener mErrorListener =         new MediaPlayer.OnErrorListener() {         public boolean onError(MediaPlayer mp, int framework_err, int impl_err) {             Log.d(TAG, "Error: "   framework_err   ","   impl_err);             if (mMediaController != null) {                 mMediaController.hide();             }               /* If an error handler has been supplied, use it and finish. */             if (mOnErrorListener != null) {           &nb

android 下不错的 播放器实例 SeeJoPlayer

评论


亲,登录后才可以留言!

来源:android 下不错的 播放器实例 SeeJoPlayer

酷码网所有素材均为本站用户上传,仅供学习与参考,请勿用于商业用途,如有侵犯您的版权请联系客服服务QQ
本站提供各类程序源码素材。
如果对本站有任何意见请点击右侧侧边栏的反馈意见,我们会及时处理。

本站会员

这个家伙很懒未写签名~