Пример #1
0
        public void onPrepared(IMediaPlayer mp) {
          DebugLog.d(TAG, "onPrepared");
          mCurrentState = STATE_PREPARED;
          mTargetState = STATE_PLAYING;

          if (mOnPreparedListener != null) mOnPreparedListener.onPrepared(mMediaPlayer);
          if (mMediaController != null) mMediaController.setEnabled(true);
          mVideoWidth = mp.getVideoWidth();
          mVideoHeight = mp.getVideoHeight();

          long seekToPosition = mSeekWhenPrepared;

          if (seekToPosition != 0) seekTo(seekToPosition);
          if (mVideoWidth != 0 && mVideoHeight != 0) {
            setVideoLayout(mVideoLayout);
            if (mSurfaceWidth == mVideoWidth && mSurfaceHeight == mVideoHeight) {
              if (mTargetState == STATE_PLAYING) {
                start();
                if (mMediaController != null) mMediaController.show();
              } else if (!isPlaying() && (seekToPosition != 0 || getCurrentPosition() > 0)) {
                if (mMediaController != null) mMediaController.show(0);
              }
            }
          } else if (mTargetState == STATE_PLAYING) {
            start();
          }
        }
Пример #2
0
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    boolean isKeyCodeSupported =
        keyCode != KeyEvent.KEYCODE_BACK
            && keyCode != KeyEvent.KEYCODE_VOLUME_UP
            && keyCode != KeyEvent.KEYCODE_VOLUME_DOWN
            && keyCode != KeyEvent.KEYCODE_MENU
            && keyCode != KeyEvent.KEYCODE_CALL
            && keyCode != KeyEvent.KEYCODE_ENDCALL;
    if (isInPlaybackState() && isKeyCodeSupported && mMediaController != null) {
      if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK
          || keyCode == KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE
          || keyCode == KeyEvent.KEYCODE_SPACE) {
        if (mMediaPlayer.isPlaying()) {
          pause();
          mMediaController.show();
        } else {
          start();
          mMediaController.hide();
        }
        return true;
      } else if (keyCode == KeyEvent.KEYCODE_MEDIA_STOP && mMediaPlayer.isPlaying()) {
        pause();
        mMediaController.show();
      } else {
        toggleMediaControlsVisiblity();
      }
    }

    return super.onKeyDown(keyCode, event);
  }
Пример #3
0
 private void release(boolean cleartargetstate) {
   if (mMediaPlayer != null) {
     mMediaPlayer.reset();
     mMediaPlayer.release();
     mMediaPlayer = null;
     mCurrentState = STATE_IDLE;
     if (cleartargetstate) mTargetState = STATE_IDLE;
   }
 }
Пример #4
0
 public void onVideoSizeChanged(
     IMediaPlayer mp, int width, int height, int sarNum, int sarDen) {
   DebugLog.dfmt(TAG, "onVideoSizeChanged: (%dx%d)", width, height);
   mVideoWidth = mp.getVideoWidth();
   mVideoHeight = mp.getVideoHeight();
   mVideoSarNum = sarNum;
   mVideoSarDen = sarDen;
   if (mVideoWidth != 0 && mVideoHeight != 0) setVideoLayout(mVideoLayout);
 }
Пример #5
0
 public void stopPlayback() {
   if (mMediaPlayer != null) {
     mMediaPlayer.stop();
     mMediaPlayer.release();
     mMediaPlayer = null;
     mCurrentState = STATE_IDLE;
     mTargetState = STATE_IDLE;
   }
 }
Пример #6
0
 @Override
 public void pause() {
   if (isInPlaybackState()) {
     if (mMediaPlayer.isPlaying()) {
       mMediaPlayer.pause();
       mCurrentState = STATE_PAUSED;
     }
   }
   mTargetState = STATE_PAUSED;
 }
Пример #7
0
 @Override
 public int getCurrentPosition() {
   if (isInPlaybackState()) {
     long position = mMediaPlayer.getCurrentPosition();
     return (int) position;
   }
   return 0;
 }
Пример #8
0
 @Override
 public void start() {
   if (isInPlaybackState()) {
     mMediaPlayer.start();
     mCurrentState = STATE_PLAYING;
   }
   mTargetState = STATE_PLAYING;
 }
Пример #9
0
 @Override
 public void seekTo(long msec) {
   if (isInPlaybackState()) {
     mMediaPlayer.seekTo(msec);
     mSeekWhenPrepared = 0;
   } else {
     mSeekWhenPrepared = msec;
   }
 }
Пример #10
0
 @Override
 public int getDuration() {
   if (isInPlaybackState()) {
     if (mDuration > 0) return (int) mDuration;
     mDuration = mMediaPlayer.getDuration();
     return (int) mDuration;
   }
   mDuration = -1;
   return (int) mDuration;
 }
Пример #11
0
 public void surfaceCreated(SurfaceHolder holder) {
   mSurfaceHolder = holder;
   if (mMediaPlayer != null
       && mCurrentState == STATE_SUSPEND
       && mTargetState == STATE_RESUME) {
     mMediaPlayer.setDisplay(mSurfaceHolder);
     resume();
   } else {
     openVideo();
   }
 }
Пример #12
0
        public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
          mSurfaceHolder = holder;
          if (mMediaPlayer != null) {
            mMediaPlayer.setDisplay(mSurfaceHolder);
          }

          mSurfaceWidth = w;
          mSurfaceHeight = h;
          boolean isValidState = (mTargetState == STATE_PLAYING);
          boolean hasValidSize = (mVideoWidth == w && mVideoHeight == h);
          if (mMediaPlayer != null && isValidState && hasValidSize) {
            if (mSeekWhenPrepared != 0) seekTo(mSeekWhenPrepared);
            start();
            if (mMediaController != null) {
              if (mMediaController.isShowing()) mMediaController.hide();
              mMediaController.show();
            }
          }
        }
Пример #13
0
    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public void bindToMediaPlayer(IMediaPlayer mp) {
      if (mp == null) return;

      if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
          && (mp instanceof ISurfaceTextureHolder)) {
        ISurfaceTextureHolder textureHolder = (ISurfaceTextureHolder) mp;
        mTextureView.mSurfaceCallback.setOwnSurfaceTecture(false);

        SurfaceTexture surfaceTexture = textureHolder.getSurfaceTexture();
        if (surfaceTexture != null) {
          mTextureView.setSurfaceTexture(surfaceTexture);
        } else {
          textureHolder.setSurfaceTexture(mSurfaceTexture);
        }
      } else {
        mp.setSurface(openSurface());
      }
    }
Пример #14
0
 @Override
 public boolean isPlaying() {
   return isInPlaybackState() && mMediaPlayer.isPlaying();
 }
Пример #15
0
  private void openVideo() {
    if (mUri == null || mSurfaceHolder == null) return;

    Intent i = new Intent("com.android.music.musicservicecommand");
    i.putExtra("command", "pause");
    mContext.sendBroadcast(i);

    release(false);
    try {
      mDuration = -1;
      mCurrentBufferPercentage = 0;
      // mMediaPlayer = new AndroidMediaPlayer();
      IjkMediaPlayer ijkMediaPlayer = null;
      if (mUri != null) {
        ijkMediaPlayer = new IjkMediaPlayer();
        ijkMediaPlayer.setAvOption(AvFormatOption_HttpDetectRangeSupport.Disable);
        ijkMediaPlayer.setOverlayFormat(AvFourCC.SDL_FCC_RV32);

        ijkMediaPlayer.setAvCodecOption("skip_loop_filter", "48");
        ijkMediaPlayer.setFrameDrop(12);
        if (mUserAgent != null) {
          ijkMediaPlayer.setAvFormatOption("user_agent", mUserAgent);
        }
      }
      mMediaPlayer = ijkMediaPlayer;
      mMediaPlayer.setOnPreparedListener(mPreparedListener);
      mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener);
      mMediaPlayer.setOnCompletionListener(mCompletionListener);
      mMediaPlayer.setOnErrorListener(mErrorListener);
      mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener);
      mMediaPlayer.setOnInfoListener(mInfoListener);
      mMediaPlayer.setOnSeekCompleteListener(mSeekCompleteListener);
      if (mUri != null) mMediaPlayer.setDataSource(mUri.toString());
      mMediaPlayer.setDisplay(mSurfaceHolder);
      mMediaPlayer.setScreenOnWhilePlaying(true);
      mMediaPlayer.prepareAsync();
      mCurrentState = STATE_PREPARING;
      attachMediaController();
    } catch (IOException ex) {
      DebugLog.e(TAG, "Unable to open content: " + mUri, ex);
      mCurrentState = STATE_ERROR;
      mTargetState = STATE_ERROR;
      mErrorListener.onError(mMediaPlayer, IMediaPlayer.MEDIA_ERROR_UNKNOWN, 0);
      return;
    } catch (IllegalArgumentException ex) {
      DebugLog.e(TAG, "Unable to open content: " + mUri, ex);
      mCurrentState = STATE_ERROR;
      mTargetState = STATE_ERROR;
      mErrorListener.onError(mMediaPlayer, IMediaPlayer.MEDIA_ERROR_UNKNOWN, 0);
      return;
    }
  }