MediaController简介

MediaController简介

官方API 文档

MediaController | Android Developers

使用demo

Android自带的MediaController实现网络播放和本地播放

结合VideoView和MediaController的例子简单介绍下

base/core/java/android/widget/VideoView.java

public class VideoView extends SurfaceView
        implements MediaPlayerControl, SubtitleController.Anchor {

     // ....
    // MediaPlayerControl 接口类方法实现
    @Override
    public void start() {
        if (isInPlaybackState()) {
            mMediaPlayer.start();
            mCurrentState = STATE_PLAYING;
        }
        mTargetState = STATE_PLAYING;
    }
    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(isInPlaybackState());
        }
    }
}

可以看到VideoView 其继承是SurfaceView 和实现了MediaPlayerControl, SubtitleController.Anchor 接口

实现 MediaPlayerControl 接口主要是将 VideoView class this 指针传递给,所以 MediaController 中的事件监听,比如上下片源切换,快进快退就可以通过MediaPlayerControl 接口类实现回调到 VideoView 中,这样子就操作到具体对应的MediaPlayer 方法

base/core/java/android/widget/MediaController.java

    public interface MediaPlayerControl {
        void    start();
        void    pause();
        int     getDuration();
        int     getCurrentPosition();
        void    seekTo(int pos);
        boolean isPlaying();
        int     getBufferPercentage();
        boolean canPause();
        boolean canSeekBackward();
        boolean canSeekForward();

        /**
         * Get the audio session id for the player used by this VideoView. This can be used to
         * apply audio effects to the audio track of a video.
         * @return The audio session, or 0 if there was an error.
         */
        int     getAudioSessionId();
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容