ExoPlayer HLS播放器接口说明

ExoPlayer HLS播放器基于ExoPlayer框架开发,本文介绍Android应用端,ExoPlayer HLS播放器接口的详细信息。

构造方法

ExoHlsPlayer(Context context);

设置M3U8播放地址

/**
   * 设置播放源
   * @param url M3U8地址
   */
  void setDataSource(String url);

按云存储录像的文件名设置视频数据源

/**
   * 按云存储录像的文件名设置视频数据源
   * @param iotId    设备iotId
   * @param fileName 录像文件名
   */
   void setDataSourceByIPCRecordFileName(String iotId, String fileName);

校验和准备数据

/**
   * 校验和准备数据
   */
  void prepare();

开始或恢复播放视频

/**
   * 开始播放或恢复播放视频
   */
  void start();

暂停播放

/**
   * 暂停播放, 调用start()恢复播放
   */
  void pause();

跳转到指定位置

/**
   * 跳转到指定位置
   * @param position 单位为毫秒
   */
  void seekTo(long positionInMs);

停止播放

**
   * 停止播放
   */
  void stop();

重置播放器

/**
   * 重置播放器
   */
  void reset();

释放播放器资源

/**
   * 释放播放器资源
   */
  void release();

设置是否循环播放

/**
  * 设置是否循环播放
  * @param circlePlay true为循环播放
  */
  void setCirclePlay(boolean circlePlay);

设置回放速率

/**
  * 设置回放的播放速率
  * @param speed 表示速率因子,取值范围为(0,2],1表示正常速率
  */
  void setPlaybackSpeed(float speed);

设置播放器音量

/**
   * 设置播放器音量
   * @param audioVolume范围为0~1,0为静音
   */
  void setVolume(float audioVolume);

设置音频流通道类型

/**
   * 设置音频流通道类型,参见{@link android.media.AudioManager}
   * 如果音频正在播放,则会因为重新创建AudioTrack导致有短暂停顿
   * @param audioStreamType
   */
  void setAudioStreamType(int audioStreamType);

设置画面缩放模式

/**
   * 设置视频画面缩放模式,默认为{@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING}
   * @param videoScalingMode 参见:
   * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT}
   * {@link android.media.MediaCodec#VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING}
   */
  void setVideoScalingMode(int videoScalingMode);

设置SurfaceView

/**
   * 设置SurfaceView
   * @param surfaceview
   */
  void setSurfaceView(SurfaceView surfaceview);

清除SurfaceView

/**
   * 清除surfaceview
   */
  void clearSurfaceView();

设置TextureView

/**
     * 设置TextureView,同一个TextureView不可被多个播放器共享,提供支持手势操作的控件ZoomableTextureView可做参照
     * @param textureview
     */
    void setTextureView(TextureView textureView);

清除TextureView

/**
     * 清除textureview
     */
    void clearTextureView();

设置数据源准备就绪事件监听器

/**
   * 设置数据源准备就绪事件监听器
   * @param listener
   */
  void setOnPreparedListener(OnPreparedListener listener);

interface OnPreparedListener {
    /**
     * 数据源准备就绪回调
     */
    void onPrepared();
}

设置播放器错误事件监听器

/**
   * 设置播放器错误事件监听器,错误类型参见:
   * {@link PlayerException.SOURCE_ERROR}
   * {@link PlayerException.RENDER_ERROR}
   * {@link PlayerException.UNEXPECTED_ERROR}
   * @param listener
   */
  void setOnErrorListener(OnErrorListener listener);

interface OnErrorListener{
    /**
     * 播放器错误回调,参见
     * {@link PlayerException}
     * @param exception
     */
    void onError(PlayerException exception);
}

设置播放状态变更事件监听器

/**
   * 设置播放状态变更事件监听器
   * @param listener
   */
  void setOnPlayerStateChangedListener(OnPlayerStateChangedListener listener);

interface OnPlayerStateChangedListener{
    /**
     * 播放器状态变更回调
     *
     * @param playerState 参见
     *                    {@link PlayerState#STATE_IDLE}
     *                    {@link PlayerState#STATE_BUFFERING}
     *                    {@link PlayerState#STATE_READY}
     *                    {@link PlayerState#STATE_ENDED}
     */
    void onPlayerStateChange(int playerState);
}

设置首帧被渲染事件监听器

/**
   * 设置首帧被渲染事件监听器
   * @param listener
   */
  void setOnRenderedFirstFrameListener(OnRenderedFirstFrameListener listener);

 interface OnRenderedFirstFrameListener {
    /**
     * 首帧被渲染回调
     */
    void onRenderedFirstFrame();
}

设置视频内容宽高变更回调

    /**
     * 设置视频内容宽高变更回调
     * @param listener
     */
    void setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener);

 interface OnVideoSizeChangedListener{

    /**
     * 内容宽高改变时的回调
     *
     * @param width  视频内容宽,单位为像素
     * @param height 视频内容高,单位为像素
     */
    void onVideoSizeChanged(int width, int height);
}

获取当前播放进度

/**
   * 获取当前播放进度,相对于开始位置的偏移量
   * 播放器状态为{@link PlayerState#STATE_READY}时调用有效
   * @return 单位MS
   */
  long getCurrentPosition();

获取视频总时长

/**
   * 获取视频总时长
   * 播放器状态为{@link #STATE_READY}时调用有效
   * @return 单位MS
   */
  long getDuration();

获取音量

/**
   * 获取音量
   * @return 取值范围0~1
   */
  float getVolume();

获取播放器状态

/**
   * 获取播放状态
   * @return 状态枚举:
   * {@link PlayerState#STATE_IDLE} 播放器初始状态
   * {@link PlayerState#STATE_BUFFERING} 缓冲中状态
   * {@link PlayerState#STATE_READY} 缓冲结束开始播放状态
   * {@link PlayerState#STATE_ENDED} 播放完成状态
   */
  int getPlayState();

ZoomableTextureView相关接口

设置画面放大倍数上限

    /**
     * 设置画面放大倍数上限
     * 默认为4倍
     *
     * @param scale 倍数
     */
    void setMaxScale(float scale);

重置画面缩放比例为1

    /**
     * 重置画面缩放比例为1
     *
     * @param smooth 是否带有平滑变化效果
     */
    void zoomOut(boolean smooth);

获取当前缩放比

    /**
     * 获取当前缩放比
     *
     * @return  未放缩时为1.0f
     */
    float getScale();

设置监听器

    /* 设置监听器
     * @param listener
     */
    void setOnZoomableTextureListener(OnZoomableTextureListener listener);

    public interface OnZoomableTextureListener{

        /**
         * 当画面缩放比例发生变化时回调
         *
         * @param zoomableTextureView
         * @param scale               画面缩放比例
         */
        void onScaleChanged(ZoomableTextureView zoomableTextureView, float scale);

        /**
         * view双击事件回调
         *
         * @param zoomableTextureView
         * @param e                   MotionEvent
         * @return 事件是否被处理,如果返回false,则会启用内部缩放逻辑
         */
        boolean onDoubleTap(ZoomableTextureView zoomableTextureView, MotionEvent e);

        /**
         * view单击事件回调
         *
         * @param zoomableTextureView
         * @param e                   MotionEvent
         * @return 事件是否被处理
         */
        boolean onSingleTapConfirmed(ZoomableTextureView zoomableTextureView, MotionEvent e);

        /**
         * view长按事件回调
         *
         * @param zoomableTextureView
         * @param e                   MotionEvent
         */
        void onLongPress(ZoomableTextureView zoomableTextureView, MotionEvent e);
    }

设置边缘监听器


     void setOnViewEdgeListener(OnViewEdgeListener listener)

     interface OnViewEdgeListener{

        /**
         * 当第一次拖动到view的边缘
         */
        void onViewEdgeFirstTouched();

        /**
         * 当拖动到view下边缘,持续拖动会持续回调
         *
         * @param zoomableTextureView
         * @param delta    持续处于边缘时触摸移动相对上次的差值
         */
        void onBottomEdge(ZoomableTextureView zoomableTextureView, float delta);

        /**
         * 当拖动到view上边缘,持续拖动会持续回调
         *
         * @param zoomableTextureView
         * @param delta               持续处于边缘时触摸移动相对上次的差值
         */
        void onTopEdge(ZoomableTextureView zoomableTextureView, float delta);

        /**
         * 当拖动到view右边缘,持续拖动会持续回调
         *
         * @param zoomableTextureView
         * @param delta               持续处于边缘时触摸移动相对上次的差值
         */
        void onRightEdge(ZoomableTextureView zoomableTextureView, float delta);

        /**
         * 当拖动到view左边缘,持续拖动会持续回调
         *
         * @param zoomableTextureView
         * @param delta               持续处于边缘时触摸移动相对上次的差值
         */
        void onLeftEdge(ZoomableTextureView zoomableTextureView, float delta);
    }

阿里云首页 物联网视频服务 相关技术圈