/**
播放器播放视频的类型
*/
typedef NS_ENUM(NSInteger, QHVCPlayType)
{
QHVCPlayTypeLive = 0,//直播
QHVCPlayTypeVod = 1,//点播
};
//直播用
typedef NS_ENUM(NSInteger, QHVCStreamType)
{
QHVCStreamTypeOnlyAudio = 0,//仅音频
QHVCStreamTypeOnlyVideo = 1,//仅视频
QHVCStreamTypeDefault = 2,//默认方式(音、视频)
};
/**
播放器渲染模式
*/
typedef NS_ENUM(NSInteger, QHVCPlayerRenderMode)
{
QHVCPlayerRenderModeIn = 0,//默认,窗口内缩放,不填充屏幕
QHVCPlayerRenderModeOut = 1,//填充整个屏幕,可能丢失显示内容,但不会变形
QHVCPlayerRenderModeFull = 2,//全屏显示,可能会变形
};
/**
定义播放器错误信息
*/
typedef NS_ENUM(NSInteger, QHVCPlayerError)
{
QHVCPlayerErrorPlayerInitFailed = 1,//播放器初始化失败
QHVCPlayerErrorConnectFailed = 2,//播放器连接失败,比如网络连接
QHVCPlayerErrorFormatNotSupport = 3,//文件格式不支持
QHVCPlayerErrorFileNotOpen = 4,//文件打开失败
};
/**
播放器详细错误信息
*/
typedef NS_ENUM(NSInteger, QHVCPlayerErrorDetailedInfo)
{
//播放器内部错误
QHVCPlayerErrorDetailedInfoUnknow = 0,//未知消息
QHVCPlayerErrorDetailedInfoIOException = 1,//I/O异常
QHVCPlayerErrorDetailedInfoConnectRefused = 2,//拒绝连接
QHVCPlayerErrorDetailedInfoInvalidData = 3,//无效的数据
QHVCPlayerErrorDetailedInfoExit = 4,//退出,可能注册了无效的过滤器
QHVCPlayerErrorDetailedInfoNotBitstream = 5,//找不到Bitstream
QHVCPlayerErrorDetailedInfoNotDecoder = 6,//找不到解码器
QHVCPlayerErrorDetailedInfoNotDemuxer = 7,//找不到demuxer
QHVCPlayerErrorDetailedInfoNotFilter = 8,//找不到Filter
QHVCPlayerErrorDetailedInfoNotProtocol = 9,//找不到Protocol
QHVCPlayerErrorDetailedInfoNotStream = 10,//找不到Stream
QHVCPlayerErrorDetailedInfoServer = 11,//server 错误
QHVCPlayerErrorDetailedInfoEOF = 12,//EOF
//SDK层错误
QHVCPlayerErrorDetailedInfoHandleError = 13,//播放器初始化handle为空
QHVCPlayerErrorDetailedInfoNotReadyToPlay = 14,//prepare failed
};
/**
播放器状态
*/
typedef NS_ENUM(NSInteger, QHVCPlayerStatus)
{
QHVCPlayerStatusUnknown = 0,//未知类型
QHVCPlayerStatusPlaying = 1,//播放
QHVCPlayerStatusPaused = 2,//暂停
QHVCPlayerStatusStoped = 3,//会话关闭
};
/**
日志级别
*/
typedef NS_ENUM(NSInteger, QHVCPlayerLogLevel)
{
QHVCPlayerLogLevelTrace = 0,//trace
QHVCPlayerLogLevelDebug = 1,//debug
QHVCPlayerLogLevelInfo = 2,//info
QHVCPlayerLogLevelWarn = 3,//warn
QHVCPlayerLogLevelError = 4,//error
QHVCPlayerLogLevelAlarm = 5,//alarm
QHVCPlayerLogLevelFatal = 6,//fatal
};
@class QHVCPlayer;
/**
播放器状态delegate
*/
@protocol QHVCPlayerDelegate <NSObject>
@required
/**
播放器首次加载缓冲准备完毕,在此回调中调用play开始播放
*/
- (void)onPlayerPrepared:(QHVCPlayer *_Nonnull)player;
/**
播放器首屏渲染,可以显示第一帧画面
*/
- (void)onPlayerFirstFrameRender:(NSDictionary *_Nullable)mediaInfo player:(QHVCPlayer *_Nonnull)player;
/**
播放结束回调
*/
- (void)onPlayerFinish:(QHVCPlayer *_Nonnull)player;
@optional
/**
* 视频大小变化通知
*
* @param width 视频宽度
* @param height 视频高度
*/
- (void)onPlayerSizeChanged:(int)width height:(int)height player:(QHVCPlayer *_Nonnull)player;
/**
开始缓冲(buffer为空,触发loading)
*/
- (void)onPlayerBufferingBegin:(QHVCPlayer *_Nonnull)player;
/**
* 缓冲进度(buffer loading进度)
*
* @param progress 缓冲进度,progress==0表示开始缓冲, progress==100表示缓冲结束
*/
- (void)onPlayerBufferingUpdate:(int)progress player:(QHVCPlayer *_Nonnull)player;
/**
缓冲完成(buffer loading完成,可以继续播放)
*/
- (void)onPlayerBufferingComplete:(QHVCPlayer *_Nonnull)player;
/**
播放进度回调
@param progress 播放进度
*/
- (void)onPlayerPlayingProgress:(CGFloat)progress player:(QHVCPlayer *_Nonnull)player;
/**
测试用
@param mediaInfo 视频详细参数
*/
- (void)onplayerPlayingUpdatingMediaInfo:(NSDictionary *_Nullable)mediaInfo player:(QHVCPlayer *_Nonnull)player;
/**
* 拖动操作缓冲完成
*/
- (void)onPlayerSeekComplete:(QHVCPlayer *_Nonnull)player;
/**
* 播放器错误回调
*
* @param error 错误类型
* @param extraInfo 额外的信息
*/
- (void)onPlayerError:(QHVCPlayerError) error extra:(QHVCPlayerErrorDetailedInfo)extraInfo player:(QHVCPlayer *_Nonnull)player;
/**
* 播放状态回调
*
* @param info 参见状态信息枚举
* @param extraInfo 扩展信息
*/
- (void)onPlayerInfo:(QHVCPlayerStatus)info extra:(NSString * _Nullable)extraInfo player:(QHVCPlayer *_Nonnull)player;
/**
码率切换成功
@param index 播放index
*/
- (void)onPlayerSwitchResolutionSuccess:(int)index player:(QHVCPlayer *_Nonnull)player;
/**
码率切换失败
@param errorMsg errorMsg description
*/
- (void)onPlayerSwitchResolutionFailed:(NSString *_Nullable)errorMsg player:(QHVCPlayer *_Nonnull)player;
/**
主播切入后台
*/
- (void)onPlayerAnchorInBackground:(QHVCPlayer *_Nonnull)player;
/**
系统音量回调
@param volume 系统音量
*/
- (void)onPlayerSystemVolume:(float)volume;
@end
@interface QHVCPlayer : NSObject
/**
播放器状态delegate
*/
@property (nonatomic, weak) _Null_unspecified id<QHVCPlayerDelegate> playerDelegate;
/**
播放器状态
*/
@property (nonatomic, assign) QHVCPlayerStatus playerStatus;
/**
初始化播放器
@param URL 需要播放到URL
@param channelId 渠道ID,使用者从平台申请,eg:live_huajiao_v2
@param userId 用户ID,用户标识,唯一标识(需要详细说明)
@param playType 播放类型,直播、点播、本地
@return 成功:播放器对象, 失败:nil
*/
- (QHVCPlayer * _Nullable)initWithURL:(NSString * _Nonnull)URL
channelId:(NSString * _Nullable)channelId//内部默认值
userId:(NSString * _Nullable)userId//内部默认值
playType:(QHVCPlayType)playType;
/**
通知栏辅助进程初始化播放器
@param URL 需要播放到URL
@param channelId 渠道ID,使用者从平台申请,eg:live_huajiao_v2
@param userId 用户ID,用户标识,唯一标识(需要详细说明)
@param playType 播放类型,直播、点播、本地
@return 成功:播放器对象, 失败:nil
*/
- (QHVCPlayer * _Nullable)initWithAssistProcessURL:(NSString * _Nonnull)URL
channelId:(NSString * _Nullable)channelId//内部默认值
userId:(NSString * _Nullable)userId//内部默认值
playType:(QHVCPlayType)playType;
/**
初始化播放器(若需要设置解码类型、流类型用如下初始化接口,更多设置请用Advance内部初始化接口)
@param URL 需要播放到URL
@param channelId 渠道ID,使用者从平台申请,eg:live_huajiao_v2
@param userId 用户ID,用户标识,唯一标识(需要详细说明)
@param playType 播放类型,直播、点播、本地
@param options @{@"streamType":@"streamType",@"hardDecode":@"boolValue",@"position":@"longValue",@"mute":@"boolValue",@"forceP2p":@"boolValue",@"useP2pUpload":@"boolValue"}
@return 成功:播放器对象, 失败:nil
*/
- (QHVCPlayer * _Nullable)initWithURL:(NSString * _Nonnull)URL
channelId:(NSString * _Nullable)channelId//内部默认值
userId:(NSString * _Nullable)userId//内部默认值
playType:(QHVCPlayType)playType
options:(NSDictionary *_Nullable)options;
/**
初始化播放器(需要切换码率时用如下初始化接口)
@param urlArray 多分辨播放源
@param playIndex 初始播放索引
@param channelId 渠道ID,使用者从平台申请,eg:live_huajiao_v2
@param userId 用户ID,用户标识,唯一标识(需要详细说明)
@param playType 播放类型,直播、点播、本地
@param options @{@"streamType":@"streamType",@"hardDecode":@"boolValue",@"position":@"longValue",@"mute":@"boolValue",@"forceP2p":@"boolValue",@"useP2PUpload":@"boolValue"}
@return 成功:播放器对象, 失败:nil
*/
- (QHVCPlayer * _Nullable)initWithUrlArray:(NSArray<NSString *> *_Nullable)urlArray
playIndex:(int)playIndex
channelId:(NSString * _Nullable)channelId//内部默认值
userId:(NSString * _Nullable)userId//内部默认值
playType:(QHVCPlayType)playType
options:(NSDictionary *_Nullable)options;
/**
设置播放器填充模式
@param mode 默认,窗口内缩放,不填充屏幕
*/
- (void)setRenderMode:(QHVCPlayerRenderMode)mode;
/**
切换码率
@param index 索引
@return success or not
*/
- (BOOL)switchResolutionWithIndex:(int)index;
/**
自动切换码率
@param isAutomatically yes or no
*/
- (void)setAutomaticallySwitchResolution:(BOOL)isAutomatically;
/**
创建播放器渲染playerView
@return playerView
*/
- (UIView *_Nonnull)createPlayerViewWithFrame:(CGRect)frame;
/**
创建播放器渲染playerView(add在传入的view上)
@param view playerView
*/
- (void)createPlayerView:(UIView *_Nonnull)view;
/**
释放player时候是否移除playerView
@param remove 默认移除
*/
- (void)removePlayerViewWhenPlayerRelease:(BOOL)remove;
/**
播放器准备播放,准备完毕后回调onPrepared
*/
- (void)prepare;
/**
播放器准备完成后调用该接口开始播放,调用时机说明:播放器准备完成后会回调QHVCPlayerDelegate中的onPrepared方法,在该方法中调用play开始播放
*/
- (void)play;
/**
点播视频暂停播放, 直播场景调用无效,暂停后继续播放使用play
*/
- (void)pause;
/**
播放器停止播放
*/
- (void)stop;
/**
播放过程中改变进度操作,直播场景无效
* @param positionByMS 点播视频位置,单位秒(millisecond)
* @return 成功:YES,失败:NO
*/
- (BOOL)seekTo:(NSTimeInterval)positionByMS;
/**
点播视频当前播放时间
@return 点播视频场景下获取当前播放时间,单位秒
*/
- (NSTimeInterval)getCurrentPosition;
/**
点播视频总时长
@return 点播视频总时长,直播时调用无效,单位秒
*/
- (NSTimeInterval)getDuration;
/**
获取播放器回看缓冲下载进度
@return <0失败, >0成功
*/
- (double)getDownloadProgress;
- (nullable NSDictionary *)getP2pInfo;
/**
回调系统音量
@param callback 是否回调
*/
- (void)setSystemVolumeCallback:(BOOL)callback;
/**
隐藏系统音量视图
@param hidden 是否隐藏
*/
- (void)setSystemVolumeViewHidden:(BOOL)hidden;
/**
设置音量
@param volume 音量范围 0.0~1.0 (1.0最大)
@return YES:成功, NO:失败
*/
- (BOOL)setVolume:(float)volume;
/**
获取播放器当前音量
@return 音量范围 0.0~1.0 (1.0最大)
*/
- (float)getVolume;
/**
设置静音
@param mute 是否静音
*/
- (void)setMute:(BOOL)mute;
/**
是否静音
@return yes or no
*/
- (BOOL)isMute;
/**
视频边缘模糊化
@param edgeBlur yes:打开 or no:关闭
*/
- (void)setEdgeBlur:(BOOL)edgeBlur;
/**
设置日志级别
@param level 日志级别
*/
+ (void)setLogLevel:(QHVCPlayerLogLevel)level;
/**
设置日志输出block
@param logOutput 接收日志block
*/
+ (void)setLogOutputBlock:(void (^_Nonnull)(int loggerID, QHVCPlayerLogLevel level, const char * _Nonnull data))logOutput;
/**
版本号
@return 版本号
*/
+ (NSString *_Nonnull)getVersion;