TXLivePlayer.h 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. /*
  2. *
  3. * Module: TXLivePlayer @ TXLiteAVSDK
  4. *
  5. * Function: 腾讯云直播播放器
  6. *
  7. * Version: <:Version:>
  8. */
  9. #import <Foundation/Foundation.h>
  10. #import "TXLiveSDKTypeDef.h"
  11. #import "TXLivePlayListener.h"
  12. #import "TXLivePlayConfig.h"
  13. #import "TXVideoCustomProcessDelegate.h"
  14. #import "TXLiveRecordTypeDef.h"
  15. #import "TXLiveRecordListener.h"
  16. #import "TXAudioRawDataDelegate.h"
  17. /// @defgroup TXLivePlayer_ios TXLivePlayer
  18. /// 腾讯云直播播放器接口类
  19. /// @{
  20. /**
  21. * 支持的直播和点播类型
  22. *
  23. * @note 新版本的点播 SDK,推荐参考 TXVodPlayer.h
  24. */
  25. typedef NS_ENUM(NSInteger, TX_Enum_PlayType) {
  26. /// RTMP 直播
  27. PLAY_TYPE_LIVE_RTMP = 0,
  28. /// FLV 直播
  29. PLAY_TYPE_LIVE_FLV = 1,
  30. #if TARGET_OS_IPHONE
  31. /// FLV 点播
  32. PLAY_TYPE_VOD_FLV = 2,
  33. /// HLS 点播
  34. PLAY_TYPE_VOD_HLS = 3,
  35. /// MP4点播
  36. PLAY_TYPE_VOD_MP4 = 4,
  37. #endif
  38. /// RTMP 直播加速播放
  39. PLAY_TYPE_LIVE_RTMP_ACC = 5,
  40. #if TARGET_OS_IPHONE
  41. /// 本地视频文件
  42. PLAY_TYPE_LOCAL_VIDEO = 6,
  43. #endif
  44. };
  45. /**
  46. * 视频播放器
  47. *
  48. * 主要负责将直播流的音视频画面进行解码和本地渲染,包含如下技术特点:
  49. * - 针对腾讯云的拉流地址,可使用低延时拉流,实现直播连麦等相关场景。
  50. * - 针对腾讯云的拉流地址,可使用直播时移功能,能够实现直播观看与时移观看的无缝切换。
  51. * - 支持自定义的音视频数据处理,让您可以根据项目需要处理直播流中的音视频数据后,进行渲染以及播放。
  52. */
  53. @interface TXLivePlayer : NSObject
  54. /////////////////////////////////////////////////////////////////////////////////
  55. //
  56. // (一)SDK 基础函数
  57. //
  58. /////////////////////////////////////////////////////////////////////////////////
  59. /// @name SDK 基础函数
  60. /// @{
  61. /**
  62. * 1.1 设置播放回调,见 “TXLivePlayListener.h” 文件中的详细定义
  63. */
  64. @property(nonatomic, weak) id <TXLivePlayListener> delegate;
  65. /**
  66. * 1.2 设置视频处理回调,见 “TXVideoCustomProcessDelegate.h” 文件中的详细定义
  67. */
  68. @property(nonatomic, weak) id <TXVideoCustomProcessDelegate> videoProcessDelegate;
  69. /**
  70. * 1.3 设置音频处理回调,见 “TXAudioRawDataDelegate.h” 文件中的详细定义
  71. */
  72. @property(nonatomic, weak) id <TXAudioRawDataDelegate> audioRawDataDelegate;
  73. /**
  74. * 1.4 是否开启硬件加速,默认值:NO
  75. */
  76. @property(nonatomic, assign) BOOL enableHWAcceleration;
  77. /**
  78. * 1.5 设置 TXLivePlayConfig 播放配置项,见 “TXLivePlayConfig.h” 文件中的详细定义
  79. */
  80. @property(nonatomic, copy) TXLivePlayConfig *config;
  81. #if TARGET_OS_IPHONE
  82. /**
  83. * 1.6 设置短视频录制回调,见 “TXLiveRecordListener.h” 文件中的详细定义
  84. */
  85. @property (nonatomic, weak) id<TXLiveRecordListener> recordDelegate;
  86. /**
  87. * 1.7 startPlay 后是否立即播放,默认 YES,只有点播有效
  88. */
  89. @property BOOL isAutoPlay;
  90. #endif
  91. /// @}
  92. /////////////////////////////////////////////////////////////////////////////////
  93. //
  94. // (二)播放基础接口
  95. //
  96. /////////////////////////////////////////////////////////////////////////////////
  97. /// @name 播放基础接口
  98. /// @{
  99. /**
  100. * 2.1 创建 Video 渲染 View,该控件承载着视频内容的展示。
  101. *
  102. * 变更历史:1.5.2版本将参数 frame 废弃,设置此参数无效,控件大小与参数 view 的大小保持一致,如需修改控件的大小及位置,请调整父 view 的大小及位置。 参考文档:[绑定渲染界面](https://www.qcloud.com/doc/api/258/4736#step-3.3A-.E7.BB.91.E5.AE.9A.E6.B8.B2.E6.9F.93.E7.95.8C.E9.9D.A2)
  103. *
  104. * @param frame Widget 在父 view 中的 frame
  105. * @param view 父 view
  106. * @param idx Widget 在父 view 上 的层级位置
  107. */
  108. - (void)setupVideoWidget:(CGRect)frame containView:(TXView *)view insertIndex:(unsigned int)idx;
  109. /*
  110. * 修改 VideoWidget frame
  111. * 变更历史:1.5.2版本将此方法废弃,调用此方法无效,如需修改控件的大小及位置,请调整父 view 的大小及位置
  112. * 参考文档:https://www.qcloud.com/doc/api/258/4736#step-3.3A-.E7.BB.91.E5.AE.9A.E6.B8.B2.E6.9F.93.E7.95.8C.E9.9D.A2
  113. */
  114. //- (void)resetVideoWidgetFrame:(CGRect)frame;
  115. /**
  116. * 2.2 移除 Video 渲染 Widget
  117. */
  118. - (void)removeVideoWidget;
  119. /**
  120. * 2.3 启动从指定 URL 播放 RTMP 音视频流
  121. *
  122. * @param url 完整的 URL(如果播放的是本地视频文件,这里传本地视频文件的完整路径)
  123. * @param playType 播放类型
  124. * @return 0表示成功,其它为失败
  125. */
  126. - (int)startPlay:(NSString *)url type:(TX_Enum_PlayType)playType;
  127. /**
  128. * 2.4 停止播放音视频流
  129. *
  130. * @return 0:成功;其它:失败
  131. */
  132. - (int)stopPlay;
  133. /**
  134. * 2.5 是否正在播放
  135. *
  136. * @return YES 拉流中,NO 没有拉流
  137. */
  138. - (BOOL)isPlaying;
  139. /**
  140. * 2.6 暂停播放
  141. *
  142. * 适用于点播,直播(此接口会暂停数据拉流,不会销毁播放器,暂停后,播放器会显示最后一帧数据图像)
  143. */
  144. - (void)pause;
  145. /**
  146. * 2.6 继续播放,适用于点播,直播
  147. */
  148. - (void)resume;
  149. /// @}
  150. /////////////////////////////////////////////////////////////////////////////////
  151. //
  152. // (三)视频相关接口
  153. //
  154. /////////////////////////////////////////////////////////////////////////////////
  155. /// @name 视频相关接口
  156. /// @{
  157. /**
  158. * 3.1 设置画面的方向
  159. *
  160. * @param rotation 方向
  161. * @see TX_Enum_Type_HomeOrientation
  162. */
  163. - (void)setRenderRotation:(TX_Enum_Type_HomeOrientation)rotation;
  164. /**
  165. * 3.2 设置画面的裁剪模式
  166. *
  167. * @param renderMode 裁剪
  168. * @see TX_Enum_Type_RenderMode
  169. */
  170. - (void)setRenderMode:(TX_Enum_Type_RenderMode)renderMode;
  171. #if TARGET_OS_IPHONE
  172. /**
  173. * 3.3 截屏
  174. *
  175. * @param snapshotCompletionBlock 通过回调返回当前图像
  176. */
  177. - (void)snapshot:(void (^)(TXImage *))snapshotCompletionBlock;
  178. #endif
  179. /// @}
  180. /////////////////////////////////////////////////////////////////////////////////
  181. //
  182. // (四)音频相关接口
  183. //
  184. /////////////////////////////////////////////////////////////////////////////////
  185. /// @name 音频相关接口
  186. /// @{
  187. /**
  188. * 4.1 设置静音
  189. */
  190. - (void)setMute:(BOOL)bEnable;
  191. /**
  192. * 4.2 设置音量
  193. *
  194. * @param volume 音量大小,取值范围0 - 100
  195. */
  196. - (void)setVolume:(int)volume;
  197. #if TARGET_OS_IPHONE
  198. /**
  199. * 4.3 设置声音播放模式(切换扬声器,听筒)
  200. * @param audioRoute 声音播放模式
  201. */
  202. + (void)setAudioRoute:(TXAudioRouteType)audioRoute;
  203. #endif
  204. /**
  205. * 4.4 设置音量大小回调接口
  206. *
  207. * @param volumeEvaluationListener 音量大小回调接口,音量取值范围0 - 100
  208. */
  209. - (void)setAudioVolumeEvaluationListener:(void(^)(int))volumeEvaluationListener;
  210. /**
  211. * 4.5 启用音量大小提示
  212. *
  213. * 开启后会在 volumeEvaluationListener 中获取到 SDK 对音量大小值的评估。
  214. *
  215. * @param interval 决定了 volumeEvaluationListener 回调的触发间隔,单位为ms,最小间隔为100ms,如果小于等于0则会关闭回调,建议设置为300ms;
  216. */
  217. - (void)enableAudioVolumeEvaluation:(NSUInteger)interval;
  218. /// @}
  219. /////////////////////////////////////////////////////////////////////////////////
  220. //
  221. // (五)直播时移相关接口
  222. //
  223. /////////////////////////////////////////////////////////////////////////////////
  224. /// @name 直播时移相关接口
  225. /// @{
  226. /**
  227. * 5.1 直播时移准备,拉取该直播流的起始播放时间。
  228. *
  229. * 使用时移功能需在播放开始后调用此方法,否则时移失败。时移的使用请参考文档 [超级播放器](https://cloud.tencent.com/document/product/881/20208#.E6.97.B6.E7.A7.BB.E6.92.AD.E6.94.BE)
  230. *
  231. * @warning 非腾讯云直播地址不能时移
  232. *
  233. * @param domain 时移域名
  234. * @param bizId 流 bizId
  235. *
  236. * @return 0:OK;-1:无播放地址;-2:appId 未配置
  237. */
  238. - (int)prepareLiveSeek:(NSString*)domain bizId:(NSInteger)bizId;
  239. /**
  240. * 5.2 停止时移播放,返回直播
  241. *
  242. * @return 0:成功;其它:失败
  243. */
  244. - (int)resumeLive;
  245. #if TARGET_OS_IPHONE
  246. /**
  247. * 5.3 播放跳转到音视频流某个时间
  248. * @param time 流时间,单位为秒
  249. * @return 0:成功;其它:失败
  250. */
  251. - (int)seek:(float)time;
  252. #endif
  253. /// @}
  254. /////////////////////////////////////////////////////////////////////////////////
  255. //
  256. // (六)视频录制相关接口
  257. //
  258. /////////////////////////////////////////////////////////////////////////////////
  259. /// @name 视频录制相关接口
  260. /// @{
  261. #if TARGET_OS_IPHONE
  262. /**
  263. * 6.1 开始录制短视频
  264. *
  265. * @param recordType 参见 TXRecordType 定义
  266. * @return 0:成功;1:正在录制短视频;-2:videoRecorder 初始化失败。
  267. */
  268. - (int)startRecord:(TXRecordType)recordType;
  269. /**
  270. * 6.2 结束录制短视频
  271. *
  272. * @return 0:成功;1:不存在录制任务;-2:videoRecorder 未初始化。
  273. */
  274. - (int)stopRecord;
  275. /**
  276. * 6.3 设置播放速率
  277. *
  278. * @param rate 正常速度为1.0;小于为慢速;大于为快速。最大建议不超过2.0
  279. */
  280. - (void)setRate:(float)rate;
  281. #endif
  282. /// @}
  283. /////////////////////////////////////////////////////////////////////////////////
  284. //
  285. // (七)更多实用接口
  286. //
  287. /////////////////////////////////////////////////////////////////////////////////
  288. /// @name 更多实用接口
  289. /// @{
  290. /**
  291. * 7.1 设置状态浮层 view 在渲染 view 上的边距
  292. *
  293. * @param margin 边距
  294. */
  295. - (void)setLogViewMargin:(TXEdgeInsets)margin;
  296. /**
  297. * 7.2 是否显示播放状态统计及事件消息浮层 view
  298. *
  299. * @param isShow 是否显示
  300. */
  301. - (void)showVideoDebugLog:(BOOL)isShow;
  302. /**
  303. * 7.3 FLV 直播无缝切换
  304. *
  305. * @param playUrl 播放地址
  306. * @return 0:成功;其它:失败
  307. * @warning playUrl 必须是当前播放直播流的不同清晰度,切换到无关流地址可能会失败
  308. */
  309. - (int)switchStream:(NSString *)playUrl;
  310. /**
  311. * 7.4 调用实验性 API 接口
  312. *
  313. * @note 该接口用于调用一些实验性功能
  314. * @param jsonStr 接口及参数描述的 JSON 字符串
  315. */
  316. - (void)callExperimentalAPI:(NSString*)jsonStr;
  317. /// @}
  318. @end
  319. /// @}