设备录像点播播放器接口说明

本文介绍Android应用端,设备录像点播播放器接口的详细信息。

构造方法

/**
   * 构造方法
   * @param applicationContext ApplicationContext
   */    
  VodPlayer(Context applicationContext);

设置非加密播放源

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

设置加密播放源

/**
   * 设置加密播放源(请确保播放源做过AES加密)
   * @param url                RTMP源地址
   * @param isEncrypted 是否是加密源
   * @param decryptIv     解密向量,16 byte array
   * @param decryptKey  解密密钥,16 byte array
   * @throws IllegalArgumentException
   */
  void setDataSource(String url, boolean isEncrypted, byte[] decryptIv, byte[] decryptKey) throws IllegalArgumentException;

校验和准备数据

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

开始或恢复播放视频

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

暂停播放

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

跳转到指定位置

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

停止播放

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

重置播放器

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

释放播放器资源

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

截图

/**
   * 当前视频画面截图
   * @return 如果当前无画面则返回null
   */
  Bitmap snapShot();

截图到文件

/**
     * 当前视频画面截图
     * @param jpegFile保存截图的JPEG文件
     * @return 返回true表示文件保存成功
     */
    boolean snapShotToFile(File jpegFile);

开始录屏

/**
   * 开始录制当前播放内容,生成MPEG-4格式转存到指定的文件中
   * 文件名后缀必须为mp4
   * 须在{@link PlayerState#STATE_READY}时调用有效
   * @param contentFile
   * @return 操作成功与否
   */
  boolean startRecordingContent(File contentFile) throws IOException;

获取当前录制的视频时长

    /**
     * 获取当前录制的视频时长
     * @return 单位为毫秒
     */
    long getCurrentRecordingContentDuration();

结束录屏

/**
   * 停止记录播放内容
   * @return 操作成功与否
   */
  boolean stopRecordingContent();

设置播放器音量

/**
   * 设置播放器音量
   * @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);

设置播放停止时的画面绘制策略

/**
*设置播放停止时的画面绘制策略
*@param playerStoppedDrawingMode
*ALWAYS_KEEP_LAST_FRAME  播放停止时始终保留最后一帧画面
*KEEP_LAST_FRAME_WITHOUT_ERROR  (默认是此模式)只有播放停止后未出现错误时,才保留最后一帧画面
*ALWAYS_BLACK   播放停止时始终显示黑色
*/
void setPlayerStoppedDrawingMode(PlayerStoppedDrawingMode playerStoppedDrawingMode)

设置SurfaceVview

/**
*设置SurfaceView,必须为GLSurfaceView,同一个Window中同时只允许一个播放器播放,若需要支持多播放实例,请使用TextureView
*注意GLSurfaceView必须在Activity的onResume和onPause回调方法中调用GLSurfaceView的onResume和onPause方法
*GLSurfaceView及其容器不可设置背景色
*@param SurfaceVview
*/
  void setSurfaceView(SurfaceView surfaceview);

清除SurfaceView

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

设置TextureView

/**
     * 设置TextureView,同一个TextureView不可被多个播放器共享,提供ZoomableTextureView带手势放缩处理可做参照
     * @param TextureView
     */
    void setTextureView(TextureView textureView);

清除TextureView

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

设置是否由外部完成YUV数据的渲染

    /**
     * 设置是否由外部完成YUV数据的渲染
     * @param useExternalRender true为由外部渲染,false为由内部渲染
     */
    void setUseExternalRender(boolean useExternalRender);

获取是否使用外部渲染

    /**
     * 获取是否使用外部渲染
     * @return true为由外部渲染,false为由内部渲染
     */
    boolean useExternalRender();

设置外部渲染监听器

    /**
     * 设置外部渲染监听器
     * @param onExternalRenderListener
     */
    void setOnExternalRenderListener(OnExternalRenderListener onExternalRenderListener);public interface OnExternalRenderListener{

public interface OnExternalRenderListener{
    /**
     * 通知已经有YUV数据帧需要被渲染
     * @param width 视频帧宽
     * @param height 视频帧高
     * @param timestamp 时间戳,单位为毫秒
     */
    void onVideoFrameUpdate(int width, int height ,long timestamp);
}

获取YUV帧数据用于渲染

    /**
     * 获取YUV帧数据用于渲染,只在外部渲染模式下有效
     * @return Yuv420p格式视频帧
     */
    Yuv420pFrame getYuvFrame();

设置SEI信息监听器

    /**
     * 设置SEI信息监听器
     *
     * @param seiInfoBuffer  创建用于存储SEI帧数据的缓存,必须保证码流中的SEI信息长度不会超过缓存大小,超过的帧将会被丢弃
     * @param onSeiInfoListener
     */
    void setOnSeiInfoListener(SeiInfoBuffer seiInfoBuffer, OnSeiInfoListener onSeiInfoListener);

interface OnSeiInfoListener{
    /**
     * 当SEI信息更新时回调
     * 请不要执行阻塞的操作,并在该回调中及时处理seiInfoBuffer数据
     * @param seiInfoBuffer
     */
    void onSeiInfoUpdate(SeiInfoBuffer seiInfoBuffer);
}
       

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

/**
   * 设置数据源准备就绪事件监听器
   * @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);
}

设置播放到内容结束事件监听器

/**
   * 设置播放到内容结束事件监听器
   * 收到该事件后,需要调用stop,播放器状态才会切到STATE_END
   * @param listener
   */
  void setOnCompletionListener(OnCompletionListener listener);

interface OnCompletionListener {
    /**
     * 播放到文件末尾回调
     */
    void onCompletion();
}

获取当前播放进度

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

获取视频总时长

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

设置回放速率

     /**
     * 设置播放速率
     * 须在{@link PlayerState#STATE_BUFFERING}及{@link PlayerState#STATE_READY}时调用有效
     * 非1倍速率下默认关闭声音
     * @param speed 只支持1/16、1/8、1/4、1/2、1、2、4、8、16倍速
     */
    void setPlaybackSpeed(float speed)

获取音量

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

获取播放器状态

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

获取播放器当前流的连接类型

/**
   * 获取播放器当前流的连接类型
   * 播放器状态为{@link PlayerState#STATE_READY},即缓冲结束开始播放状态时调用有效
   * @return {@link StreamConnectType}
   */
  StreamConnectType getStreamConnectType();

获取播放器当前的帧率、码率等信息

/**
   * 获取播放器当前的帧率、码率等信息
   * 播放器状态为以下状态时有效:
   * {@link PlayerState#STATE_BUFFERING}:缓冲中状态
   * {@link PlayerState#STATE_READY}:缓冲结束开始播放状态
   * @return 包含帧率/码率等信息的JSON string
   */
  PlayInfo getCurrentPlayInfo();

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);
    }