KSYMoviePlayerController.h 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791
  1. //
  2. // KSYMoviePlayerController.h
  3. // KSYPlayerCore
  4. //
  5. // Created by zengfanping on 10/12/15.
  6. // Copyright © 2015 kingsoft. All rights reserved.
  7. //
  8. #import <AVFoundation/AVFoundation.h>
  9. #import <MediaPlayer/MediaPlayer.h>
  10. #import "KSYMediaPlayback.h"
  11. #import "KSYQosInfo.h"
  12. #import "KSYMoviePlayerDefines.h"
  13. #import "KSYReachability.h"
  14. /**
  15. 金山云播放内核提供了跨终端平台的播放器SDK,支持Android/iOS/Flash平台的视频播放需求。金山云播放内核集成有业界一流的高性能H.265/HEVC解码器,提供流畅、低功耗的播放体验。同时SDK提供和系统播放器一致的音视频播放、控制接口,极大地降低了开发门槛。
  16. 在任何平台上,金山云播放内核都提供底层开发接口,开发者可自由实现个性的进度条、播放按钮、设置等播放界面元素。金山云提供丰富的播放器调用示例,全部以source code开放,并提供详尽的接口说明文档,让视频应用快速搭建、开发和发布。
  17. 金山云播放内核iOS版继承自系统播放器MPMoviePlayerController,适配支持iOS 7.0以上机型,提供系统一致的播放控制接口,在系统播放器基础上新增如下功能:
  18. * 集成金山云高效H.265解码器,解码效率高于开源版本OpenHEVC一倍以上;
  19. * 支持rmvb/flv/avi/mkv/mov等主流封装格式;
  20. * 支持HLS/rtmp协议;
  21. * 完美支持rtmp/http live streaming,结合金山云直播流动态调整功能,实现持续低于2秒的低延时直播体验。
  22. ## 环境搭建
  23. KSYMoviePlayerController依赖如下第三方库:
  24. * VideoToolbox.framework
  25. * libz.tbd or libz.dylib
  26. * libbz2.tbd or libbz2.dylib
  27. * libstdc++.tbd or libstdc++.dylib
  28. ## 使用说明
  29. * 开发IDE建议使用Xcode 7,在旧版本Xcode上可能出现其他异常,请直接联系客服人员。
  30. * 当前iOS framework版本只支持iOS 7.0及以上版本。
  31. ## 联系我们
  32. 当本文档无法帮助您解决在开发中遇到的具体问题,请通过以下方式联系我们,金山云工程师会在第一时间回复您。
  33. __E-mail__: zengfanping@kingsoft.com
  34. ## 版本信息
  35. __Version__: 1.0
  36. __Found__: 2015-05-30
  37. */
  38. /**
  39. @abstract 视频数据回调
  40. */
  41. typedef void (^KSYPlyVideoDataBlock)(CMSampleBufferRef pixelBuffer);
  42. /**
  43. @abstract 音频数据回调
  44. */
  45. typedef void (^KSYPlyAudioDataBlock)(CMSampleBufferRef sampleBuffer);
  46. /**
  47. @abstract message数据回调
  48. */
  49. typedef void (^KSYPlyMessageDataBlock)(NSDictionary *message, int64_t pts, int64_t param);
  50. /**
  51. @abstract texture回调
  52. */
  53. typedef void (^KSYPlyTextureBlock)(GLuint texId, int width, int height, double pts);
  54. /**
  55. * KSYMoviePlayerController
  56. */
  57. @interface KSYMoviePlayerController : NSObject <KSYMediaPlayback>
  58. #pragma mark MPMoviePlayerController
  59. /**
  60. @abstract 初始化播放器并设置播放地址
  61. @param url 视频播放地址,该地址可以是本地地址或者服务器地址.
  62. @return 返回KSYMoviePlayerController对象,该对象的视频播放地址ContentURL已经初始化。此时播放器状态为MPMoviePlaybackStateStopped.
  63. @discussion 该方法初始化了播放器,并设置了播放地址。但是并没有将播放器对视频文件进行初始化,需要调用 [prepareToPlay]([KSYMediaPlayback prepareToPlay])方法对视频文件进行初始化。
  64. @discussion 当前支持的协议包括:
  65. * http
  66. * rtmp
  67. * file, 本地文件
  68. * rtsp
  69. @warning 必须调用该方法进行初始化,不能调用init方法。
  70. @since Available in KSYMoviePlayerController 1.0 and later.
  71. @return 返回KSYMoviePlayerController 实例
  72. */
  73. - (instancetype)initWithContentURL:(NSURL *)url;
  74. /**
  75. @abstract 初始化播放器并设置主播放地址和备用播放地址
  76. @param url 视频主播放地址,使用HEVC流地址.
  77. @param backURL 视频备用播放地址,使用H264流地址
  78. @return 返回KSYMoviePlayerController对象,该对象的视频播放地址ContentURL已经初始化。此时播放器状态为MPMoviePlaybackStateStopped.
  79. @discussion 如果设置了备用播放地址,则会在设备不支持硬解播放HEVC流时切换到备用播放地址进行播放
  80. @warning 该方法由金山云引入,不是原生系统接口
  81. @since Available in KSYMoviePlayerController 3.0.1 and later.
  82. */
  83. - (instancetype)initWithContentURL:(NSURL *)url backupURL:(NSURL*)backupURL;
  84. /**
  85. @abstract 初始化播放器并设置播放地址
  86. @param url 视频播放地址,该地址可以是本地地址或者服务器地址.
  87. @param sharegroup opengl的sharegroup, 用于共享视频渲染texture
  88. @return 返回KSYMoviePlayerController对象,该对象的视频播放地址ContentURL已经初始化。此时播放器状态为MPMoviePlaybackStateStopped.
  89. @discussion 如果要获取视频渲染时的texture时(设置textureBlock属性),需要使用此初始化函数,将EAGLSharegroup对象作为参数传入,否则texture无法在多个OpenGL的context中共享使用
  90. @warning 该方法由金山云引入,不是原生系统接口
  91. @since Available in KSYMoviePlayerController 1.8.7 and later.
  92. */
  93. - (instancetype)initWithContentURL:(NSURL *)url sharegroup:(EAGLSharegroup*)sharegroup;
  94. /**
  95. @abstract 初始化播放器并设置播放地址
  96. @param url 视频播放的绝对地址,可以设置为nil;
  97. @param list 分片列表,可以设置为nil
  98. @param sharegroup opengl的sharegroup, 用于共享视频渲染texture, 可以设置为nil
  99. @return 返回KSYMoviePlayerController对象,该对象的视频播放地址ContentURL已经初始化。此时播放器状态为MPMoviePlaybackStateStopped.
  100. @discussion 该方法更适用于点播
  101. @discussion url和list的设置逻辑:
  102. * url和fileList不能同时为空
  103. * url为nil,fileList不为nil时,播放器取list中的地址进行播放
  104. * url不nil,fileList为nil时,播放器取baseURL进行播放
  105. * url和fileList都不为nil,播放会认为url是绝对地址,list为相对地址,找到url中的最后一个'/'进行url/list 拼接后播放
  106. @warning 该方法由金山云引入,不是原生系统接口
  107. @since Available in KSYMoviePlayerController 2.1.0 and later.
  108. */
  109. - (instancetype)initWithContentURL:(NSURL *)url fileList:(NSArray *)fileList sharegroup:(EAGLSharegroup*)sharegroup NS_DESIGNATED_INITIALIZER;
  110. /**
  111. @abstract 正在播放的视频文件的URL地址,该地址可以是本地地址或者服务器地址。
  112. @since Available in KSYMoviePlayerController 1.0 and later.
  113. */
  114. @property (nonatomic, readonly) NSURL *contentURL;
  115. /**
  116. @abstract 正在播放的视频文件的list列表
  117. @since Available in KSYMoviePlayerController 2.1.0 and later.
  118. */
  119. @property (nonatomic, readonly) NSArray *fileList;
  120. /**
  121. @abstract 包含视频播放内容的VIEW(只读)。
  122. @discussion view的使用逻辑:
  123. * 可以通过frame设置view大大小
  124. * 使用[scalingMode]([KSYMoviePlayerController scalingMode]) 可以更改视频内容在VIEW中的显示情况
  125. @see scalingMode
  126. */
  127. // The view in which the media and playback controls are displayed.
  128. @property (nonatomic, readonly) UIView *view;
  129. // The style of the playback controls. Defaults to MPMovieControlStyleDefault.
  130. /**
  131. @warning 该属性当前不支持
  132. */
  133. @property (nonatomic) MPMovieControlStyle controlStyle;
  134. /**
  135. @abstract 当前播放器的播放状态(只读)。
  136. @discussion 可以通过该属性获取视频播放情况:
  137. <pre><code>
  138. typedef NS_ENUM(NSInteger, MPMoviePlaybackState) {
  139. MPMoviePlaybackStateStopped, // 播放停止
  140. MPMoviePlaybackStatePlaying, // 正在播放
  141. MPMoviePlaybackStatePaused, // 播放暂停
  142. MPMoviePlaybackStateInterrupted, // 播放被打断
  143. MPMoviePlaybackStateSeekingForward, // 向前seeking中
  144. MPMoviePlaybackStateSeekingBackward // 向后seeking中
  145. } NS_DEPRECATED_IOS(3_2, 9_0);
  146. </code></pre>
  147. @discussion 通知:
  148. * MPMoviePlayerPlaybackDidFinishNotification,当播放完成时提供通知
  149. * MPMoviePlayerPlaybackStateDidChangeNotification,当播放状态变化时提供通知
  150. @since Available in KSYMoviePlayerController 1.0 and later.
  151. */
  152. // Returns the current playback state of the movie player.
  153. @property (nonatomic, readonly) MPMoviePlaybackState playbackState;
  154. /**
  155. @abstract 当前网络加载情况
  156. @discussion 可以通过该属性获取视频加载情况:
  157. <pre><code>
  158. typedef NS_OPTIONS(NSUInteger, MPMovieLoadState) {
  159. MPMovieLoadStateUnknown = 0, // 加载情况未知
  160. MPMovieLoadStatePlayable = 1 << 0, // 加载完成,可以播放
  161. MPMovieLoadStatePlaythroughOK = 1 << 1, // 加载完成,如果shouldAutoplay为YES,将自动开始播放
  162. MPMovieLoadStateStalled = 1 << 2, // 如果视频正在加载中
  163. } NS_DEPRECATED_IOS(3_2, 9_0);
  164. </code></pre>
  165. @discussion 通知:
  166. * MPMoviePlayerLoadStateDidChangeNotification,当加载状态变化时提供通知
  167. @since Available in KSYMoviePlayerController 1.0 and later.
  168. */
  169. // Returns the network load state of the movie player.
  170. @property (nonatomic, readonly) MPMovieLoadState loadState;
  171. /**
  172. @abstract 播放视频时是否需要自动播放,默认值为YES。
  173. @discussion
  174. * 如果shouldAutoplay值为YES,则调用[prepareToPlay]([KSYMediaPlayback prepareToPlay])方法后,播放器完成初始化后将自动调用[play]([KSYMediaPlayback play])方法播放视频。
  175. * 如果shouldAutoplay值为NO,则播放器完成初始化后将等待外部调用[play]([KSYMediaPlayback play])方法。
  176. * 开发者可以监听播放SDK发送的MPMediaPlaybackIsPreparedToPlayDidChangeNotification通知。在收到该通知后进行其他操作并主动调用[play]([KSYMediaPlayback play])方法开启播放。
  177. @since Available in KSYMoviePlayerController 1.0 and later.
  178. */
  179. // Indicates if a movie should automatically start playback when it is likely to finish uninterrupted based on e.g. network conditions. Defaults to YES.
  180. @property (nonatomic) BOOL shouldAutoplay;
  181. /**
  182. @abstract 当前缩放显示模式。
  183. @discussion 当前支持四种缩放模式:
  184. <pre><code>
  185. typedef NS_ENUM(NSInteger, MPMovieScalingMode) {
  186. MPMovieScalingModeNone, // 无缩放
  187. MPMovieScalingModeAspectFit, // 同比适配,某个方向会有黑边
  188. MPMovieScalingModeAspectFill, // 同比填充,某个方向的显示内容可能被裁剪
  189. MPMovieScalingModeFill // 满屏填充,与原始视频比例不一致
  190. } NS_DEPRECATED_IOS(2_0, 9_0);
  191. </code></pre>
  192. @since Available in KSYMoviePlayerController 1.0 and later.
  193. */
  194. // Determines how the content scales to fit the view. Defaults to MPMovieScalingModeAspectFit.
  195. @property (nonatomic) MPMovieScalingMode scalingMode;
  196. /**
  197. @abstract 当前视频总时长
  198. @discussion 视频总时长,单位是秒。
  199. * 如果是直播视频源,总时长为0.
  200. * 如果该信息未知,总时长默认为0.
  201. @since Available in KSYMoviePlayerController 1.0 and later.
  202. */
  203. // The duration of the movie, or 0.0 if not known.
  204. @property (nonatomic, readonly) NSTimeInterval duration;
  205. /**
  206. @abstract 当前视频可播放长度
  207. @discussion 视频可播放时长,单位是秒。
  208. * currentPlaybackTime 标记的是播放器当前已播放的时长。
  209. * playableDuration 标记的是播放器缓冲的时间,会稍大于currentPlaybackTime,与currentPlaybackTime的差值则是缓冲长度。
  210. * duration 是视频总时长。
  211. @since Available in KSYMoviePlayerController 1.0 and later.
  212. */
  213. // The currently playable duration of the movie, for progressively downloaded network content.
  214. @property (nonatomic, readonly) NSTimeInterval playableDuration;
  215. /**
  216. @abstract 数据统计,默认开启
  217. @discussion 可开关
  218. @warning 该方法由金山云引入,不是原生系统接口
  219. @since Available in KSYMoviePlayerController 1.0 and later.
  220. */
  221. @property (nonatomic, assign) BOOL shouldEnableKSYStatModule;
  222. /**
  223. @abstract 当前视频宽高
  224. @discussion 获取信息
  225. * 监听MPMovieNaturalSizeAvailableNotification
  226. * 播放过程中,宽高信息可能会产生更改
  227. @since Available in KSYMoviePlayerController 1.0 and later.
  228. */
  229. @property (nonatomic, readonly) CGSize naturalSize;
  230. /**
  231. @abstract 当前视频自带旋转(逆时针)角度
  232. @discussion rotateDegress 是人为旋转角度,naturalRotate是文件meta信息中自带的旋转角度
  233. @warning 该方法由金山云引入,不是原生系统接口
  234. @since Available in KSYMoviePlayerController 2.2.0 and later.
  235. */
  236. @property (nonatomic, readonly) NSInteger naturalRotate;
  237. #pragma mark KSYMoviePlayerController New Feature
  238. /**
  239. @abstract 获取播放器日志
  240. @discussion 相关字段说明请联系金山云技术支持
  241. @since Available in KSYMoviePlayerController 1.0 and later.
  242. */
  243. @property (nonatomic, copy)void (^logBlock)(NSString *logJson);
  244. /**
  245. @abstract bufferTimeMax指定播放时的缓冲时长,单位秒
  246. @discussion 对于直播流,该属性用于直播延时控制;对于点播流,该属性用于缓冲时长控制
  247. * 直播流该属性默认为2秒,设置为0或负值时为关闭直播追赶
  248. * 点播流该属性默认为3600秒,且与bufferSizeMax同时生效,两者取小值
  249. @warning 该方法由金山云引入,不是原生系统接口
  250. @since Available in KSYMoviePlayerController 1.0 and later.
  251. */
  252. @property NSTimeInterval bufferTimeMax;
  253. /**
  254. @abstract bufferSizeMax指定点播播放时的最大缓冲,单位MB
  255. @discussion 取值大小为0-100,超过此区间时将使用默认值15。
  256. * 该属性仅对点播视频有效;
  257. * 默认值为15。
  258. @warning 该方法由金山云引入,不是原生系统接口
  259. @since Available in KSYMoviePlayerController 2.0 and later.
  260. */
  261. @property NSUInteger bufferSizeMax;
  262. /**
  263. @abstract 已经加载的数据大小
  264. @discussion 已经加载的数据大小,单位是兆。
  265. * 已经加载的全部数据大小,包括音频和视频。
  266. * 数据包括已经播放的,和当前的cache数据。
  267. @warning 该方法由金山云引入,不是原生系统接口
  268. @since Available in KSYMoviePlayerController 1.0 and later.
  269. */
  270. // The flow size of the movie which has been download, or 0.0 if not known.
  271. @property (nonatomic, readonly) double readSize;
  272. /**
  273. @abstract buffer为空时,拉取数据所耗的时长
  274. @discussion 当buffer为空时,开始统计。单位为秒。
  275. * 当MPMoviePlayerLoadStateDidChangeNotification 通知发起;
  276. * MPMovieLoadState状态为MPMovieLoadStateStalled 开始计时;
  277. * MPMovieLoadState状态为MPMovieLoadStatePlayable 或者 MPMovieLoadStatePlaythroughOK时,结束计时;
  278. @warning 该方法由金山云引入,不是原生系统接口
  279. @since Available in KSYMoviePlayerController 1.0 and later.
  280. */
  281. @property (nonatomic, readonly) NSTimeInterval bufferEmptyDuration;
  282. /**
  283. @abstract 发起cache的次数
  284. @discussion 当buffer为空时,统计一次,统计的条件为
  285. * 当MPMoviePlayerLoadStateDidChangeNotification 通知发起
  286. * MPMovieLoadState 状态为MPMovieLoadStateStalled
  287. @warning 该方法由金山云引入,不是原生系统接口
  288. @since Available in KSYMoviePlayerController 1.0 and later.
  289. */
  290. @property (nonatomic, readonly) NSInteger bufferEmptyCount;
  291. /**
  292. @abstract 视频流server ip
  293. @discussion 当收到prepared后,即可以查询当前连接的视频流server ip
  294. @warning 该方法由金山云引入,不是原生系统接口
  295. @since Available in KSYMoviePlayerController 1.0 and later.
  296. */
  297. @property (nonatomic, readonly) NSString* serverAddress;
  298. /**
  299. @abstract 客户端出口IP
  300. @discussion 当收到prepared后,即可以查询客户端的出口IP
  301. @warning 该方法由金山云引入,不是原生系统接口
  302. @since Available in KSYMoviePlayerController 1.5.0.1 and later.
  303. */
  304. @property (nonatomic, readonly) NSString *clientIP;
  305. /**
  306. @abstract 客户端LocalDNSIP
  307. @discussion 当收到prepared后,即可以查询客户端的LocalDNSIP
  308. @warning 该方法由金山云引入,不是原生系统接口
  309. @since Available in KSYMoviePlayerController 1.5.0.1 and later.
  310. */
  311. @property (nonatomic, readonly) NSString *localDNSIP;
  312. /**
  313. @abstract 视频流qos信息
  314. @discussion 在播放过程中,即可以查询当前连接的视频流qos信息
  315. @warning 该方法由金山云引入,不是原生系统接口
  316. @since Available in KSYMoviePlayerController 1.0 and later.
  317. */
  318. @property (nonatomic, strong) KSYQosInfo *qosInfo;
  319. /**
  320. @abstract 截图
  321. @warning 该方法由金山云引入,不是原生系统接口
  322. @return 当前时刻的视频UIImage 图像
  323. @since Available in KSYMoviePlayerController 1.0 and later.
  324. */
  325. - (UIImage *)thumbnailImageAtCurrentTime;
  326. /**
  327. @abstract 是否开启视频后处理
  328. @discussion 默认是关闭
  329. * 只在[prepareToPlay]([KSYMediaPlayback prepareToPlay]) 调用前设置生效;
  330. @warning 该方法由金山云引入,不是原生系统接口
  331. @since Available in KSYMoviePlayerController 1.0 and later.
  332. */
  333. @property(nonatomic) BOOL shouldEnableVideoPostProcessing;
  334. /**
  335. @abstract 是否开启硬件解码
  336. @discussion 如果系统版本高于8.0,默认开启硬件解码;否则,默认使用软件解码
  337. * 只在[prepareToPlay]([KSYMediaPlayback prepareToPlay]) 调用前设置生效
  338. @warning 该方法由金山云引入,不是原生系统接口
  339. @since Available in KSYMoviePlayerController 1.3.1 and later.
  340. */
  341. @property (nonatomic, assign) MPMovieVideoDecoderMode videoDecoderMode;
  342. /**
  343. @abstract 是否静音
  344. @discussion
  345. * 默认不静音
  346. * [prepareToPlay]([KSYMediaPlayback prepareToPlay])方法前设置即生效,也可以在播放过程中动态切换
  347. @warning 该方法由金山云引入,不是原生系统接口
  348. @since Available in KSYMoviePlayerController 1.3.1 and later.
  349. */
  350. @property(nonatomic) BOOL shouldMute;
  351. /**
  352. @abstract 是否隐藏视频
  353. @discussion
  354. * 默认不隐藏
  355. * 隐藏视频时播放器本身不再进行渲染动作
  356. * 如果设置了videoDataBlock回调,隐藏视频时数据会照常上抛
  357. * [prepareToPlay]([KSYMediaPlayback prepareToPlay])方法前设置即生效,也可以在播放过程中动态切换
  358. @warning 该方法由金山云引入,不是原生系统接口
  359. @since Available in KSYMoviePlayerController 1.6.1 and later.
  360. */
  361. @property(nonatomic) BOOL shouldHideVideo;
  362. /**
  363. @abstract 是否循环播放
  364. @discussion 默认不循环
  365. * 只在[prepareToPlay]([KSYMediaPlayback prepareToPlay]) 调用前设置生效;
  366. * 只有点播生效,直播场景请勿设置
  367. @warning 该方法由金山云引入,不是原生系统接口
  368. @since Available in KSYMoviePlayerController 1.3.1 and later.
  369. */
  370. @property(nonatomic) BOOL shouldLoop;
  371. /**
  372. @abstract 视频数据回调
  373. @discussion 调用[prepareToPlay]([KSYMediaPlayback prepareToPlay])方法之前设置生效,回调数据为同步完成后的数据
  374. @warning 该方法由金山云引入,不是原生系统接口
  375. @since Available in KSYMoviePlayerController 1.3.3 and later.
  376. @see KSYPlyVideoDataBlock
  377. */
  378. @property (nonatomic, copy)KSYPlyVideoDataBlock videoDataBlock;
  379. /**
  380. @abstract 音频数据回调
  381. @discussion 调用[prepareToPlay]([KSYMediaPlayback prepareToPlay])方法之前设置生效,回调数据为同步完成后的数据
  382. @warning 该方法由金山云引入,不是原生系统接口
  383. @since Available in KSYMoviePlayerController 1.3.3 and later.
  384. @see KSYPlyAudioDataBlock
  385. */
  386. @property (nonatomic, copy)KSYPlyAudioDataBlock audioDataBlock;
  387. /**
  388. @abstract 消息数据回调
  389. @discussion 调用[prepareToPlay]([KSYMediaPlayback prepareToPlay])方法之前设置生效,回调数据为同步完成后的数据
  390. @warning 该方法由金山云引入,不是原生系统接口
  391. @since Available in KSYMoviePlayerController 1.3.3 and later.
  392. @see KSYPlyMessageDataBlock
  393. */
  394. @property (nonatomic, copy)KSYPlyMessageDataBlock messageDataBlock;
  395. /**
  396. @abstract 视频图像texture回调
  397. @discussion 调用[prepareToPlay]([KSYMediaPlayback prepareToPlay])方法之前设置生效
  398. @warning 该方法由金山云引入,不是原生系统接口。使用该属性时需要在初始化时使用[initWithContentURL:sharegroup:]([initWithContentURL:sharegroup:])函数初始化播放器,否则该属性无效
  399. @since Available in KSYMoviePlayerController 1.8.7 and later.
  400. @see KSYPlyAudioDataBlock
  401. */
  402. @property (nonatomic, copy)KSYPlyTextureBlock textureBlock;
  403. /**
  404. @abstract 指定逆时针旋转角度,只能是0/90/180/270, 不符合上述值不进行旋转
  405. @warning 该方法由金山云引入,不是原生系统接口
  406. @since Available in KSYMoviePlayerController 1.4.1 and later.
  407. */
  408. @property (nonatomic) int rotateDegress;
  409. /**
  410. @abstract 指定视频是否镜像显示
  411. @warning 该方法由金山云引入,不是原生系统接口
  412. @since Available in KSYMoviePlayerController 1.8.4 and later.
  413. */
  414. @property (nonatomic) BOOL mirror;
  415. /**
  416. @abstract 快速播放
  417. @discussion 默认不快速播放
  418. * 非固定倍速下的快速播放,而是全速将解码器中的数据显示出来
  419. * 当播放文件存在音频时该功能生效;
  420. * 播放前或者播放过程中均可配置;
  421. * 开启快速播放后,不在输出声音,但是audioDataBlock中依然会上抛pcm数据
  422. * 开启快速播放后,可能会导致播放器不停的进入/结束缓冲状态;
  423. @warning 该方法由金山云引入,不是原生系统接口
  424. @since Available in KSYMoviePlayerController 1.5.2 and later.
  425. */
  426. @property(nonatomic) BOOL superFastPlay;
  427. /**
  428. @abstract 是否进行视频反交错处理
  429. @discussion 默认不进行反交错处理
  430. @warning 该方法由金山云引入,不是原生系统接口
  431. @since Available in KSYMoviePlayerController 1.7.2 and later.
  432. */
  433. @property(nonatomic) MPMovieVideoDeinterlaceMode deinterlaceMode;
  434. /**
  435. @abstract 是否打断其他后台的音乐播放
  436. @discussion 也可以理解为是否允许和其他音频同时播放
  437. @discussion YES:开始播放时,会打断其他的后台播放音频,也会被其他音频播放打断
  438. @discussion NO: 可以与其他后台播放共存,相互之间不会被打断
  439. @discussion 默认为YES
  440. @warning 该方法由金山云引入,不是原生系统接口
  441. @since Available in KSYMoviePlayerController 1.5.3 and later.
  442. */
  443. @property(nonatomic) BOOL bInterruptOtherAudio;
  444. /**
  445. @abstract 立体声平衡模式,默认立体声输出,取值范围为[-1.0, 1.0]
  446. @discussion 针对单声道或双声道音频播放配置时有效,多声道音频播放配置无效
  447. @discussion 需要佩戴耳机以区分左右声道,手机外放无效果
  448. @discussion prepareToPlay前配置无效,应在播放过程中动态配置
  449. @discussion 该值为0.0时,左右声道都有声音,< 0时,右声道声音小于左声道;> 0时,左声道声音小于右声道
  450. @warning 该方法由金山云引入,不是原生系统接口
  451. @since Available in KSYMoviePlayerController 2.0.3 and later
  452. */
  453. @property(nonatomic) float audioPan;
  454. /**
  455. @abstract 用于检测网络连通性的地址,默认使用地址为“www.baidu.com”
  456. @discussion 用户可自定义地址,但不可设置无效地址,如果不清楚规则,建议使用默认值
  457. @discussion 设置为nil时,则关闭网络连通性的检测, networkStatus属性值为-1
  458. @discussion 建议在创建对象后设置一次或不设置,不推荐在播放过程中动态配置
  459. @warning 该方法由金山云引入,不是原生系统接口
  460. @since Available in KSYMoviePlayerController 2.1.1 and later
  461. */
  462. @property (nonatomic, readwrite) NSString* networkDetectURL;
  463. /**
  464. @abstract 网络连通状态
  465. @discussion 使用 www.kingsoft.com 作为检测目标
  466. @discussion 如果networkStatus不等于KSYNetworkStatus枚举中的任意值,则表明当前尚未监测到网络状态
  467. @since Available in KSYMoviePlayerController 2.1.1 and later
  468. */
  469. @property (nonatomic, readonly) KSYNetworkStatus networkStatus;
  470. /**
  471. @abstract 设置播放速度,取值范围(0.5~2.0),默认1.0
  472. @warning 该属性由金山云引入,不是原生系统接口
  473. @since Available in KSYMoviePlayerController 2.4.1 and later.
  474. */
  475. @property (nonatomic) float playbackSpeed;
  476. /**
  477. @abstract timeout指定拉流超时时间,单位是秒
  478. @param prepareTimeout 建立链接超时时间,默认值是10秒
  479. @param readTimeout 拉流超时时间,默认值是30秒
  480. @warning 该方法由金山云引入,不是原生系统接口
  481. @since Available in KSYMoviePlayerController 1.3.1 and later.
  482. */
  483. - (void)setTimeout:(int)prepareTimeout readTimeout:(int)readTimeout;
  484. /**
  485. @abstract setVolume指定播放器输出音量
  486. @param leftVolume left volume scalar [0~2.0f]
  487. @param rightVolume right volume scalar [0~2.0f]
  488. @discussion 使用说明
  489. * 输入参数超出范围将失效
  490. * 输出到speaker时需同时设置左右音量为有效值
  491. 如:leftVolume = rightVolume = 0.5f
  492. @warning 该方法由金山云引入,不是原生系统接口
  493. @since Available in KSYMoviePlayerController 1.3.3 and later.
  494. */
  495. -(void)setVolume:(float)leftVolume rigthVolume:(float)rightVolume;
  496. /**
  497. @abstract 获取sdk版本
  498. @warning 该方法由金山云引入,不是原生系统接口
  499. @since Available in KSYMoviePlayerController 1.3.1 and later.
  500. */
  501. - (NSString *)getVersion;
  502. /**
  503. @abstract 获取播放Meta信息
  504. @discussion 收到MPMediaPlaybackIsPreparedToPlayDidChangeNotification通知后才能获取到数据
  505. @discussion 暂时支持的查询包括
  506. * kKSYPLYHttpFirstDataTime 建链成功后到收到第一个包所消耗的时间
  507. * kKSYPLYHttpConnectTime 链接服务器所消耗的时间
  508. * kKSYPLYHttpAnalyzeDns 解析DNS所消耗的时间
  509. @warning 该方法由金山云引入,不是原生系统接口
  510. @since Available in KSYMoviePlayerController 1.3.1 and later.
  511. */
  512. - (NSDictionary *)getMetadata;
  513. /**
  514. @abstract 获取播放Meta
  515. @discussion 收到MPMediaPlaybackIsPreparedToPlayDidChangeNotification通知后才能获取到数据
  516. @discussion 暂时支持的查询包括
  517. * 当metaType为MPMovieMetaType_Media时,所得到的结果与getMetadata方法相同
  518. * 当metaType为其他类型时,得到的当前播放的视频/音频/字幕流的meta信息
  519. @warning 该方法由金山云引入,不是原生系统接口
  520. @since Available in KSYMoviePlayerController 2.5.2 and later.
  521. */
  522. - (NSDictionary *)getMetadata:(MPMovieMetaType)metaType;
  523. /**
  524. @abstract 当前播放器是否在播放
  525. @return 获取[playbackState]([KSYMoviePlayerController playbackState])信息,如果当前状态为MPMoviePlaybackStatePlaying,则返回TRUE。其他情况返回FASLE。
  526. @warning 该方法由金山云引入,不是原生系统接口
  527. @see playbackState
  528. @since Available in KSYMoviePlayerController 1.0 and later.
  529. */
  530. // A description of the error encountered.
  531. - (BOOL)isPlaying;
  532. /**
  533. @abstract 重新启动拉流
  534. @param aUrl 视频播放地址,该地址可以是本地地址或者服务器地址.如果为nil,则使用前一次播放地址
  535. @discussion 调用场景如下:
  536. * 当播放器调用方发现卡顿时,可以主动调用
  537. * 当估计出更优质的拉流ip时,可以主动调用
  538. * 当发生WiFi/3G网络切换时,可以主动调用
  539. * 当播放器回调体现播放完成时,可以主动调用
  540. * 播放器SDK不会自动调用reload功能
  541. @warning 该方法由金山云引入,不是原生系统接口
  542. @since Available in KSYMoviePlayerController 1.0 and later.
  543. */
  544. - (void)reload:(NSURL *)aUrl;
  545. /**
  546. @abstract 重新启动拉流
  547. @param aUrl 视频播放地址,该地址可以是本地地址或者服务器地址.如果为nil,则使用前一次播放地址
  548. @param flush 是否清除上一个url的缓冲区内容,该值为NO不清除,为YES则清除
  549. @discussion 说明:
  550. * 如果在直播过程中使用reload,希望达到续播的效果,建议flush值设为NO
  551. @warning 该方法由金山云引入,不是原生系统接口
  552. @since Available in KSYMoviePlayerController 1.0 and later.
  553. */
  554. - (void)reload:(NSURL *)aUrl flush:(BOOL)flush;
  555. /**
  556. @abstract 重新启动拉流
  557. @param aUrl 视频播放地址,该地址可以是本地地址或者服务器地址.如果为nil,则使用前一次播放地址
  558. @param flush 是否清除上一个url的缓冲区内容,该值为NO不清除,为YES则清除
  559. @param mode 配置reload后的加载模式,该值为MPMovieReloadMode_Fast则启用加速播放;若为MPMovieReloadMode_Accurate则启用精准查找模式播放
  560. @discussion 说明:
  561. * 如果在直播过程中使用reload,希望达到续播的效果,建议flush值设为NO
  562. * 设置为MPMovieReloadMode_Fast模式可以加快起播速度,但在码流音视频交织较差的情况下,可能无法检测到所有音视频流
  563. * 设置为MPMovieReloadMode_Accurate模式起播速度会有所下降,但可以保证检测到所有音视频流
  564. * 如果是监听到MPMoviePlayerSuggestReloadNotification消息后调用reload接口,则mode模式一定要设置为MPMovieReloadMode_Accurate,其它情况可根据实际使用场景自行配置
  565. @warning 该方法由金山云引入,不是原生系统接口
  566. @since Available in KSYMoviePlayerController 1.6.3 and later.
  567. */
  568. - (void)reload:(NSURL *)aUrl flush:(bool)flush mode:(MPMovieReloadMode)mode;
  569. /**
  570. @abstract 获取当前播放的pts
  571. @warning 该方法由金山云引入,不是原生系统接口
  572. @since Available in KSYMoviePlayerController 1.5.0.0 and later.
  573. */
  574. - (NSTimeInterval)getCurrentPts;
  575. /**
  576. @abstract 设置播放url
  577. @param url 视频播放地址,该地址可以是本地地址或者服务器地址.
  578. @discussion 使用说明
  579. * 通常用于使用一个对象进行多次播放的场景
  580. * 调用reset接口停止播放后使用该接口来设置下一次播放地址
  581. * 需要在[prepareToPlay]([KSYMediaPlayback prepareToPlay])方法之前设置
  582. * v2.1.0及之后的版本,该url不可设置为nil;之前的版本设置为nil,会播放上一次的播放地址
  583. @warning 该方法由金山云引入,不是原生系统接口
  584. @since Available in KSYMoviePlayerController 1.6.2 and later.
  585. */
  586. - (void)setUrl:(NSURL *)url;
  587. /**
  588. @abstract 设置播放url
  589. @param baseURL 视频播放的绝对地址,该地址可以是本地地址或者服务器地址
  590. @param fileList 分片列表
  591. @discussion url和fileList不可同时为nil
  592. @warning 该方法由金山云引入,不是原生系统接口
  593. @since Available in KSYMoviePlayerController 2.1.0 and later.
  594. */
  595. - (void)setUrl:(NSURL *)url fileList:(NSArray *)fileList;
  596. /**
  597. @abstract 重置播放器
  598. @param holdLastPic 是否保留最后一帧
  599. @discussion 使用说明
  600. * 通常用于使用一个对象进行多次播放的场景
  601. * 该方法可以停止播放,但是不会销毁播放器
  602. * 调用该方法后可以通过调用stop方法来销毁播放器
  603. * 如果使用一个对象进行多次播放,需要在reset后使用setUrl方法设置下次播放地址
  604. @warning 该方法由金山云引入,不是原生系统接口
  605. @since Available in KSYMoviePlayerController 1.6.2 and later.
  606. */
  607. - (void)reset:(BOOL)holdLastPic;
  608. /**
  609. @abstract 跳转到指定位置播放
  610. @param pos 跳转到的位置,单位秒
  611. @param isAccurate 是否精确跳转,NO时等同于currentPlaybackTime, YES时为精确跳转
  612. @discussion 媒体文件总时长较小且关键帧间隔较大时,需要使用精确跳转, 总时长较大或者不需要精确定位时可以使用currentPlaybackTime或者将isAccurate设置为NO进行跳转
  613. @warning 该方法由金山云引入,不是原生系统接口
  614. @since Available in KSYMoviePlayerController 1.9.1 and later.
  615. */
  616. - (void)seekTo:(double)pos accurate:(BOOL)isAccurate;
  617. /**
  618. @abstract 发送http请求时需要header带上的字段
  619. @param header 自定义http header字段
  620. @discussion 在调用prepareToPlay方法前调用生效
  621. @warning 该方法由金山云引入,不是原生系统接口
  622. @since Available in KSYMoviePlayerController 2.0.3 and later.
  623. */
  624. -(void)setHttpHeaders:(NSDictionary *)headers;
  625. /**
  626. @abstract 设置开启/关闭指定的媒体轨道
  627. @param trackIndex - 轨道的stream index
  628. @param selected - 开启/关闭指定媒体轨道
  629. @warning 该方法由金山云引入,不是原生系统接口
  630. @since Available in KSYMoviePlayerController 2.5.2 and later.
  631. */
  632. - (void) setTrackSelected:(NSInteger)trackIndex selected:(BOOL)selected;
  633. /**
  634. @abstract 设置本地字幕文件的地址
  635. @param subtitleFilePath 本地字幕文件地址
  636. @discussion 在播放过程中调用
  637. @warning 该方法由金山云引入,不是原生系统接口
  638. @since Available in KSYMoviePlayerController 2.5.2 and later.
  639. */
  640. - (void)setExtSubtitleFilePath:(NSString *)subtitleFilePath;
  641. @end