@interface KSMediaPlayer : NSObject
点播播放器类,提供点播播放能力。
@property (nonatomic, strong, readonly, nullable) UIView *playerView;
播放器视图,用来渲染视频画面,需要添加到父视图。
@property (nonatomic, assign) KSMediaPlayerScalingMode scalingMode;
播放器视图的缩放模式,默认为KSMediaPlayerScalingMode_AspectFit。
@property (nonatomic, weak, nullable) id<KSMediaPlayerDelegate> delegate;
播放器代理,提供播放器的事件等回调。
@property (nonatomic, weak, nullable) id<KSMediaPlayerDownloadDelegate> downloadDelegate;
播放器数据下载代理。
@property (nonatomic, strong, nonnull) KSMediaPlayerVideoContext *videoContext;
用来传入数据统计和触发后端转码流程的必要参数。
@property (nonatomic, assign) KSMediaPlayerScene scene;
播放场景,比如上下滑、点击等,SDK可以针对不同的场景进行相应的优化。
@property (nonatomic, assign) float playbackRate;
设置倍速播放《小于1.0:慢速播放》《大于1.0:快速播放 》《1.0<默认>:正常速度》。
@property (nonatomic, assign) BOOL enableHardwareDecode;
设置是否支持开启硬解 ,默认Yes。
@property (nonatomic, assign) BOOL enableAccurateSeek;
设置是否支持精准seek ,默认Yes。
@property (nonatomic, assign) BOOL shouldMute;
设置是否静音 默认NO。
@property (nonatomic, assign) BOOL shouldAutoplay;
设置是否自动播放,默认NO。
如过设置为YES放器在调用- (void)prepareToPlay方法,准备完成之后会自动播放。
如果设置为NO播放器在调用- (void)prepareToPlay方法,准备完成之后不会自动播放。
需要在- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer eventChanged:(KSMediaPlayerEvent)event代理中KSMediaPlayerEvent_IsPrepared事件回调之后调用- (void)play方法播放
@property (nonatomic, assign) BOOL shouldPlayInBackground;
设置是否后台播放,默认NO。
设置为NO,播放状态下进入后台会自动暂停,切回前台会自动播放。
设置为YES,播放器进入后台不会暂停播放。如果支持后台播放,需要在XCode -> TARGETS -> Capablities申请Background Modes并且将该字段设为YES
@property (nonatomic, assign) BOOL shouldPlayFromHistory;
是否同一视频从历史进度起播,默认NO。
@property (nonatomic, assign) BOOL videoMirror;
视频镜像,默认NO。
@property (nonatomic, assign, readonly) NSTimeInterval duration;
获取资源时长。
@property (nonatomic, assign, readonly) NSTimeInterval playableDuration;
获取资源可播时长。
@property (nonatomic, assign) NSTimeInterval currentPlaybackTime;
获取当前播放进度。
@property (nonatomic, assign, readonly) NSInteger bufferingProgress;
获取缓冲进度,百分比。
@property (nonatomic, assign, readonly) CGSize videoResolution;
获取视频分辨率。
@property (nonatomic, assign, readonly) BOOL shouldLoop;
获取是否循环播放。
@property (nonatomic, assign, readonly) BOOL isPreparedToPlay;
获取是否已经准备好,可以播放。
@property (nonatomic, assign, readonly) BOOL isPlaying;
获取是否正在播。
@property (nonatomic, strong, readonly) KSMediaPlayerManifestDispatchResult * _Nullable manifestDisposeResult;
获取当前manifest调度结果。
@property (nonatomic, strong, readonly) KSMediaPlayerDebugInfo * _Nullable debugInfo;
获取debugInfo。
@property (nonatomic, assign, readonly) KSMediaPlayerPlaybackState playbackState;
当前的播放状态。
@property(nonatomic, assign, readonly) BOOL isVideoFirstFrameRender;
获取视频第一帧是否已经渲染完成。
@property(nonatomic, assign, readonly) BOOL isAudioFirstFrameRender;
获取音频第一帧是否已经渲染完成。
@property(nonatomic, assign, readonly) BOOL isBuffering;
获取是否正在缓冲。
@property(nonatomic, assign, readonly) BOOL isSeeking;
获取是否正在seek。
@property(nonatomic, assign, readonly) float leftVolume;
@property(nonatomic, assign, readonly) float rightVolume;
获取右声道音量。
@property (nonatomic, assign) BOOL enablePipModeRender;
是否允许小窗模式渲染,如果不是在小窗模式一定要关闭
@property (nonatomic, readonly) BOOL isReused;
是否复用播放器实例。
@property (nonatomic, weak) UIView * _Nullable danmakuView;
弹幕view。
@property (nonatomic, copy) NSString * _Nullable maskVttContent;
弹幕防挡文件content (本地)。
@property (nonatomic, strong) NSURL * _Nullable maskVttURL;
弹幕防挡文件地址(远程)。
@property (nonatomic, assign) BOOL danmakuMaskEnable;
是否开启弹幕防挡。
@property (nonatomic, assign) KSMediaPlayerInteractiveMode interactiveMode;
播放器VR交互模式。
默认 KSMediaPlayerInteractiveModeMotion /**< 陀螺仪 */。
只有在调用了prepareToPlay接口后设置有效。
- (instancetype _Nullable)initWithUrl:(NSString *_Nonnull)url;
传入url初始化播放器。
- (instancetype _Nullable)initWithUrl:(NSString *_Nonnull)url cacheKey:(NSString *_Nullable)cacheKey;
传入url和cacheKey初始化点播播放器
- (instancetype _Nullable)initWithVodConfigurator:(void(^_Nonnull)(KSMediaPlayerVodConfigration *_Nonnull vodConfig))vodConfigurator;
传入configuration点播播放器。
- (instancetype _Nullable)initWithManifest:(NSString *_Nonnull)manifest;
传入manifest初始化点播播放器并指定档位。
- (instancetype _Nullable)initWithManifest:(NSString *_Nonnull)manifest qualityType:(NSString *_Nullable)qualityType;
传入manifest初始化点播播放器并指定档位。
- (void)prepareToPlay;
准备播放《播放器初始化后调用》。
准备完成会在- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer eventChanged:(KSMediaPlayerEvent)event代理中收到KSMediaPlayerEvent_IsPrepared事件。
如果shouldAutoplay设置为NO,需要在KSMediaPlayerEvent_IsPrepared事件代理回调之后调用- (void)play方法播放。
- (void)play;
播放。播放器准备完成后可调用。
如果shouldAutoplay设置为NO,需要在- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer eventChanged:(KSMediaPlayerEvent)event代理中收到KSMediaPlayerEvent_IsPrepared事件代理回调之后调用此方法播放。
- (void)pause;
暂停播放。
- (void)seekToTime:(CMTime)time;
Seek (单位秒) ,播放器Play之后调用。
Seek成功之后会在- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer eventChanged:(KSMediaPlayerEvent)event代理中收到KSMediaPlayerEvent_SeekComplete事件代理回调
- (void)setShouldLoop:(BOOL)shouldLoop;
设置是否循环播放。默认NO。
- (void)setVolume:(float)left right:(float)right;
设置播放音量。
- (void)stop;
停止播放和下载,不可恢复。但播放器不销毁。
- (void)destroy;
销毁播放器资源。
- (void)seekAtStart:(CMTime)time;
设置起播时间(毫秒)。需要在- (void)prepareToPlay方法前调用。
- (BOOL)retryPlayback;
播放重试,可在断网或网络切换导致的播放错误后调用,重试成功后自动从出错位置开始播放。
- (void)switchVideoQualityWithPlayUrl:(NSString *_Nonnull)playUrl;
单url切换清晰度。
- (void)switchVideoQualityWithQualityType:(NSString *_Nonnull)qualityType;
manifest切换清晰度。
- (void)disableLocalCache:(BOOL)disableCache;
是否关闭本地写缓存。
- (UIImage *_Nonnull)thumbnailImageAtCurrentTime;
获取当前帧截图。
- (void)refreshVttContent:(NSString *_Nonnull)vttContent;
更新弹幕防content(本地)。
收到mediaPlayer:danmakuMaskVttError:回调之后,调用此接口更新本地弹幕防挡content。
- (void)refreshVttURL:(NSURL *_Nonnull)vttURL;
更新弹幕防文件(远程)。
收到mediaPlayer:danmakuMaskVttError:回调之后,调用此接口弹幕更新防挡文件地址(远程)。
- (void)updateMaskWithVideoFrame:(CGRect)videoFrame;
playerView frame发生变化时 传入playerView相对danmakuView的相对frame来更新防挡区域。
- (void)addSubtitles:(NSArray<NSURL *> *_Nonnull)subtitles selectedIndex:(NSUInteger)selectedIndex;
设置外挂字幕。
- (void)setSubtitleIndex:(NSUInteger)index selected:(BOOL)selected;
更新外挂字幕选中状态。
- (void)handlePanGestures:(UIPanGestureRecognizer *_Nonnull)panGesture;
处理拖拽手势。
interactiveMode一定要设置为KSMediaPlayerInteractiveModeTouch或KSMediaPlayerInteractiveModeMotionWithTouch才生效。
- (void)handlePinches:(UIPinchGestureRecognizer *_Nonnull)pinchedGesture;
处理捏合手势。
interactiveMode一定要设置为KSMediaPlayerInteractiveModeTouch或KSMediaPlayerInteractiveModeMotionWithTouch才生效。
+ (instancetype _Nullable)createPlayerWithUrl:(NSString *_Nonnull)url reuseEnable: (BOOL)reuseEnable;
创建播放器<url>。是否复用播放器实例。
+ (instancetype _Nullable)createPlayerWithUrl:(NSString *_Nonnull)url cacheKey:(NSString *_Nullable)cacheKey reuseEnable: (BOOL)reuseEnable;
创建播放器<url>,是否复用播放器实例。
+ (instancetype _Nullable)createPlayerWithManifest:(NSString *_Nonnull)manifest qualityType:(NSString *_Nullable)qualityType reuseEnable: (BOOL)reuseEnable;
创建播放器<manifest>,是否复用播放器实例。
+ (void)createPlayerWithVideoId:(NSString *_Nonnull)videoId playToken:(NSString *_Nonnull)playToken completion:(void(^_Nonnull)(KSMediaPlayer *_Nullable player, NSError *_Nullable error))completion;
通过videoId创建播放器。
+ (NSString *_Nonnull)version;
获取SDK版本号。
+ (NSString *_Nonnull)deviceId;
获取deviceId。
@protocol KSMediaPlayerDelegate <NSObject>
播放器代理,播放相关回调。
- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer playbackStateChanged:(KSMediaPlayerPlaybackState)state;
播放器播放状态回调。
- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer eventChanged:(KSMediaPlayerEvent)event;
播放器事件回调。
- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer loadStateChanged:(KSMediaPlayerLoadState)state;
播放器加载状态回调。
- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer didFinishReason:(KSMediaPlayerFinishReason)reason error:(NSError *_Nullable)error;
播放器完成回调。
- (NSString *_Nullable)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer needRefreshUrlWithReason:(KSMediaPlayerUrlRefreshReason)reason;
播放器需要重新提供url以继续播放。《当前视频所有的源都不可用的时候,此代理会回调,是否有新的源可以提供播放》。
- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer bufferProgress:(NSInteger)bufferProgress;
播放器缓冲进度回调。
- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer manifestSelectedRepresentation:(KSMediaPlayerManifestRepresentation *_Nullable)representation;
manifest选中档位回调。
- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer danmakuMaskVttError:(NSError *_Nullable)error;
弹幕防挡文件错误。
- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer subTitleStatusChangedWithIndex:(NSUInteger)index error:(NSError *_Nullable)error;
外挂字幕错误回调。
- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer subtitleSegments:(NSArray<KSMediaPlayerSubtitleSegment *> *_Nullable)subtitleSegments;
外挂字幕内容回调。
@protocol KSMediaPlayerDownloadDelegate <NSObject>
播放器数据下载代理。
- (void)onMediaPlayerDownloadFinish:(KSMediaPlayerDownloadInfo *_Nullable)downloadInfo;
播放器一次下载数据完成回调。
@interface KSMediaPlayerDownloadInfo : NSObject
播放器下载数据信息。
@property (nonatomic, copy) NSString *videoId;
视频唯一标识。
@property (nonatomic, copy) NSString *inputURL;
视频完成URL。
@property (nonatomic, copy) NSString *uri;
尽量完成的视频url,带params(底层维护的url)。
@property (nonatomic, copy) NSString *host;
host。
@property (nonatomic, copy) NSString *cacheKey;
缓存key。
@property (nonatomic, copy) NSString *ip;
ip。
@property (nonatomic, copy) NSString *sessionUUID;
一次任务(预加载/播放)id,保持唯一。
@property (nonatomic, copy) NSString *downloadUUID;
一次HTTP请求id,保持唯一。
@property (nonatomic, assign) NSInteger contentLength;
HTTP contentLength。
@property (nonatomic, assign) NSInteger totalBytes;
资源总大小 (单位byte)。
@property (nonatomic, assign) NSInteger position;
当前已下载大小(单位byte)。
@property (nonatomic, assign) KSMediaPlayerDownloadState downloadState;
下载状态。
@property (nonatomic, assign) NSInteger httpResponseCode;
对应的HTTP错误码。
@property (nonatomic, assign) NSInteger errorCode;
错误码。
@property (nonatomic, copy) NSString *errorMsg;
错误信息。
@property (nonatomic, assign) NSInteger downloadBytes;
一次请求下载大小(单位byte)。
@property (nonatomic, assign) NSInteger timeCost;
一次请求下载耗时(单位ms)。
@property (nonatomic, assign) KSMediaPlayerDownloadStopReason stopReason;
下载结束原因
@property (nonatomic, assign) KSMediaPlayerNetworkType networkType;
下载使用的网络
@interface KSMediaPlayerVideoContext : NSObject
用来传入数据统计和触发后端转码流程的必要参数
@property (nonatomic, copy, nonnull) NSString *videoId;
视频唯一标识。
@property (nonatomic, assign) NSTimeInterval clickTimeMS;
用户打开播放页面时的系统时间,单位毫秒,用来计算用户等待首屏真实时长。
@property (nonatomic, copy) NSString * _Nullable bizName;
业务名称。
@property (nonatomic, copy) NSString * _Nullable sceneName;
场景名称。
@property (nonatomic, copy) NSString * _Nullable pageName;
页面名称。
@property (nonatomic, copy) NSString * _Nullable abConfig;
实验信息。
@property (nonatomic, copy) NSString * _Nullable appChannel;
渠道信息。
@property (nonatomic, copy) NSString * _Nullable cdnManufactor;
CDN厂商。
@property (nonatomic, copy) NSString * _Nullable extra;
扩展信息,业务自定义,json string。
@interface KSMediaPlayerManifestDispatchResult : NSObject
Manifest调度结果。
@property (nonatomic, copy) NSString *vcodec;
编码标准,avc或hevc。
@property (nonatomic, strong) NSArray<KSMediaPlayerManifestRepresentation *> *repList;
多码率视频数组。
@interface KSMediaPlayerManifestRepresentation : NSObject
Manifest信息。
@property (nonatomic, assign) NSInteger repId;
id。
@property (nonatomic, copy) NSString *url;
url。
@property (nonatomic, copy) NSString *qualityType;
类型。
@property (nonatomic, copy) NSString *qualityLabel;
标签。
@interface KSMediaPlayerDebugInfo : NSObject
点播debugInfo。
@property (nonatomic, copy) NSString *version;
sdk版本号。
@property (nonatomic, copy) NSString *deviceId;
设备ID。
@property (nonatomic, copy) NSString *memoryInfo;
内存信息。
@property (nonatomic, copy) NSString *cpuInfo;
cpu信息。
@property (nonatomic, copy) NSString *inputURL;
视频URL。
@property (nonatomic, copy) NSString *playingURI;
播放URL。
@property (nonatomic, copy) NSString *playingHost;
播放Host。
@property (nonatomic, copy) NSString *playingHostIp;
播放IP。
@property (nonatomic, copy) NSString *videoCodec;
视频解码信息。
@property (nonatomic, copy) NSString *audioCodec;
音频解码信息。
@property (nonatomic, assign) NSInteger fps;
fps。
@property (nonatomic, assign) NSInteger bitrate;
比特率。
@property (nonatomic, assign) NSInteger duration;
视频时长,单位ms。
@property (nonatomic, assign) NSInteger width;
视频宽度。
@property (nonatomic, assign) NSInteger height;
视频高度。
@property (nonatomic, copy) NSString *fileName;
文件名字。
@property (nonatomic, copy) NSString *cacheCurrentReadingUri;
当前url。
@property (nonatomic, copy) NSString *startPlayBlockStatus;
起播信息。《开播阈值 | 实际缓冲 | 耗时上限 | 时机耗时 ...》。
@property (nonatomic, copy) NSString *cacheV2Info;
缓存信息《预加载字节数 | 码率(单位byte)| 对应字节数 ...》。
@property (nonatomic, assign) NSInteger cachedBytesOnOpen;
起播时缓存字节数,单位byte。
@property (nonatomic, assign) NSInteger playableDurationMs;
可播放时长,单位ms。
@property (nonatomic, assign) NSInteger totolScreen;
总首屏时间,单位ms。准备完成之后到首屏出现的总时间。
@property (nonatomic, assign) NSInteger firstScreen;
首屏时间,单位ms。单播放到首屏出现时间
@property (nonatomic, copy) NSString *firstScreenStepInfo;
首屏各个步骤耗时信息《DNS解析 | HTTP建连 | 首个数据包 | 打开流媒体 ...》。
@property (nonatomic, assign) NSInteger videoRenderType;
视频渲染类型。
@property (nonatomic, copy) NSString *hdrType;
HDR类型《sdr/hdr ...》。
@property (nonatomic, copy) NSString *vodAdaptiveInfo;
适配信息《播放器的各种信息》。
- (NSString *)debugInfoFormatString;
获取debugInfo字符串。整合debugInbfo信息,以String方式输出。
@interface KSMediaPlayerVodConfigration : NSObject
播放器初始化用configuration。
@property (nonatomic, readonly) KSMediaPlayerInitType initType;
初始化类型。
@property (nonatomic, copy) NSString *url;
url。
@property (nonatomic, copy) NSString *cacheKey;
自定义cachekey。
@property (nonatomic, copy) NSString *videoQualityType;
视频档位类型。
@property (nonatomic, copy) NSString *videoId;
videoId。(快手转码的videoId)。
@property (nonatomic, copy) NSString *playToken;
播放凭证。《由server下发》(如通过videoId播放 playToken为必传项)。
@property (nonatomic, copy) NSString *manifest;
manifest。
- (void)configWithUrl:(NSString *)url;
通过URL播放。
- (void)configWithVideoId:(NSString *)videoId playToken:(NSString *)playToken;
通过videoId播放。
- (void)configWithManifest:(NSString *)manifest;
通过manifest播放。
@interface KSMediaPlayerSubtitleSegment : NSObject
外挂字幕信息。
@property(nonatomic, assign) NSInteger pts;
帧时间。
@property(nonatomic, copy) NSString *text;
文字。
@property(nonatomic, strong) NSData *data;
数据。
@interface KSMediaVideoIdManager : NSObject
videoId管理。
+ (instancetype)sharedInstance;
获取单例。
- (void)fetchPlayInfoWithVideoId:(NSString *)videoId
playToken:(NSString *)playToken
completion:(void(^)(KSMediaVideoIdPlayInfo *playInfo, NSError *error, NSString *requestId))compltion;
获取播放信息。
- (NSDictionary *)getPayloadInfoWithPlayToken:(NSString *)playToken;
获取PayloadInfo。
- (void)removePlayInfo:(NSString *)videoId;
移除videoId。
@interface KSMediaVideoIdPlayInfo : NSObject
videoId播放信息。
@property (nonatomic, copy) NSString *videoId;
videoId。
@property (nonatomic, copy) NSString *manifest;
manifest。
@interface KSMediaPlayerCache : NSObject
播放器缓存。
+ (void)clearCache;
清空缓存。
+ (int64_t)getTotalCachedSize;
获取缓存总大小,单位:字节。
+ (BOOL)isFullyCached:(NSURL * _Nonnull)url;
判断单个视频是否全部缓存《业务未传入自定义cacheKey时调用》。
+ (BOOL)isFullyCachedWithKey:(NSString * _Nonnull)cacheKey;
用cacheKey判断单个视频是否全部缓存《业务传入自定义cacheKey时调用》。
+ (int64_t)getCachedSizeWithUrl:(NSURL * _Nonnull)url;
获取单个视频缓存大小,单位:字节。《业务未传入自定义cacheKey时调用》。
+ (int64_t)getCachedSizeWithKey:(NSString * _Nonnull)cacheKey;
用cacheKey获取单个视频缓存大小,单位:字节。《业务传入自定义cacheKey时调用》。
+ (void)setCacheKeyGenerate:(KSMediaPlayerCacheKeyGenerate _Nonnull)cacheKeyGenerate;
设置cacheKey生成方法。
@interface KSMediaPlayerConfig : NSObject
播放器配置。提供播放器初始化,基本设置等功能。
+ (BOOL)initWithAppId:(NSString *_Nonnull)appId
appKey:(NSString *_Nonnull)appKey
ksFileBundlePath:(NSString *_Nonnull)ksFileBundlePath
cacheDir:(NSString *_Nullable)cacheDir
deviceId:(NSString *_Nullable)deviceId;
播放器初始化。app启动后在Appdelegate的didFinishLaunchingWithOptions方法中调用该接口进行 SDK init,内部会完成SDK的安全检验、缓存路径的建立及播放配置的远程下发,此时不会创建播放器实例。
+ (void)setEnableAnalytics:(BOOL)enableAnalytics;
设置是否开启播放信息上报。
+ (void)setLogBlocksetLogBlock:(KSMediaPlayerLogBlock _Nullable)logBlock;
设置日志回调。
+ (void)setDebugMode:(BOOL)debugMode;
设置DebugModel。
+ (void)setEnableAudioSession:(BOOL)enableAudioSession;
设置是否由SDK管理AVAudioSession。
+ (void)setDeviceId:(NSString *_Nullable)deviceId;
设置deviceId。
+ (void)setEnableAdaptiveAdjustByResolution:(BOOL)enableAdaptiveAdjustByResolution;
是否启用多码率档位按照分辨率动态调整。
+ (BOOL)isSupportHDR;
是否支持HDR。
+ (BOOL)isSupport4K;
是否支持4K。
@interface KSMediaPlayerManifestUtil : NSObject
Manifest解析。
+ (KSMediaPlayerManifestDispatchResult *)getKSManifest:(NSString *)manifest;
获取Manifest调度结果。
@interface KSMediaPrefetchTask : NSObject
预加载任务。
@property (nonatomic, assign) int maxSpeedKbps;
预加载的最大下载速度,单位kbps,1k=1024, 默认值为-1,不限速。
@property (nonatomic, assign) int connectTimeoutMs;
下载请求超时(单位ms),默认3秒。
@property (nonatomic, assign) BOOL fullCache;
是否下载全部数据,默认否,如全量下载,预加载任务建议设置较低优先级。
- (instancetype _Nullable)initWithVideoId:(nonnull NSString *)videoId
playToken:(nonnull NSString *)playToken
priority:(int)priority;
初始化预加载任务 《适用于快手videoId播放方案》。
- (instancetype _Nonnull)initWithUrl:(nonnull NSString *)url
videoId:(nonnull NSString *)videoId
priority:(int)priority;
初始化预加载任务。
- (instancetype _Nonnull)initWithManifest:(nonnull NSString *)manifest
qualityType:(nullable NSString *)qualityType
videoId:(nonnull NSString *)videoId
priority:(int)priority;
初始化预加载任务<manifest方案>。
- (int)getTaskPriority;
获取任务优先级。
- (void)cancel;
取消任务。
- (nonnull NSString *)getVideoID;
获取videoId。
- (id _Nullable )getTask;
获取任务。
@interface KSMediaPrefetcher : NSObject
预加载。
+ (instancetype)shareInstance;
获取预加载单例。
@property (nonatomic, strong) KSMediaPrefetcherContext *prefetcherContext;
该属性用来传入数据统计的必要参数,目前包括一个pageName字段,如预加载的所在页面发生变化,更新prefetcherContext以获取更细粒度的统计。
@property (nonatomic, weak) id<KSMediaPlayerDownloadDelegate> _Nullable downloadDelegate;
下载代理。
- (BOOL)addTask:(KSMediaPrefetchTask *)task;
添加单个任务, 添加完成后自动开始预加载。
- (void)addTaskList:(NSArray<KSMediaPrefetchTask *> *)taskList;
添加一组任务。
- (void)pauseAllTasks;
暂停所有任务。
- (void)resumeAllTasks;
恢复所有任务。
- (void)removeTask:(KSMediaPrefetchTask *)task;
移除单个任务。
- (void)removeAllTasks;
移除所有任务。
@interface KSMediaPrefetcherContext : NSObject
预加载统计参数。
@property (nonatomic, copy) NSString *pageName;
页面名称。
@interface KSLivePlayer : NSObject
直播播放器。
@property (nonatomic, strong, readonly, nullable) UIView *playerView;
播放器视图,用来渲染视频画面,需要添加到父视图。
@property (nonatomic, assign, readonly) CGSize naturalSize;
播放流尺寸。
@property (nonatomic, assign) KSMediaPlayerScalingMode scalingMode;
播放器视图的缩放模式,默认为KSMediaPlayerScalingMode_AspectFit。
@property (nonatomic, nullable,weak) id<KSLivePlayerDelegate> delegate;
代理。
@property (nonatomic, copy, readonly, nullable) NSString *path;
播放地址。
@property (nonatomic, assign) BOOL shouldMute;
是否静音,默认NO。
@property (nonatomic, assign) CGFloat volume;
音量。
@property (nonatomic, assign) NSInteger maxRetryCount;
最大的重试次数。默认为3。
@property (nonatomic, assign) NSTimeInterval retryInterval;
重试间隔。默认为2s。
@property (nonatomic, assign) BOOL enableGLInBackground;
是否允许再后台渲染。
@property (nonatomic, assign) BOOL enablePipModeRender;
是否允许小窗模式渲染,如果不是在小窗模式一定要关闭。
@property (nonatomic, strong, readonly, nullable) KSLivePlayerDebugInfo *debugInfo;
debugInfo。起播后获取。
- (void)setDataSource:(KSLiveDataSource *_Nonnull)dataSource;
设置数据源。
- (void)play;
播放。
- (void)pause;
暂停。
- (void)resume;
继续播放。
- (void)retryPlayback;
播放重试,可在断网或网络切换导致的播放错误后调用,重试成功后自动从出错位置开始播放。
- (void)destroy;
销毁播放器资源。
- (BOOL)isPrepared;
播放器是否已经准备完成。
- (BOOL)isBuffering;
是否正在卡顿状态。
- (BOOL)isPlaying;
是否正在播放中。
- (BOOL)isRetrying;
是否正在重试中。
- (NSTimeInterval)currentPlayTimeVideo;
获取当前的播放时间。
- (UIImage *_Nonnull)thumbnailImageAtCurrentTime;
获取当前帧截图。
@interface KSLiveDataSource : NSObject
直播数据源。
@property (nonatomic, copy) NSString *streamId;
资源id。
@property (nonatomic, copy) NSURL *URL;
直播URL。
@property (nonatomic, copy, nullable) NSDictionary *additionalHeaders;
自定义headers。
+ (KSLiveDataSource *)sourceWithURL:(NSURL *)URL streamId:(NSString *)streamId;
创建数据源实例。
@protocol KSLivePlayerDelegate <NSObject>
直播代理。
- (void)ksLivePlayerDidPrepared:(KSLivePlayer *)player;
播放器prepare完毕。
- (void)ksLivePlayerStatusDidChangeToPlaying:(KSLivePlayer *_Nonnull)player;
播放器状态已经变为playing。
- (void)ksLivePlayerStatusDidChangeToStopped:(KSLivePlayer *_Nonnull)player;
播放器状态已经变为stopped。
- (void)ksLivePlayerDidRenderFirstVideoFrame:(KSLivePlayer *_Nonnull)player;
播放器渲染了视频首帧,这个时候通常意味着用户能够看到画面,是用户可见的首屏。整个播放器生命周期只有一次,纯音频没有。
- (void)ksLivePlayerDidRenderFirstAudioFrame:(KSLivePlayer *_Nonnull)player;
播放器渲染了音频首帧。
- (void)ksLivePlayer:(KSLivePlayer *_Nonnull)player didPlayError:(nonnull NSError *)error;
播放器在进行过内部retry后依旧报错后会给出这个回调。
- (void)ksLivePlayer:(KSLivePlayer *_Nonnull)player naturalSizeIsAvailable:(CGSize)size;
获取到了播放流的尺寸,也会在流尺寸变化的时候回调。
- (void)ksLivePlayerDidBeginStall:(KSLivePlayer *_Nonnull)player;
视频开始卡顿。首帧之前不会给出这个回调。
- (void)ksLivePlayerDidEndStall:(KSLivePlayer *_Nonnull)player;
视频卡顿结束,可以继续播放。
- (void)ksLivePlayer:(KSLivePlayer *_Nonnull)player pts:(long long)pts seiMethod:(int)method seiData:(nonnull NSData *)data;
sei回调。
- (void)ksLivePlayer:(KSLivePlayer *_Nonnull)player seiData:(nonnull NSData *)data payloadType:(int)type;
sei回调。
- (void)ksLivePlayer:(KSLivePlayer *_Nonnull)player didLoadAudioData:(CMSampleBufferRef _Nonnull )sampleBuffer pts:(int64_t)pts sampleRate:(int)sampleRate channels:(int)channels;
音频数据回调。
- (NSURL *_Nonnull)ksLivePlayer:(KSLivePlayer *_Nonnull)player onReuqestBegin:(nonnull NSString *)url;
请求前URL处理 用于部分直播防盗链场景。该方法会同步阻塞请求。
- (void)ksLivePlayer:(KSLivePlayer *_Nonnull)player fetchDataSource:(void (^_Nullable)(KSLiveDataSource * _Nullable dataSource))completion;
播放器需要替换源重试。
- (void)ksLivePlayer:(KSLivePlayer *_Nonnull)player startRetry:(NSInteger)number;
开始重试。
- (void)ksLivePlayer:(KSLivePlayer *_Nonnull)player successRetry:(NSInteger)number;
重试成功。
- (void)ksLivePlayer:(KSLivePlayer *_Nonnull)player errorRetry:(nonnull NSError *)error;
重试失败。
@interface KSLivePlayerDebugInfo : NSObject
直播DebugInfo。
@property(nonatomic, copy) NSString* playUrl;
播放Url。
@property(nonatomic, copy) NSString* host;
host。
@property(nonatomic, assign) int64_t audioBitrate;
音频比特率。
@property(nonatomic, assign) int64_t videoBitrate;
视频比特率。
@property(nonatomic, assign) float videoReadFramesPerSecond;
每秒读取帧数。
@property(nonatomic, assign) float videoDecodeFramesPerSecond;
每秒解码帧数。
@property(nonatomic, assign) float videoDisplayFramesPerSecond;
每秒显示帧数。
@property(nonatomic, assign) int firstScreenTimeTotal;
first screen time(total), in milliseconds, include:
InputOpen + StreamFind + CodecOpen + PktReceive + PreDecode + Decode + Render。
@property(nonatomic, assign) int firstScreenTimeWaitForPlay;
duration of calling start by app, not part of first screen time。
@property(nonatomic, assign) int firstScreenTimeInputOpen;
duration of opening input stream(including DnsAnalyze && HttpConnect), part of first screen time。
@property(nonatomic, assign) int firstScreenTimeDnsAnalyze;
duration of DNS analyzing, part of first screen time。
@property(nonatomic, assign) int firstScreenTimeHttpConnect;
duration of HTTP connecting, part of first screen time。
@property(nonatomic, assign) int firstScreenTimeStreamFind;
duration of finding best a/v streams, part of first screen time。
@property(nonatomic, assign) int firstScreenTimeCodecOpen;
duration of opening codec, part of first screen time。
@property(nonatomic, assign) int firstScreenTimePktReceive;
duration of receiving first video packet, part of first screen time。
@property(nonatomic, assign) int firstScreenTimePreDecode;
duration from receiving first pkt to sending it to decoder, part of first screen time。
@property(nonatomic, assign) int firstScreenTimeDecode;
duration of decoding first video frame, part of first screen time。
@property(nonatomic, assign) int firstScreenTimeRender;
duration of rendering first video frame, part of first screen time。
@property(nonatomic, assign) int64_t totalDataSize;
size of total audio and video data since playing。
@property(nonatomic, assign) int blockCnt;
buffer loading count。
@property(nonatomic, assign) int64_t blockDuration;
buffer loading in ms。
@property(nonatomic, assign) int videoBlockCnt;
count of video block。
@property(nonatomic, assign) int videoBlockDuration;
duration of video block。
@property(nonatomic, assign) int speedupThresholdMs;
speed up threshold。
@property(nonatomic, assign) int audioBufferTimeLength;
audio queue time length in ms。
@property(nonatomic, assign) int videoBufferTimeLength;
video queue time length in ms。
@property(nonatomic, assign) int videoDelayRender;
video render delay, calculated with PTS and WallClock. unit: milliseconds。
@property(nonatomic, copy) NSString* videoDecoder;
video decoder info。
@property(nonatomic, copy) NSString* audioDecoder;
audio decoder info。
@property(nonatomic, copy) NSString* hostInfo;
live host info。
@property(nonatomic, copy) NSString* memoryInfo;
memory info。
@property(nonatomic, copy) NSString* cpuInfo;
cpu info。
SDK中的枚举。
typedef NS_ENUM(NSInteger, KSMediaPlayerFinishReason) {
...
};
播放结束原因。
播放完成。
播放错误。
用户关闭。
typedef NS_ENUM(NSInteger, KSMediaPlayerUrlRefreshReason) {
...
};
需要系统新的URL以继续播放的原因。
未知。
403错误。
typedef NS_ENUM(NSInteger, KSMediaPlayerDownloadStopReason) {
...
};
下载结束原因。
未知。
下载完成。
下载取消。
下载失败。
下载超时。
Response Header没有content-length。
content-length不合法。
分段下载range不合法。
解析host失败。
typedef NS_ENUM(NSInteger, KSMediaPlayerDownloadState) {
...
};
播放器下载状态。
未知。
开始下载。
暂停下载。
等待。
下载完成。
下载取消。
下载失败。
typedef NS_ENUM(NSInteger, KSMediaPlayerScalingMode) {
...
};
播放器画面缩放模式。
不确定缩放类型。
等比缩放以显示整个视频画面,画面上下或者左右有可能有空白。
等比缩放使画面充满画布,画面上面或左右有可能会出现剪裁。
缩放是画面充满画布,画面有可能会被压缩或者拉伸。
typedef NS_ENUM(NSUInteger, KSMediaPlayerPlaybackState) {
...
};
播放器播放状态。
初始化状态。
准备播放状态。
播放状态。
暂停状态。
停止播放状态。
Seek状态。
完成播放状态,在播放器设置为单次播放的时候,播放完成为此状态。
typedef NS_OPTIONS(NSUInteger, KSMediaPlayerLoadState) {
...
};
播放器加载状态。
未知。
可以播放。
结束卡顿。
开始卡顿。
typedef NS_ENUM(NSUInteger, KSMediaPlayerEvent) {
...
};
播放器事件。
未知。
播放器准备完成,可以播放。
如果shouldAutoplay=NO, 需要在- (void)mediaPlayer:(KSMediaPlayer *_Nullable)mediaPlayer eventChanged:(KSMediaPlayerEvent)event代理中收到次事件回调之后调用- (void)play方法播放。
第一帧视频开始渲染。
第一帧音频开始渲染。
开始切换host。
切换host完成。
seek完成。
播放完成。
seek后视频首帧渲染完成。
seek后音频首帧渲染完成。
可以创建下一个播放器,这个地方做预加载操作。
开始切换清晰度。
切换清晰度完成。
内部下载重试。
视频尺寸更新。
typedef NS_ENUM(NSInteger, KSMediaPlayerScene) {
...
};
播放场景。
未知。
上下滑场景。
点击Push场景。
滚动列表场景。
typedef NS_ENUM(NSInteger, KSMediaPlayerNetworkType) {
...
};
网络类型。
未知。
蜂窝网络。
wifi。
typedef NS_ENUM(NSInteger, KSMediaPlayerInitType) {
...
};
播放器初始化类型。
url。
Manifest
VideoId
typedef NS_ENUM(NSInteger, KSMediaPlayerInteractiveMode) {
...
};
播放器VR交互类型。
陀螺仪。
手势。
陀螺仪加手势。
typedef NS_ENUM(NSInteger, KSMediaPlayerLogLevel) {
...
};
日志级别。
debug级别。
info级别。
warning级别。
error级别。
Slient级别。
SDK中的常量
视频档位
static NSString *const kKSMediaPlayerVideoQualiType_VR180 = @"vr180";
vr180。
static NSString *const kKSMediaPlayerVideoQualiType_VR360 = @"vr360";
vr360。
static NSString *const kKSMediaPlayerVideoQualiType_HDR = @"hdr";
hdr。
static NSString *const kKSMediaPlayerVideoQualiType_SDR_plus = @"sdr+";
sdr+。
static NSString *const kKSMediaPlayerVideoQualiType_1080p = @"1080p";
1080p。
static NSString *const kKSMediaPlayerVideoQualiType_720p = @"720p";
720p。
static NSString *const kKSMediaPlayerVideoQualiType_576p = @"576p";
576p。
static NSString *const kKSMediaPlayerVideoQualiType_540p = @"540p";
540p。
static NSString *const kKSMediaPlayerVideoQualiType_480p = @"480p";
480p。
SDK中的定义:typedef、宏定义...
typedef NSString * _Nonnull (^KSMediaPlayerCacheKeyGenerate)(NSString * _Nonnull url);
生成cacheKey生成方法block。
typedef void (^KSMediaPlayerLogBlock)(KSMediaPlayerLogLevel level, NSString *info);
统一Log回调block。