zoukankan      html  css  js  c++  java
  • Android MediaPlayer

    1. MediaPlayer播放流程

    以下是在Java中调用MediaPlayer实现播放的简单流程

    mMediaPlayer.setDataSource(filePath);
    mMediaPlayer.prepare();
    mDuration.setText(String.valueOf(mMediaPlayer.getDuration()));
    mVideoWidht = mMediaPlayer.getVideoWidth();
    mVideoHeight = mMediaPlayer.getVideoHeight();
    
    if( mVideoWidht!=0 && mVideoHeight != 0 )
    {
    	mMediaPlayer.start();
    }

    2. MediaPlayer状态转移图


    椭圆:状态

    箭头:操作

    单箭头-->同步操作

    双箭头-->>异步操作

    2.1 IdleState 和 EndState

    IdleState : new 或者 reset()之后

    EndState:release()之后

    在IdleState 和 EndState状态中不能调用getCurrentPosition()getDuration()getVideoHeight()getVideoWidth()setAudioStreamType(int)setLooping(boolean)setVolume(float, float)pause()start()stop(),seekTo(int)prepare() or prepareAsync()

    二者的差别在于调用后的反馈不同:

    IdleState: 调用OnErrorListener.onError() ,状态不变

    EndState:调用OnErrorListener.onError(),状态变为ErrorState

    2.2 stop

    在调用stop后必须调用prepare() or prepareAsync() 才干进入started状态


    2.3 prepare()  prepareAsync() 

    作用:预处理播放器为播放做准备

    二者的不同在于

    prepare:同步操作

    prepareAsync:异步操作, 经常使用用于数据源为流; prepareAsync给出的错误信息也很多其它


    2.4 Completed State

    播放结束后的状态, 其兴许的状态转移可由setLooping(boolean)设置:

    setLooping( true ) : 直接转移到Started状态循环播放

    setLooping( false ): 播放完毕后触发setOnCompletionListener(OnCompletionListener)

    可调用start()又一次播放

    注意:此时不能调用stop操作, 否则还要进行perpare操作


    3. Valid and invalid states

    Method Name

    Valid Sates

    Invalid States

    Comments

    attachAuxEffect

    {Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}

    {Idle, Error}

    This method must be called after setDataSource. Calling it does not change the object state.

    getAudioSessionId

    any

    {}

    This method can be called in any state and calling it does not change the object state.

    getCurrentPosition

    {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}

    {Error}

    Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to theError state.

    getDuration

    {Prepared, Started, Paused, Stopped, PlaybackCompleted}

    {Idle, Initialized, Error}

    Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to theError state.

    getVideoHeight

    {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}

    {Error}

    Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to theError state.

    getVideoWidth

    {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}

    {Error}

    Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to theError state.

    isPlaying

    {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}

    {Error}

    Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to theError state.

    pause

    {Started, Paused, PlaybackCompleted}

    {Idle, Initialized, Prepared, Stopped, Error}

    Successful invoke of this method in a valid state transfers the object to thePaused state. Calling this method in an invalid state transfers the object to the Error state.

    prepare

    {Initialized, Stopped}

    {Idle, Prepared, Started, Paused, PlaybackCompleted, Error}

    Successful invoke of this method in a valid state transfers the object to thePrepared state. Calling this method in an invalid state throws an IllegalStateException.

    prepareAsync

    {Initialized, Stopped}

    {Idle, Prepared, Started, Paused, PlaybackCompleted, Error}

    Successful invoke of this method in a valid state transfers the object to thePreparing state. Calling this method in an invalid state throws an IllegalStateException.

    release

    any

    {}

    After release(), the object is no longer available.

    reset

    {Idle, Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error}

    {}

    After reset(), the object is like being just created.

    seekTo

    {Prepared, Started, Paused, PlaybackCompleted}

    {Idle, Initialized, Stopped, Error}

    Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to theError state.

    setAudioSessionId

    {Idle}

    {Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error}

    This method must be called in idle state as the audio session ID must be known before calling setDataSource. Calling it does not change the object state.

    setAudioStreamType

    {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted}

    {Error}

    Successful invoke of this method does not change the state. In order for the target audio stream type to become effective, this method must be called before prepare() or prepareAsync().

    setAuxEffectSendLevel

    any

    {}

    Calling this method does not change the object state.

    setDataSource

    {Idle}

    {Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted, Error}

    Successful invoke of this method in a valid state transfers the object to theInitialized state. Calling this method in an invalid state throws an IllegalStateException.

    setDisplay

    any

    {}

    This method can be called in any state and calling it does not change the object state.

    setSurface

    any

    {}

    This method can be called in any state and calling it does not change the object state.

    setVideoScalingMode

    {Initialized, Prepared, Started, Paused, Stopped, PlaybackCompleted}

    {Idle, Error}

    Successful invoke of this method does not change the state.

    setLooping

    {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted}

    {Error}

    Successful invoke of this method in a valid state does not change the state. Calling this method in an invalid state transfers the object to theError state.

    isLooping

    any

    {}

    This method can be called in any state and calling it does not change the object state.

    setOnBufferingUpdateListener

    any

    {}

    This method can be called in any state and calling it does not change the object state.

    setOnCompletionListener

    any

    {}

    This method can be called in any state and calling it does not change the object state.

    setOnErrorListener

    any

    {}

    This method can be called in any state and calling it does not change the object state.

    setOnPreparedListener

    any

    {}

    This method can be called in any state and calling it does not change the object state.

    setOnSeekCompleteListener

    any

    {}

    This method can be called in any state and calling it does not change the object state.

    setScreenOnWhilePlaying any

    {}

    This method can be called in any state and calling it does not change the object state.

    setVolume

    {Idle, Initialized, Stopped, Prepared, Started, Paused, PlaybackCompleted}

    {Error}

    Successful invoke of this method does not change the state.
    setWakeMode

    any

    {}

    This method can be called in any state and calling it does not change the object state.

    start

    {Prepared, Started, Paused, PlaybackCompleted}

    {Idle, Initialized, Stopped, Error}

    Successful invoke of this method in a valid state transfers the object to theStarted state. Calling this method in an invalid state transfers the object to the Error state.

    stop

    {Prepared, Started, Stopped, Paused, PlaybackCompleted}

    {Idle, Initialized, Error}

    Successful invoke of this method in a valid state transfers the object to theStopped state. Calling this method in an invalid state transfers the object to the Error state.

    getTrackInfo

    {Prepared, Started, Stopped, Paused, PlaybackCompleted}

    {Idle, Initialized, Error}

    Successful invoke of this method does not change the state.

    addTimedTextSource

    {Prepared, Started, Stopped, Paused, PlaybackCompleted}

    {Idle, Initialized, Error}

    Successful invoke of this method does not change the state.

    selectTrack

    {Prepared, Started, Stopped, Paused, PlaybackCompleted}

    {Idle, Initialized, Error}

    Successful invoke of this method does not change the state.

    deselectTrack

    {Prepared, Started, Stopped, Paused, PlaybackCompleted}

    {Idle, Initialized, Error}

    Successful invoke of this method does not change the state.

    4. 參考文献

    [1] Android MediaPlayer API  http://developer.android.com/reference/android/media/MediaPlayer.html



  • 相关阅读:
    cad怎么样创建动态块
    块定义从一个图形传到当前图形
    AutoCAD200X\Support\acad.lsp 启动时自动加载dll
    菜单变灰
    CAD实体双击弹出自定义窗体,可根据扩展数据(通用)
    转载:双击实体弹出对话框(重载AcDbDoubleClickEdit)
    当前已保存的用户坐标系坐标点到世界坐标系的转换
    Windows下编译PHP的C扩展
    flexpaper使用介绍
    IE6 png处理
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7017183.html
Copyright © 2011-2022 走看看