自研HLS播放器接口说明
更新时间:
本文介绍Android应用端,自研HLS播放器接口的详细信息。
构造方法
/**
*构造方法
*@param applicationContext ApplicationContext
*/
HlsPlayer(Context applicationContext);
设置播放地址
/**
* 设置播放源
* @param url HLS播放地址
*/
void setDataSource(String url) 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();
设置回放速率
/**
* 设置播放速率
* 须在以下状态调用时有效:
*{@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)
设置播放器音量
/**
* 设置播放器音量
* @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)
设置SurfaceView
/**
*设置SurfaceView,必须为GLSurfaceView,同一个Window中同时只允许一个播放器播放,若需要支持多播放实例,请使用TextureView
*注意GLSurfaceView必须在Activity的onResume和onPause回调方法中调用GLSurfaceView的onResume和onPause方法
*GLSurfaceView及其容器不可设置背景色
*@param surfaceview
*/
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 单位为毫秒
*/
long getCurrentPosition();
获取视频总时长
/**
* 获取视频总时长
* 播放器状态为{@link #STATE_READY},即缓冲结束开始播放状态时调用有效
* @return 单位为毫秒
*/
long getDuration();
获取音量
/**
* 获取音量
* @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);
}
反馈
- 本页导读 (1)
文档反馈