@tencentcloud/sdk-mcp 1.2.8 → 1.3.0

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