@tencentcloud/sdk-mcp 1.2.7 → 1.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/package.json +1 -1
  2. package/resource/doc/native_live/android/V2TXLiveCode_api_android.md +334 -0
  3. package/resource/doc/native_live/android/V2TXLiveDef_api_android.md +434 -0
  4. package/resource/doc/native_live/android/V2TXLivePlayerObserver_api_android.md +685 -0
  5. package/resource/doc/native_live/android/V2TXLivePlayer_api_android.md +712 -0
  6. package/resource/doc/native_live/android/V2TXLivePremier_api_android.md +284 -0
  7. package/resource/doc/native_live/android/V2TXLivePusherObserver_api_android.md +849 -0
  8. package/resource/doc/native_live/android/V2TXLivePusher_api_android.md +1046 -0
  9. package/resource/doc/native_live/flutter/V2TXLiveCode_api_flutter.md +460 -0
  10. package/resource/doc/native_live/flutter/V2TXLiveDef_api_flutter.md +558 -0
  11. package/resource/doc/native_live/flutter/V2TXLivePlayerObserver_api_flutter.md +879 -0
  12. package/resource/doc/native_live/flutter/V2TXLivePlayer_api_flutter.md +668 -0
  13. package/resource/doc/native_live/flutter/V2TXLivePremier_api_flutter.md +456 -0
  14. package/resource/doc/native_live/flutter/V2TXLivePusherObserver_api_flutter.md +332 -0
  15. package/resource/doc/native_live/flutter/V2TXLivePusher_api_flutter.md +748 -0
  16. package/resource/doc/native_live/iOS/V2TXLiveCode_api_iOS.md +328 -0
  17. package/resource/doc/native_live/iOS/V2TXLiveDef_api_iOS.md +505 -0
  18. package/resource/doc/native_live/iOS/V2TXLivePlayerObserver_api_iOS.md +507 -0
  19. package/resource/doc/native_live/iOS/V2TXLivePlayer_api_iOS.md +676 -0
  20. package/resource/doc/native_live/iOS/V2TXLivePremier_api_iOS.md +284 -0
  21. package/resource/doc/native_live/iOS/V2TXLivePusherObserver_api_iOS.md +820 -0
  22. package/resource/doc/native_live/iOS/V2TXLivePusher_api_iOS.md +1065 -0
  23. package/tools/common/get-faq.js +1 -1
  24. package/tools/common/get-faq.js.map +1 -1
  25. package/tools/definitions/get_native_live_api_def.js +22 -0
  26. package/tools/definitions/get_native_live_api_def.js.map +1 -0
  27. package/tools/index.js +4 -0
  28. package/tools/index.js.map +1 -1
  29. package/tools/native_live/get-native-live-api.js +31 -0
  30. package/tools/native_live/get-native-live-api.js.map +1 -0
  31. package/utils/report-cls-client.js +1 -1
  32. package/utils/report-es-client.js +1 -1
@@ -0,0 +1,676 @@
1
+ # 腾讯云直播SDK V2TXLivePlayer 播放接口文档
2
+
3
+ ## 概述
4
+
5
+ `V2TXLivePlayer` 是腾讯云直播播放器的核心接口类,负责从指定的直播流地址拉取音视频数据,并进行解码和本地渲染播放。
6
+
7
+ **平台支持**: iOS, macOS
8
+
9
+ ## 核心功能
10
+
11
+ ### 🎯 主要能力
12
+ - ✅ **多协议支持**: HTTP-FLV、WebRTC、TRTC、HLS、RTMP
13
+ - ✅ **画面控制**: 旋转、填充模式、镜像
14
+ - ✅ **播放控制**: 播放/停止、暂停/恢复、音量调节
15
+ - ✅ **缓存优化**: 自动调整缓存策略
16
+ - ✅ **无缝切换**: 直播流多分辨率无缝切换
17
+ - ✅ **自定义处理**: 音视频数据监听和自定义渲染
18
+ - ✅ **高级功能**: 截图、SEI消息、画中画、本地录制
19
+
20
+ ### 🔧 技术特性
21
+ - **低延迟**: 优化的缓存策略和网络自适应
22
+ - **高兼容**: 支持多种视频编码格式和分辨率
23
+ - **易集成**: 简洁的API设计和完整的回调机制
24
+ - **高性能**: 硬件加速解码和高效的渲染管线
25
+
26
+ ### 播放器实例创建
27
+ ```objc
28
+ V2TXLivePlayer *player = [[V2TXLivePlayer alloc] init];
29
+ ```
30
+
31
+ ## 接口详解
32
+
33
+ ### 1. 基础设置接口
34
+
35
+ #### setObserver() - 设置播放器回调
36
+ ```objc
37
+ - (void)setObserver:(id<V2TXLivePlayerObserver>)observer;
38
+ ```
39
+
40
+ **参数**:
41
+ - `observer`: 播放器回调目标对象,需实现 `V2TXLivePlayerObserver` 协议
42
+
43
+ **使用时机**: 播放器初始化后立即设置
44
+
45
+ **说明**: 通过设置回调,可以监听播放器状态、播放音量回调、音视频首帧回调、统计数据、警告和错误信息等
46
+
47
+ **示例**:
48
+ ```objc
49
+ [player setObserver:self];
50
+ ```
51
+
52
+ #### setRenderView() - 设置视频渲染 View
53
+ ```objc
54
+ - (V2TXLiveCode)setRenderView:(TXView *)view;
55
+ ```
56
+
57
+ **参数**:
58
+ - `view`: 播放器渲染 View,iOS为UIView,macOS为NSView
59
+
60
+ **返回值**: `V2TXLiveCode`
61
+ - `V2TXLIVE_OK`: 成功
62
+
63
+ **使用时机**: 必须在开始播放前设置渲染视图
64
+
65
+ **示例**:
66
+ ```objc
67
+ [player setRenderView:videoView];
68
+ ```
69
+
70
+ #### setRenderRotation() - 设置播放器画面的旋转角度
71
+ ```objc
72
+ - (V2TXLiveCode)setRenderRotation:(V2TXLiveRotation)rotation;
73
+ ```
74
+
75
+ **参数**:
76
+ - `rotation`: 旋转角度 `V2TXLiveDef#V2TXLiveRotation`
77
+ - `V2TXLiveRotation0`【默认值】: 0度, 不旋转
78
+ - `V2TXLiveRotation90`: 顺时针旋转90度
79
+ - `V2TXLiveRotation180`: 顺时针旋转180度
80
+ - `V2TXLiveRotation270`: 顺时针旋转270度
81
+
82
+ **返回值**: `V2TXLiveCode`
83
+ - `V2TXLIVE_OK`: 成功
84
+
85
+ **使用时机**: 无限制
86
+
87
+ **示例**:
88
+ ```objc
89
+ // 设置视频画面旋转0度
90
+ [player setRenderRotation:V2TXLiveRotation0];
91
+ // 设置视频画面旋转90度
92
+ [player setRenderRotation:V2TXLiveRotation90];
93
+ // 设置视频画面旋转180度
94
+ [player setRenderRotation:V2TXLiveRotation180];
95
+ // 设置视频画面旋转270度
96
+ [player setRenderRotation:V2TXLiveRotation270];
97
+ ```
98
+
99
+ #### setRenderFillMode() - 设置播放器画面的填充模式
100
+ ```objc
101
+ - (V2TXLiveCode)setRenderFillMode:(V2TXLiveFillMode)mode;
102
+ ```
103
+
104
+ **参数**:
105
+ - `mode`: 填充模式 `V2TXLiveDef#V2TXLiveFillMode`
106
+ - `V2TXLiveFillModeFill`【默认值】: 图像铺满屏幕,不留黑边,如果图像宽高比不同于屏幕宽高比,部分画面内容会被裁剪掉
107
+ - `V2TXLiveFillModeFit`: 图像适应屏幕,保持画面完整,但如果图像宽高比不同于屏幕宽高比,会有黑边的存在
108
+ - `V2TXLiveFillModeScaleFill`: 图像拉伸铺满,因此长度和宽度可能不会按比例变化
109
+
110
+ **返回值**: `V2TXLiveCode`
111
+ - `V2TXLIVE_OK`: 成功
112
+
113
+ **使用时机**: 无限制
114
+
115
+ **示例**:
116
+ ```objc
117
+ // 图像铺满屏幕
118
+ [player setRenderFillMode:V2TXLiveFillModeFill];
119
+ // 图像适应屏幕
120
+ [player setRenderFillMode:V2TXLiveFillModeFit];
121
+ // 图像拉伸铺满
122
+ [player setRenderFillMode:V2TXLiveFillModeScaleFill];
123
+ ```
124
+
125
+ #### setRenderMirrorMode() - 设置播放器画面的镜像模式
126
+ ```objc
127
+ - (V2TXLiveCode)setRenderMirrorMode:(BOOL)enable;
128
+ ```
129
+
130
+ **参数**:
131
+ - `enable`: 是否开启播放端镜像模式【默认值】:NO
132
+
133
+ **说明**: 开启镜像模式后,视频画面将左右翻转,您可以根据需要随时切换观看效果
134
+
135
+ **返回值**: `V2TXLiveCode`
136
+ - `V2TXLIVE_OK`: 成功
137
+
138
+ **使用时机**: 无限制
139
+
140
+ **示例**:
141
+ ```objc
142
+ // 开启镜像模式
143
+ [player setRenderMirrorMode:YES];
144
+ // 关闭镜像模式
145
+ [player setRenderMirrorMode:NO];
146
+ ```
147
+
148
+ ### 2. 播放控制接口
149
+
150
+ #### startLivePlay() - 开始播放音视频流
151
+ ```objc
152
+ - (V2TXLiveCode)startLivePlay:(NSString *)url;
153
+ ```
154
+
155
+ **参数**:
156
+ - `url`: 音视频流的播放地址,支持 HTTP-FLV、WebRTC、TRTC、HLS、RTMP
157
+
158
+ **返回值**: `V2TXLiveCode`
159
+ - `V2TXLIVE_OK`: 操作成功,开始连接并播放
160
+ - `V2TXLIVE_ERROR_INVALID_PARAMETER`: 操作失败,url 不合法
161
+ - `V2TXLIVE_ERROR_REFUSED`: RTC 不支持同一设备上同时推拉同一个 StreamId
162
+ - `V2TXLIVE_ERROR_INVALID_LICENSE`: licence 不合法,播放失败
163
+
164
+ **重要说明**:
165
+ - 10.7 版本开始,需要通过 `V2TXLivePremier#setLicence` 设置 Licence 后方可成功播放,否则将播放失败(黑屏),全局仅设置一次即可
166
+ - 直播 Licence、短视频 Licence 和视频播放 Licence 均可使用
167
+
168
+ **使用时机**: 无限制
169
+
170
+ **示例**:
171
+ ```objc
172
+ V2TXLiveCode result = [player startLivePlay:@"http://example.com/live/stream_1080p.flv"];
173
+ if (result == V2TXLIVE_OK) {
174
+ NSLog(@"开始播放成功");
175
+ } else if (result == V2TXLIVE_ERROR_INVALID_PARAMETER) {
176
+ NSLog(@"播放地址不合法");
177
+ } else if (result == V2TXLIVE_ERROR_REFUSED) {
178
+ NSLog(@"调用被拒绝");
179
+ } else if (result == V2TXLIVE_ERROR_INVALID_LICENSE) {
180
+ NSLog(@"Licence 不合法,请检查 Licence");
181
+ }
182
+ ```
183
+
184
+ #### stopPlay() - 停止播放音视频流
185
+ ```objc
186
+ - (V2TXLiveCode)stopPlay;
187
+ ```
188
+
189
+ **返回值**: `V2TXLiveCode`
190
+ - `V2TXLIVE_OK`: 成功
191
+
192
+ **使用时机**: 开始播放后
193
+
194
+ **示例**:
195
+ ```objc
196
+ [player stopPlay];
197
+ ```
198
+
199
+ #### isPlaying() - 播放器是否正在播放中
200
+ ```objc
201
+ - (int)isPlaying;
202
+ ```
203
+
204
+ **返回值**:
205
+ - `1`: 正在播放中
206
+ - `0`: 已经停止播放
207
+
208
+ **使用时机**: 无限制
209
+
210
+ **示例**:
211
+ ```objc
212
+ int isPlaying = [player isPlaying];
213
+ if (isPlaying == 1) {
214
+ NSLog(@"正在播放中");
215
+ } else {
216
+ NSLog(@"播放停止");
217
+ }
218
+ ```
219
+
220
+ ### 3. 音视频控制接口
221
+
222
+ #### pauseAudio() - 暂停播放器的音频流
223
+ ```objc
224
+ - (V2TXLiveCode)pauseAudio;
225
+ ```
226
+
227
+ **返回值**: `V2TXLiveCode`
228
+ - `V2TXLIVE_OK`: 成功
229
+
230
+ **使用时机**: 无限制,若在开始播放前调用,则开始播放后,仅有视频画面,无音频播放
231
+
232
+ **示例**:
233
+ ```objc
234
+ [player pauseAudio];
235
+ ```
236
+
237
+ #### resumeAudio() - 恢复播放器的音频流
238
+ ```objc
239
+ - (V2TXLiveCode)resumeAudio;
240
+ ```
241
+
242
+ **返回值**: `V2TXLiveCode`
243
+ - `V2TXLIVE_OK`: 成功
244
+
245
+ **使用时机**: 无限制
246
+
247
+ **示例**:
248
+ ```objc
249
+ [player resumeAudio];
250
+ ```
251
+
252
+ #### pauseVideo() - 暂停播放器的视频流
253
+ ```objc
254
+ - (V2TXLiveCode)pauseVideo;
255
+ ```
256
+
257
+ **返回值**: `V2TXLiveCode`
258
+ - `V2TXLIVE_OK`: 成功
259
+
260
+ **使用时机**: 无限制,若在开始播放前调用,则开始播放后,仅有音频播放,无视频播放
261
+
262
+ **示例**:
263
+ ```objc
264
+ [player pauseVideo];
265
+ ```
266
+
267
+ #### resumeVideo() - 恢复播放器的视频流
268
+ ```objc
269
+ - (V2TXLiveCode)resumeVideo;
270
+ ```
271
+
272
+ **返回值**: `V2TXLiveCode`
273
+ - `V2TXLIVE_OK`: 成功
274
+
275
+ **使用时机**: 无限制
276
+
277
+ **示例**:
278
+ ```objc
279
+ [player resumeVideo];
280
+ ```
281
+
282
+ #### setPlayoutVolume() - 设置播放器音量
283
+ ```objc
284
+ - (V2TXLiveCode)setPlayoutVolume:(NSUInteger)volume;
285
+ ```
286
+
287
+ **参数**:
288
+ - `volume`: 音量大小,取值范围0 - 100【默认值】: 100
289
+
290
+ **返回值**: `V2TXLiveCode`
291
+ - `V2TXLIVE_OK`: 成功
292
+
293
+ **使用时机**: 无限制
294
+
295
+ **示例**:
296
+ ```objc
297
+ [player setPlayoutVolume:50];
298
+ ```
299
+
300
+ ### 4. 高级功能接口
301
+
302
+ #### setCacheParams() - 设置播放器缓存自动调整的最小和最大时间
303
+ ```objc
304
+ - (V2TXLiveCode)setCacheParams:(CGFloat)minTime maxTime:(CGFloat)maxTime;
305
+ ```
306
+
307
+ **参数**:
308
+ - `minTime`: 缓存自动调整的最小时间,取值需要大于0【默认值】:1
309
+ - `maxTime`: 缓存自动调整的最大时间,取值需要大于0【默认值】:5
310
+
311
+ **返回值**: `V2TXLiveCode`
312
+ - `V2TXLIVE_OK`: 成功
313
+ - `V2TXLIVE_ERROR_INVALID_PARAMETER`: 操作失败,minTime 和 maxTime 需要大于0
314
+
315
+ **优化建议**:
316
+ - 网络稳定:设置较小缓存(1-3秒)
317
+ - 网络波动:设置较大缓存(3-5秒)
318
+ - 无特殊要求,建议使用默认值
319
+
320
+ **使用时机**: 无限制
321
+
322
+ **示例**:
323
+ ```objc
324
+ [player setCacheParams:1.0 maxTime:5.0];
325
+ ```
326
+
327
+ #### switchStream() - 直播流多分辨率无缝切换,支持 FLV 和 LEB
328
+ ```objc
329
+ - (V2TXLiveCode)switchStream:(NSString *)newUrl;
330
+ ```
331
+
332
+ **参数**:
333
+ - `newUrl`: 新分辨率拉流地址
334
+
335
+ **返回值**: `V2TXLiveCode`
336
+ - `V2TXLIVE_OK`: 成功
337
+
338
+ **使用时机**: 开始播放后
339
+
340
+ **示例**:
341
+ ```objc
342
+ [player setObserver:self];
343
+
344
+ [player startLivePlay:@"http://example.com/live/stream_1080p.flv"];
345
+
346
+
347
+ [player switchStream:@"http://example.com/live/stream_720p.flv"];
348
+
349
+ #pragma mark - V2TXLivePlayerObserver
350
+ - (void)onStreamSwitched:(V2TXLivePlayer *)player url:(NSString *)url code:(V2TXLiveCode)code {
351
+ if (code == V2TXLIVE_OK) {
352
+ NSLog(@"流切换成功,当前播放地址:%@", url);
353
+ } else if (code == V2TXLIVE_ERROR_STREAM_SWITCH_FAIL) {
354
+ NSLog(@"流切换失败,切换超时");
355
+ } else if (code == V2TXLIVE_ERROR_STREAM_SWITCH_SERVER_ERROR) {
356
+ NSLog(@"流切换失败,服务端错误");
357
+ } else if (code == V2TXLIVE_ERROR_STREAM_SWITCH_CLIENT_ERROR) {
358
+ NSLog(@"流切换失败,客户端错误");
359
+ }
360
+ }
361
+ ```
362
+
363
+ #### getStreamList() - 获取码流信息,支持 HLS
364
+ ```objc
365
+ - (NSArray<V2TXLiveStreamInfo *> *)getStreamList;
366
+ ```
367
+
368
+ **返回值**: 码流信息数组,包含不同清晰度的流信息
369
+
370
+ **使用时机**: 开始播放后
371
+
372
+ **示例**:
373
+ ```objc
374
+ [player startLivePlay:@"http://example.com/live/stream_1080p.m3u8"];
375
+
376
+ NSArray<V2TXLiveStreamInfo *> *streamList = [player getStreamList];
377
+ ```
378
+
379
+ #### enableVolumeEvaluation() - 启用播放音量大小提示
380
+ ```objc
381
+ - (V2TXLiveCode)enableVolumeEvaluation:(NSUInteger)intervalMs;
382
+ ```
383
+
384
+ **参数**:
385
+ - `intervalMs`: 决定了 `onPlayoutVolumeUpdate` 回调的触发间隔,单位为ms,最小间隔为100ms,如果小于等于0则会关闭回调,建议设置为300ms【默认值】:0,不开启
386
+
387
+ **说明**: 开启后可以在 `V2TXLivePlayerObserver` 回调中获取到 SDK 对音量大小值的评估
388
+
389
+ **返回值**: `V2TXLiveCode`
390
+ - `V2TXLIVE_OK`: 成功
391
+
392
+ **使用时机**: 无限制
393
+
394
+ **示例**:
395
+ ```objc
396
+ [player setObserver:self];
397
+ [player enableVolumeEvaluation:300];
398
+ [player setObserver:self];
399
+
400
+ #pragma mark - V2TXLivePlayerObserver
401
+ - (void)onPlayoutVolumeUpdate:(int)volume {
402
+ // 处理音量更新
403
+ }
404
+ ```
405
+
406
+ #### snapshot() - 截取播放过程中的视频画面
407
+ ```objc
408
+ - (V2TXLiveCode)snapshot;
409
+ ```
410
+
411
+ **返回值**: `V2TXLiveCode`
412
+ - `V2TXLIVE_OK`: 成功
413
+ - `V2TXLIVE_ERROR_REFUSED`: 播放器处于停止状态,不允许调用截图操作
414
+
415
+ **使用时机**: 开始播放后
416
+
417
+ **示例**:
418
+ ```objc
419
+ [player setObserver:self];
420
+ [player snapshot];
421
+ #pragma mark - V2TXLivePlayerObserver
422
+ - (void)onSnapshotComplete:(UIImage *)image {
423
+ // 处理截图结果
424
+ }
425
+ ```
426
+
427
+ #### enableObserveVideoFrame() - 开启/关闭自定义视频渲染
428
+ ```objc
429
+ - (V2TXLiveCode)enableObserveVideoFrame:(BOOL)enable
430
+ pixelFormat:(V2TXLivePixelFormat)pixelFormat
431
+ bufferType:(V2TXLiveBufferType)bufferType;
432
+ ```
433
+
434
+ **参数**:
435
+ - `enable`: 是否开启自定义渲染【默认值】:NO
436
+ - `pixelFormat`: 自定义渲染回调的视频像素格式 `V2TXLiveDef#V2TXLivePixelFormat`
437
+ - `bufferType`: 自定义渲染回调的视频数据格式 `V2TXLiveDef#V2TXLiveBufferType`
438
+
439
+ **说明**:
440
+ - SDK 在您开启此开关后将不再渲染视频画面,您可以通过 `V2TXLivePlayerObserver` 获得视频帧,并执行自定义的渲染逻辑
441
+ - 支持的类型组合:
442
+ V2TXLivePixelFormatTexture2D, V2TXLiveBufferTypeTexture(推荐)
443
+ V2TXLivePixelFormatI420, V2TXLiveBufferTypeByteArray
444
+ V2TXLivePixelFormatI420, V2TXLiveBufferTypeByteBuffer
445
+
446
+ **返回值**: `V2TXLiveCode`
447
+ - `V2TXLIVE_OK`: 成功
448
+ - `V2TXLIVE_ERROR_NOT_SUPPORTED`: 像素格式或者数据格式不支持
449
+
450
+ **使用时机**: 开始播放前
451
+
452
+ **示例**:
453
+ ```objc
454
+ // 开启自定义渲染
455
+ [player enableObserveVideoFrame:YES
456
+ pixelFormat:V2TXLivePixelFormatTexture2D
457
+ bufferType:V2TXLiveBufferTypeTexture];
458
+ [player setObserver:self];
459
+
460
+ #pragma mark - V2TXLivePlayerObserver
461
+ - (void)onRenderVideoFrame:(V2TXLiveVideoFrame *)videoFrame {
462
+ // 自定义渲染
463
+ }
464
+ ```
465
+
466
+ #### enableObserveAudioFrame() - 开启/关闭对音频数据的监听回调
467
+ ```objc
468
+ - (V2TXLiveCode)enableObserveAudioFrame:(BOOL)enable;
469
+ ```
470
+
471
+ **参数**:
472
+ - `enable`: 是否开启音频数据回调【默认值】:NO
473
+
474
+ **说明**: 如果您开启此开关,您可以通过 `V2TXLivePlayerObserver` 获得音频数据,并执行自定义的逻辑
475
+
476
+ **返回值**: `V2TXLiveCode`
477
+ - `V2TXLIVE_OK`: 成功
478
+
479
+ **使用时机**: 开始播放前
480
+
481
+ **示例**:
482
+ ```objc
483
+ // 开启音频数据监听
484
+ [player enableObserveAudioFrame:YES];
485
+ [player setObserver:self];
486
+
487
+ #pragma mark - V2TXLivePlayerObserver
488
+ - (void)onPlayoutAudioFrame:(V2TXLiveAudioFrame *)audioFrame {
489
+ // 处理音频数据
490
+ }
491
+ ```
492
+
493
+ #### enableReceiveSeiMessage() - 开启/关闭接收 SEI 消息
494
+ ```objc
495
+ - (V2TXLiveCode)enableReceiveSeiMessage:(BOOL)enable payloadType:(int)payloadType;
496
+ ```
497
+
498
+ **参数**:
499
+ - `enable`: YES: 开启接收 SEI 消息; NO: 关闭接收 SEI 消息【默认值】: NO
500
+ - `payloadType`: 指定接收 SEI 消息的 payloadType,支持 5、242、243,请与发送端的 payloadType 保持一致
501
+
502
+ **返回值**: `V2TXLiveCode`
503
+ - `V2TXLIVE_OK`: 成功
504
+
505
+ **使用时机**: 开始播放前
506
+
507
+ **示例**:
508
+ ```objc
509
+ // 开启SEI消息接收
510
+ [player enableReceiveSeiMessage:YES payloadType:5];
511
+ [player enableReceiveSeiMessage:YES payloadType:242];
512
+ [player enableReceiveSeiMessage:YES payloadType:243];
513
+ [player setObserver:self];
514
+
515
+ #pragma mark - V2TXLivePlayerObserver
516
+ - (void)onReceiveSeiMessage:(int)payloadType data:(NSData *)data {
517
+ // 处理SEI消息
518
+ }
519
+ ```
520
+
521
+ #### enablePictureInPicture() - 开启/关闭画中画功能(iOS特有)
522
+ ```objc
523
+ - (V2TXLiveCode)enablePictureInPicture:(BOOL)enable;
524
+ ```
525
+
526
+ **参数**:
527
+ - `enable`: YES开启,NO关闭【默认值】:NO
528
+
529
+ **返回值**: `V2TXLiveCode`
530
+ - `V2TXLIVE_OK`: 成功
531
+
532
+ **使用时机**: 无限制
533
+
534
+ **说明**: 仅iOS平台支持,macOS不支持此功能
535
+
536
+ **示例**:
537
+ ```objc
538
+ // 开启画中画功能
539
+ [player enablePictureInPicture:YES];
540
+ ```
541
+
542
+ #### startLocalRecording() - 开始录制音视频流
543
+ ```objc
544
+ - (V2TXLiveCode)startLocalRecording:(V2TXLiveLocalRecordingParams *)params;
545
+ ```
546
+
547
+ **参数**:
548
+ - `params`: 请参考 `V2TXLiveDef.h` 中关于 `V2TXLiveLocalRecordingParams` 的介绍
549
+
550
+ **重要说明**:
551
+ - 拉流开启后才能开始录制,非拉流状态下开启录制无效
552
+ - 录制过程中不要动态切换软/硬解,生成的视频极有可能出现异常
553
+
554
+ **返回值**: `V2TXLiveCode`
555
+ - `V2TXLIVE_OK`: 成功
556
+ - `V2TXLIVE_ERROR_INVALID_PARAMETER`: 参数不合法,例如 filePath 为空
557
+ - `V2TXLIVE_ERROR_REFUSED`: API被拒绝,拉流尚未开始
558
+
559
+ **使用时机**: 开始播放后
560
+
561
+ **示例**:
562
+ ```objc
563
+ [player setObserver:self];
564
+
565
+ #pragma mark - V2TXLivePlayerObserver
566
+ - (void)onLocalRecordBegin:(int)code storagePath:(NSString *)storagePath {
567
+ NSLog(@"开始录制");
568
+ }
569
+
570
+ - (void)onLocalRecording:(long)durationMs storagePath:(NSString *)storagePath {
571
+ NSLog(@"录制中..., durationMs: %ld", durationMs);
572
+ }
573
+
574
+ - (void)onLocalRecordComplete:(int)code storagePath:(NSString *)storagePath {
575
+ NSLog(@"录制完成");
576
+ }
577
+
578
+ V2TXLiveLocalRecordingParams *params = [[V2TXLiveLocalRecordingParams alloc] init];
579
+ params.filePath = @"filepath";
580
+ params.interval = 2000;
581
+ V2TXLiveCode code = [player startLocalRecording:params];
582
+ if (code == V2TXLIVE_OK) {
583
+ NSLog(@"录制开启成功");
584
+ } else if (code == V2TXLIVE_ERROR_INVALID_PARAMETER) {
585
+ NSLog(@"录制参数不合法");
586
+ } else if (code == V2TXLIVE_ERROR_REFUSED) {
587
+ NSLog(@"录制调用被拒绝");
588
+ }
589
+ ```
590
+
591
+ #### stopLocalRecording() - 停止录制音视频流
592
+ ```objc
593
+ - (void)stopLocalRecording;
594
+ ```
595
+
596
+ **说明**: 当停止拉流后,如果视频还在录制中,SDK 内部会自动结束录制
597
+
598
+ **使用时机**: 开始播放并且开启录制后
599
+
600
+ **示例**:
601
+ ```objc
602
+ [player stopLocalRecording];
603
+ ```
604
+
605
+ #### showDebugView() - 是否显示播放器状态信息的调试浮层
606
+ ```objc
607
+ - (void)showDebugView:(BOOL)isShow;
608
+ ```
609
+
610
+ **参数**:
611
+ - `isShow`: 是否显示【默认值】:NO
612
+
613
+ **使用时机**: 无限制
614
+
615
+ **示例**:
616
+ ```objc
617
+ [player showDebugView:YES];
618
+ ```
619
+
620
+ #### setProperty() - 调用 V2TXLivePlayer 的高级 API 接口
621
+ ```objc
622
+ - (V2TXLiveCode)setProperty:(NSString *)key value:(NSObject *)value;
623
+ ```
624
+
625
+ **参数**:
626
+ - `key`: 高级 API 对应的 key
627
+ - `value`: 调用 key 所对应的高级 API 时,需要的参数
628
+
629
+ **说明**: 该接口用于调用一些高级功能,有特殊需求,请于商务或架构师联系
630
+
631
+ **返回值**: `V2TXLiveCode`
632
+ - `V2TXLIVE_OK`: 成功
633
+ - `V2TXLIVE_ERROR_INVALID_PARAMETER`: 操作失败,key 不允许为 nil
634
+
635
+ ## 使用示例
636
+
637
+ ```objc
638
+ // 创建播放器实例
639
+ V2TXLivePlayer *player = [[V2TXLivePlayer alloc] init];
640
+
641
+ // 设置回调
642
+ [player setObserver:self];
643
+
644
+ // 设置渲染视图
645
+ [player setRenderView:videoView];
646
+
647
+ // 开始播放
648
+ V2TXLiveCode result = [player startLivePlay:@"rtmp://example.com/live/stream"];
649
+ if (result == V2TXLIVE_OK) {
650
+ // 播放成功
651
+ }
652
+
653
+ // 暂停视频
654
+ [player pauseVideo];
655
+
656
+ // 恢复视频
657
+ [player resumeVideo];
658
+
659
+ // 停止播放
660
+ [player stopPlay];
661
+ ```
662
+
663
+ ## 注意事项
664
+
665
+ 1. **Licence 要求**: 10.7 版本开始必须设置有效的 Licence 才能正常播放
666
+ 2. **权限要求**: 需要网络权限和音频播放权限
667
+ 3. **线程安全**: 所有接口调用需在主线程执行
668
+ 4. **内存管理**: 及时释放播放器资源,避免内存泄漏
669
+ 5. **平台差异**: 画中画功能仅iOS平台支持,macOS不支持
670
+
671
+ ## 相关接口
672
+
673
+ - `V2TXLivePlayerObserver`: 播放器回调接口
674
+ - `V2TXLiveCode`: 错误码和状态码定义
675
+ - `V2TXLiveDef`: 数据结构和枚举定义
676
+ - `V2TXLivePremier`: SDK全局管理接口