@tencentcloud/sdk-mcp 1.3.4 → 1.3.6
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.
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/resource/doc/chatuikit/android/features/theme.md +363 -0
- package/resource/doc/chatuikit/{android/client_api_android.md → faq/android_sdk/client-api.md} +0 -1
- package/resource/doc/chatuikit/faq/{native_sdk/faq.md → common/product.md} +8 -0
- package/resource/doc/chatuikit/faq/flutter_sdk/faq.md +54 -0
- package/resource/doc/chatuikit/faq/web_sdk/faq.md +1 -1
- package/resource/doc/chatuikit/flutter/features/theme.md +379 -0
- package/resource/doc/chatuikit/flutter/workflow.md +816 -0
- package/resource/doc/chatuikit/iOS/features/theme.md +416 -0
- package/resource/doc/chatuikit/iOS/workflow.md +0 -0
- package/resource/doc/chatuikit/react/components/chat-setting.md +124 -0
- package/resource/doc/chatuikit/react/components/contact-list.md +1331 -0
- package/resource/doc/chatuikit/react/components/search.md +885 -0
- package/resource/doc/chatuikit/vue/components/chat-setting.md +88 -0
- package/resource/doc/chatuikit/vue/components/contact-list.md +679 -0
- package/resource/doc/chatuikit/vue/components/search.md +1384 -0
- package/resource/doc/livekit/live/android/workflow.md +137 -4
- package/resource/doc/livekit/live/flutter/live-audience-list.md +337 -0
- package/resource/doc/livekit/live/flutter/live-audio-effect.md +739 -0
- package/resource/doc/livekit/live/flutter/live-barrage.md +578 -0
- package/resource/doc/livekit/live/flutter/live-base-beauty.md +484 -0
- package/resource/doc/livekit/live/flutter/live-co-guest-interaction.md +606 -0
- package/resource/doc/livekit/live/flutter/live-gift.md +812 -0
- package/resource/doc/livekit/live/flutter/live-host-interaction.md +1113 -0
- package/resource/doc/livekit/live/flutter/live-integration.md +1029 -0
- package/resource/doc/livekit/live/flutter/live-live-list.md +861 -0
- package/resource/doc/livekit/live/ios/live-audience-list.md +335 -0
- package/resource/doc/livekit/live/ios/live-audio-effect.md +373 -0
- package/resource/doc/livekit/live/ios/live-barrage.md +529 -0
- package/resource/doc/livekit/live/ios/live-base-beauty.md +237 -0
- package/resource/doc/livekit/live/ios/live-co-guest-interaction.md +483 -0
- package/resource/doc/livekit/live/ios/live-gift.md +785 -0
- package/resource/doc/livekit/live/ios/live-host-interaction.md +743 -0
- package/resource/doc/livekit/live/ios/live-integration.md +822 -0
- package/resource/doc/livekit/live/ios/live-live-list.md +535 -0
- package/resource/doc/livekit/live/ios/workflow.md +352 -0
- package/resource/doc/rtcengine/faq/web/web.md +2 -2
- package/resource/doc/rtcengine/web/how_to_integrated_web_sdk.md +2 -2
- package/resource/doc/rtcengine/web/plugin/20-advanced-customized-capture-rendering.md +84 -0
- package/resource/doc/rtcengine/web/plugin/21-advanced-auto-play-policy.md +86 -0
- package/resource/doc/rtcengine/web/plugin/22-advanced-audio-mixer.md +220 -0
- package/resource/doc/rtcengine/web/plugin/23-advanced-support-detection.md +217 -0
- package/resource/doc/rtcengine/web/plugin/24-advanced-network-quality.md +137 -0
- package/resource/doc/rtcengine/web/plugin/25-advanced-device-change.md +97 -0
- package/resource/doc/rtcengine/web/plugin/26-advanced-publish-cdn-stream.md +453 -0
- package/resource/doc/rtcengine/web/plugin/27-advanced-small-stream.md +180 -0
- package/resource/doc/rtcengine/web/plugin/28-advanced-beauty.md +349 -0
- package/resource/doc/rtcengine/web/plugin/29-advanced-water-mark.md +149 -0
- package/resource/doc/rtcengine/web/plugin/30-advanced-cross-room-link.md +96 -0
- package/resource/doc/rtcengine/web/plugin/31-advanced-plugins-overview.md +405 -0
- package/resource/doc/rtcengine/web/plugin/34-advanced-proxy.md +244 -0
- package/resource/doc/rtcengine/web/plugin/35-advanced-ai-denoiser.md +84 -0
- package/resource/doc/rtcengine/web/plugin/36-advanced-virtual-background.md +202 -0
- package/resource/doc/rtcengine/web/plugin/37-advanced-voice-changer.md +98 -0
- package/resource/doc/rtcengine/web/plugin/38-advanced-basic-beauty.md +95 -0
- package/resource/doc/rtcengine/web/plugin/39-advanced-video-decoder.md +33 -0
- package/resource/doc/rtcengine/web/plugin/40-advanced-video-mixer.md +380 -0
- package/resource/doc/rtcengine/web/plugin/41-advanced-small-stream-auto-switcher.md +91 -0
- package/resource/doc/rtcengine/web/plugin/42-advanced-realtime-transcriber.md +314 -0
- package/resource/doc/rtcengine/web/plugin/43-advanced-face-detection.md +180 -0
- package/resource/doc/tuicallkit/android/workflow.md +0 -0
- package/resource/doc/tuicallkit/flutter/integration.md +510 -0
- package/resource/doc/tuicallkit/flutter/workflow.md +331 -0
- package/tools/call/get-native-call-integration.js +27 -11
- package/tools/call/get-native-call-integration.js.map +1 -1
- package/tools/chat/get-native-chat-feature-detail.js +30 -0
- package/tools/chat/get-native-chat-feature-detail.js.map +1 -0
- package/tools/chat/get-native-chat-integration.js +30 -12
- package/tools/chat/get-native-chat-integration.js.map +1 -1
- package/tools/common/get-faq.js +2 -4
- package/tools/common/get-faq.js.map +1 -1
- package/tools/definitions/get_native_call_uikit_integration_def.js +16 -6
- package/tools/definitions/get_native_call_uikit_integration_def.js.map +1 -1
- package/tools/definitions/get_native_chat_feature_detail_def.js +32 -0
- package/tools/definitions/get_native_chat_feature_detail_def.js.map +1 -0
- package/tools/definitions/get_native_chat_uikit_integration_def.js +18 -6
- package/tools/definitions/get_native_chat_uikit_integration_def.js.map +1 -1
- package/tools/definitions/{get_native_live_extra_features_def.js → get_native_live_uikit_extra_features_def.js} +3 -3
- package/tools/definitions/get_native_live_uikit_extra_features_def.js.map +1 -0
- package/tools/definitions/{get_native_live_interaction_def.js → get_native_live_uikit_interaction_def.js} +3 -3
- package/tools/definitions/get_native_live_uikit_interaction_def.js.map +1 -0
- package/tools/definitions/get_web_chat_uikit_component_detail_def.js +46 -7
- package/tools/definitions/get_web_chat_uikit_component_detail_def.js.map +1 -1
- package/tools/index.js +6 -4
- package/tools/index.js.map +1 -1
- package/tools/live/{get_native_live_extra_features.js → get_native_live_uikit_extra_features.js} +4 -4
- package/tools/live/get_native_live_uikit_extra_features.js.map +1 -0
- package/tools/live/{get_native_live_interaction.js → get_native_live_uikit_interaction.js} +4 -4
- package/tools/live/get_native_live_uikit_interaction.js.map +1 -0
- package/tools/rtcengine/get-trtc-web-sdk-faq.js +1 -1
- package/tools/rtcengine/get-trtc-web-sdk-plugin.js +45 -0
- package/tools/rtcengine/get-trtc-web-sdk-plugin.js.map +1 -0
- package/utils/handle-component-name.js +0 -16
- package/utils/handle-component-name.js.map +1 -1
- package/utils/report-cls-client.js +1 -1
- package/utils/report-es-client.js +1 -1
- package/resource/doc/chatuikit/android/integrate_tuichat_only_android.md +0 -382
- package/resource/doc/chatuikit/android/ui_api_android.md +0 -418
- package/resource/doc/chatuikit/iOS/integrate_tuichat_only_iOS.md +0 -993
- package/resource/doc/chatuikit/iOS/ui_api_iOS.md +0 -526
- package/resource/doc/tuicallkit/flutter/how_to_integrated_flutter_callkit.md +0 -226
- package/resource/doc/tuicallkit/flutter/how_to_run_flutter_callkit_demo.md +0 -101
- package/resource/doc/tuicallkit/iOS/how_to_run_iOS_callkit_demo.md +0 -98
- package/tools/definitions/get_native_live_extra_features_def.js.map +0 -1
- package/tools/definitions/get_native_live_interaction_def.js.map +0 -1
- package/tools/live/get_native_live_extra_features.js.map +0 -1
- package/tools/live/get_native_live_interaction.js.map +0 -1
- /package/resource/doc/chatuikit/android/{integrate_tuikit_android.md → integration.md} +0 -0
- /package/resource/doc/{tuicallkit/android/.gitkeep → chatuikit/android/workflow.md} +0 -0
- /package/resource/doc/chatuikit/{flutter/client_api_Flutter.md → faq/flutter_sdk/client-api.md} +0 -0
- /package/resource/doc/chatuikit/{iOS/client_api_iOS.md → faq/ios_sdk/client-api.md} +0 -0
- /package/resource/doc/chatuikit/flutter/{integrate_tuikit_Flutter.md → integration.md} +0 -0
- /package/resource/doc/chatuikit/iOS/{integrate_tuikit_iOS.md → integration.md} +0 -0
- /package/resource/doc/chatuikit/react/components/{chatheader.md → chat-header.md} +0 -0
- /package/resource/doc/chatuikit/vue/components/{chatheader.md → chat-header.md} +0 -0
- /package/resource/doc/tuicallkit/android/{how_to_integrated_android_callkit.md → integration.md} +0 -0
- /package/resource/doc/tuicallkit/{android/api_TUICallObserver.md → faq/android_sdk/call-observer-api.md} +0 -0
- /package/resource/doc/tuicallkit/{android/api_TUICallKit.md → faq/android_sdk/callkit-api.md} +0 -0
- /package/resource/doc/tuicallkit/{flutter/api_TUICallDefine.md → faq/flutter_sdk/call-define-api.md} +0 -0
- /package/resource/doc/tuicallkit/{flutter/api_TUICallObserver.md → faq/flutter_sdk/call-observer-api.md} +0 -0
- /package/resource/doc/tuicallkit/{flutter/api_TUICallKit.md → faq/flutter_sdk/callkit-api.md} +0 -0
- /package/resource/doc/tuicallkit/{iOS/api_TUICallObserver.md → faq/ios_sdk/call-observer-api.md} +0 -0
- /package/resource/doc/tuicallkit/{iOS/api_TUICallKit.md → faq/ios_sdk/callkit-api.md} +0 -0
- /package/resource/doc/tuicallkit/iOS/{how_to_integrated_iOS_callkit.md → integration.md} +0 -0
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
## 功能简介
|
|
2
|
+
|
|
3
|
+
TRTC Web SDK v5 提供了插件系统,支持按需加载各种音视频增强能力。插件系统的优势:
|
|
4
|
+
|
|
5
|
+
- **模块化设计**:按需引入,减少主包体积
|
|
6
|
+
- **独立升级**:插件版本独立管理,便于迭代
|
|
7
|
+
- **统一接口**:所有插件使用相同的启动、更新、停止 API
|
|
8
|
+
- **灵活组合**:可同时使用多个插件,满足复杂业务场景
|
|
9
|
+
|
|
10
|
+
## 插件列表
|
|
11
|
+
|
|
12
|
+
### 视频增强类
|
|
13
|
+
|
|
14
|
+
| 插件名称 | 功能说明 | 版本要求 | 套餐要求 | 静态资源 | 文档链接 |
|
|
15
|
+
|---------|---------|---------|---------|---------|---------|
|
|
16
|
+
| **Beauty** | 专业美颜,支持磨皮、美白、瘦脸等 6 种参数 + 10 种 2D 特效贴纸 | ≥ 5.5.0 | 专业版 | - | {@tutorial 28-advanced-beauty} |
|
|
17
|
+
| **BasicBeauty** | 基础美颜,支持美颜、明亮、红润 3 种参数 | ≥ 5.7.0 | 无 | - | {@tutorial 38-advanced-basic-beauty} |
|
|
18
|
+
| **VirtualBackground** | 虚拟背景,支持背景虚化、图片背景、人脸居中 | ≥ 5.2.0 | 旗舰版 | 需要 | {@tutorial 36-advanced-virtual-background} |
|
|
19
|
+
| **Watermark** | 视频水印,支持添加图片水印 | ≥ 5.3.2 | 无 | - | {@tutorial 29-advanced-water-mark} |
|
|
20
|
+
| **VideoMixer** | 视频合流,将摄像头、屏幕、文字、图片、视频合成一路 | ≥ 5.12.0 | 无 | - | {@tutorial 40-advanced-video-mixer} |
|
|
21
|
+
| **FaceDetection** | 人脸检测,实时检测摄像头中的人脸状态变化 | ≥ 5.15.0 | 无 | 需要 | {@tutorial 43-advanced-face-detection} |
|
|
22
|
+
|
|
23
|
+
### 音频增强类
|
|
24
|
+
|
|
25
|
+
| 插件名称 | 功能说明 | 版本要求 | 套餐要求 | 静态资源 | 文档链接 |
|
|
26
|
+
|---------|---------|---------|---------|---------|---------|
|
|
27
|
+
| **AudioMixer** | 背景音乐,支持同时播放多个音乐,可控制音量、循环、跳转等 | ≥ 5.1.0 | 无 | - | {@tutorial 22-advanced-audio-mixer} |
|
|
28
|
+
| **AIDenoiser** | AI 降噪,智能降低环境噪声,支持远场消除模式 | - | 尊享版 | 需要 | {@tutorial 35-advanced-ai-denoiser} |
|
|
29
|
+
| **VoiceChanger** | 美声变声,支持 11 种变声效果(熊孩子、萝莉、大叔等) | ≥ 5.10.0 | 旗舰版 | - | {@tutorial 37-advanced-voice-changer} |
|
|
30
|
+
| **RealtimeTranscriber** | 实时语音转录与翻译,将用户语音实时转换为文字并支持多语言翻译 | ≥ 5.15.0 | 无 | - | {@tutorial 42-advanced-realtime-transcriber} |
|
|
31
|
+
| **Chorus** | 合唱,支持 KTV 合唱场景,包含主唱/伴唱角色、歌词同步、打分 | - | [联系我们](https://cloud.tencent.com/document/product/647/19906)开通 | - | - |
|
|
32
|
+
|
|
33
|
+
### 推流与混流类
|
|
34
|
+
|
|
35
|
+
| 插件名称 | 功能说明 | 版本要求 | 套餐要求 | 静态资源 | 文档链接 |
|
|
36
|
+
|---------|---------|---------|---------|---------|---------|
|
|
37
|
+
| **CDNStreaming** | CDN 转推,支持云端混流、转推 CDN、回推混流到 TRTC 房间 | ≥ 5.1.0 | 无 | - | {@tutorial 26-advanced-publish-cdn-stream} |
|
|
38
|
+
| **CrossRoom** | 跨房连麦,支持不同房间主播间的音视频通话 | ≥ 5.8.0 | 无 | - | {@tutorial 30-advanced-cross-room-link} |
|
|
39
|
+
|
|
40
|
+
### 功能扩展类
|
|
41
|
+
|
|
42
|
+
| 插件名称 | 功能说明 | 版本要求 | 套餐要求 | 静态资源 | 文档链接 |
|
|
43
|
+
|---------|---------|---------|---------|---------|---------|
|
|
44
|
+
| **DeviceDetector** | 设备检测,检测摄像头、麦克风、扬声器及网络,提供默认 UI | ≥ 5.8.0 | 无 | - | {@tutorial 23-advanced-support-detection} |
|
|
45
|
+
| **Debug** | 调试模式,支持全量日志上传/导出、音视频转储 | ≥ 5.8.0 | 无 | - | {@tutorial 18-basic-debug} |
|
|
46
|
+
| **TRTCVideoDecoder** | 视频解码器降级,解码失败时自动降级到软解码 | ≥ 5.9.0 | [联系我们](https://cloud.tencent.com/document/product/647/19906)开通 | 需要 | {@tutorial 39-advanced-video-decoder} |
|
|
47
|
+
| **SmallStreamAutoSwitcher** | 大小流自动切换,弱网时自动切换小流保证流畅度 | ≥ 5.11.0 | 无 | - | {@tutorial 41-advanced-small-stream-auto-switcher} |
|
|
48
|
+
<!-- | **CustomEncryption** | 自定义加密,支持音视频端到端加密,可自定义或使用内置加密算法 | - | 需联系我们开通 | - | - | -->
|
|
49
|
+
|
|
50
|
+
> **说明:**
|
|
51
|
+
> - **版本要求**:使用该插件所需的 TRTC SDK 最低版本
|
|
52
|
+
> - **套餐要求**:使用该插件需开通的 TRTC 包月套餐版本,详见 [包月套餐计费说明](https://cloud.tencent.com/document/product/647/85386)
|
|
53
|
+
> - **静态资源**:插件是否需要部署 `node_modules/trtc-sdk-v5/assets` 目录到 CDN
|
|
54
|
+
|
|
55
|
+
## 统一使用流程
|
|
56
|
+
|
|
57
|
+
### 1. 引入并注册插件
|
|
58
|
+
|
|
59
|
+
在创建 TRTC 实例时通过 `plugins` 数组注册需要使用的插件:
|
|
60
|
+
|
|
61
|
+
```javascript
|
|
62
|
+
import TRTC from 'trtc-sdk-v5';
|
|
63
|
+
import { VirtualBackground } from 'trtc-sdk-v5/plugins/video-effect/virtual-background';
|
|
64
|
+
import { AIDenoiser } from 'trtc-sdk-v5/plugins/ai-denoiser';
|
|
65
|
+
|
|
66
|
+
const trtc = TRTC.create({
|
|
67
|
+
plugins: [VirtualBackground, AIDenoiser],
|
|
68
|
+
assetsPath: 'https://your-cdn/assets' // 如果插件需要静态资源
|
|
69
|
+
});
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 2. 开启插件
|
|
73
|
+
|
|
74
|
+
使用 `trtc.startPlugin(pluginName, options)` 开启插件:
|
|
75
|
+
|
|
76
|
+
```javascript
|
|
77
|
+
// 不需要用户认证的插件
|
|
78
|
+
await trtc.startPlugin('BasicBeauty', {
|
|
79
|
+
beauty: 0.5,
|
|
80
|
+
brightness: 0.5,
|
|
81
|
+
ruddy: 0.5
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// 需要用户认证的插件
|
|
85
|
+
await trtc.startPlugin('VirtualBackground', {
|
|
86
|
+
sdkAppId: 123456,
|
|
87
|
+
userId: 'user_123',
|
|
88
|
+
userSig: 'XXXXXXXX',
|
|
89
|
+
type: 'blur',
|
|
90
|
+
blurLevel: 3
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 3. 更新参数(可选)
|
|
95
|
+
|
|
96
|
+
使用 `trtc.updatePlugin(pluginName, options)` 动态更新插件参数:
|
|
97
|
+
|
|
98
|
+
```javascript
|
|
99
|
+
await trtc.updatePlugin('BasicBeauty', {
|
|
100
|
+
beauty: 0.8,
|
|
101
|
+
brightness: 0.6
|
|
102
|
+
});
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 4. 停止插件
|
|
106
|
+
|
|
107
|
+
使用 `trtc.stopPlugin(pluginName)` 停止插件:
|
|
108
|
+
|
|
109
|
+
```javascript
|
|
110
|
+
await trtc.stopPlugin('BasicBeauty');
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## 特殊用法说明
|
|
114
|
+
|
|
115
|
+
### AudioMixer(背景音乐)- 按 ID 分组
|
|
116
|
+
|
|
117
|
+
AudioMixer 通过唯一的 `id` 标识每个背景音乐,每个 id 都有独立的生命周期:
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
// 开启第一个背景音乐
|
|
121
|
+
await trtc.startPlugin('AudioMixer', {
|
|
122
|
+
id: 'bgm1',
|
|
123
|
+
url: './music1.mp3',
|
|
124
|
+
loop: true,
|
|
125
|
+
volume: 0.5
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// 同时开启第二个背景音乐(不同 id)
|
|
129
|
+
await trtc.startPlugin('AudioMixer', {
|
|
130
|
+
id: 'bgm2',
|
|
131
|
+
url: './music2.mp3',
|
|
132
|
+
volume: 0.3
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
// 更新第一个背景音乐
|
|
136
|
+
await trtc.updatePlugin('AudioMixer', {
|
|
137
|
+
id: 'bgm1',
|
|
138
|
+
volume: 0.8,
|
|
139
|
+
operation: 'pause' // pause | resume
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// 停止第一个背景音乐
|
|
143
|
+
await trtc.stopPlugin('AudioMixer', {
|
|
144
|
+
id: 'bgm1'
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**特点:**
|
|
149
|
+
- 按 id 分组,每个 id 独立管理一个背景音乐
|
|
150
|
+
- 支持同时开启多个背景音乐(不同 id)
|
|
151
|
+
- 同一个 id 不能连续 start 两次,需先 stop
|
|
152
|
+
- 支持暂停、恢复、跳转等操作
|
|
153
|
+
|
|
154
|
+
### CDNStreaming(CDN 转推)- 按 Mode 分组
|
|
155
|
+
|
|
156
|
+
CDNStreaming 按 `publishMode` 分组,每个模式都有独立的生命周期。支持四种推流模式:
|
|
157
|
+
|
|
158
|
+
```javascript
|
|
159
|
+
import { PublishMode } from 'trtc-sdk-v5/plugins/cdn-streaming';
|
|
160
|
+
|
|
161
|
+
// 模式 1:转推摄像头流
|
|
162
|
+
await trtc.startPlugin('CDNStreaming', {
|
|
163
|
+
target: {
|
|
164
|
+
publishMode: PublishMode.PublishMainStreamToCDN,
|
|
165
|
+
streamId: 'stream001'
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
// 模式 2:转推屏幕分享流(可与模式 1 同时进行)
|
|
170
|
+
await trtc.startPlugin('CDNStreaming', {
|
|
171
|
+
target: {
|
|
172
|
+
publishMode: PublishMode.PublishSubStreamToCDN,
|
|
173
|
+
streamId: 'stream002'
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
// 模式 3:转推混流
|
|
178
|
+
await trtc.startPlugin('CDNStreaming', {
|
|
179
|
+
target: {
|
|
180
|
+
publishMode: PublishMode.PublishMixStreamToCDN,
|
|
181
|
+
streamId: 'mix-stream'
|
|
182
|
+
},
|
|
183
|
+
encoding: { videoWidth: 1280, videoHeight: 720 },
|
|
184
|
+
mix: {
|
|
185
|
+
audioMixUserList: [{ userId: 'user_123' }],
|
|
186
|
+
videoLayoutList: [/* 布局参数 */]
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
// 模式 4:回推混流到 TRTC 房间
|
|
191
|
+
await trtc.startPlugin('CDNStreaming', {
|
|
192
|
+
target: {
|
|
193
|
+
publishMode: PublishMode.PublishMixStreamToRoom,
|
|
194
|
+
robotUser: { userId: 'robot_001', roomId: 1234 }
|
|
195
|
+
},
|
|
196
|
+
encoding: { videoWidth: 1280, videoHeight: 720 },
|
|
197
|
+
mix: { /* 混流参数 */ }
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
// 更新模式 1 的参数
|
|
201
|
+
await trtc.updatePlugin('CDNStreaming', {
|
|
202
|
+
target: {
|
|
203
|
+
publishMode: PublishMode.PublishMainStreamToCDN,
|
|
204
|
+
streamId: 'stream001_new'
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
|
|
208
|
+
// 停止模式 1(只需传 publishMode)
|
|
209
|
+
await trtc.stopPlugin('CDNStreaming', {
|
|
210
|
+
target: {
|
|
211
|
+
publishMode: PublishMode.PublishMainStreamToCDN
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**特点:**
|
|
217
|
+
- 按 publishMode 分组,每个模式独立管理
|
|
218
|
+
- 四种模式可以同时运行(不同 publishMode)
|
|
219
|
+
- 同一个 publishMode 遵循 start-update-stop 生命周期
|
|
220
|
+
- 停止时只需传入 publishMode 参数
|
|
221
|
+
|
|
222
|
+
### VideoMixer(视频合流)- 多输入源管理
|
|
223
|
+
|
|
224
|
+
VideoMixer 插件支持动态管理多个输入源,通过 `id` 标识每个输入源:
|
|
225
|
+
|
|
226
|
+
```javascript
|
|
227
|
+
// 开启合流,返回合流后的 track
|
|
228
|
+
const { track } = await trtc.startPlugin('VideoMixer', {
|
|
229
|
+
canvasInfo: { width: 1920, height: 1080 },
|
|
230
|
+
camera: [{ id: 'camera1', layout: { x: 0, y: 0, width: 640, height: 480, zIndex: 1 } }]
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
// 动态添加屏幕共享
|
|
234
|
+
await trtc.updatePlugin('VideoMixer', {
|
|
235
|
+
screen: [{ id: 'screen1', layout: { x: 640, y: 0, width: 1280, height: 1080, zIndex: 0 } }]
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
// 移除摄像头(传空数组)
|
|
239
|
+
await trtc.updatePlugin('VideoMixer', {
|
|
240
|
+
camera: []
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
// 使用合流后的 track 推流
|
|
244
|
+
await trtc.startLocalVideo({
|
|
245
|
+
option: {
|
|
246
|
+
videoTrack: track,
|
|
247
|
+
profile: { width: 1920, height: 1080, bitrate: 2000 }
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
**特点:**
|
|
253
|
+
- 支持多次 start/update
|
|
254
|
+
- 返回 `track` 用于自定义推流
|
|
255
|
+
- 通过数组管理多个输入源(camera、screen、text、image、video)
|
|
256
|
+
- 注意:仅支持 PC 端浏览器
|
|
257
|
+
|
|
258
|
+
### TRTCVideoDecoder(视频解码)- 自动启动
|
|
259
|
+
|
|
260
|
+
TRTCVideoDecoder 插件注册后会自动在解码失败时启动降级逻辑,无需手动调用 `startPlugin`:
|
|
261
|
+
|
|
262
|
+
```javascript
|
|
263
|
+
import TRTCVideoDecoder from 'trtc-sdk-v5/plugins/video-decoder';
|
|
264
|
+
|
|
265
|
+
const trtc = TRTC.create({
|
|
266
|
+
plugins: [TRTCVideoDecoder],
|
|
267
|
+
assetsPath: 'https://your-cdn/assets'
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
// 无需手动 startPlugin,插件会在解码失败时自动启动
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### SmallStreamAutoSwitcher(大小流切换)- 无参数更新
|
|
274
|
+
|
|
275
|
+
SmallStreamAutoSwitcher 启动后自动运行,不支持 `updatePlugin`:
|
|
276
|
+
|
|
277
|
+
```javascript
|
|
278
|
+
// 使用默认策略
|
|
279
|
+
trtc.startPlugin('SmallStreamAutoSwitcher');
|
|
280
|
+
|
|
281
|
+
// 自定义策略(仅在 start 时设置)
|
|
282
|
+
trtc.startPlugin('SmallStreamAutoSwitcher', {
|
|
283
|
+
maxAutoSwitchToSmallCount: 1, // 只允许切换 1 次
|
|
284
|
+
poorDuration: 5000, // 网络差持续 5 秒才切换
|
|
285
|
+
goodDuration: 30000 // 网络好持续 30 秒才切回
|
|
286
|
+
});
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**特点:**
|
|
290
|
+
- 不支持 `updatePlugin`
|
|
291
|
+
- 自动根据网络状况切换大小流
|
|
292
|
+
- 注意:需配合大小流功能使用
|
|
293
|
+
|
|
294
|
+
### FaceDetection(人脸检测)- 回调驱动
|
|
295
|
+
|
|
296
|
+
FaceDetection 通过回调函数获取检测结果,采用智能防抖逻辑:
|
|
297
|
+
|
|
298
|
+
```javascript
|
|
299
|
+
await trtc.startPlugin('FaceDetection', {
|
|
300
|
+
onFaceDetectionStateChanged: (hasFace) => {
|
|
301
|
+
if (hasFace) {
|
|
302
|
+
console.log('检测到人脸出现');
|
|
303
|
+
} else {
|
|
304
|
+
console.log('检测到人脸消失'); // 延迟触发,避免误报
|
|
305
|
+
}
|
|
306
|
+
},
|
|
307
|
+
detectionInterval: 300, // 检测间隔(ms)
|
|
308
|
+
minConfidence: 0.8, // 最小置信度
|
|
309
|
+
missingTimeout: 1000 // 人脸消失确认时间(ms)
|
|
310
|
+
});
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
**特点:**
|
|
314
|
+
- 智能防抖:人脸出现立即触发,消失延迟确认
|
|
315
|
+
- 自动同步视频流状态(Mute/Unmute)
|
|
316
|
+
- 注意:需先开启摄像头
|
|
317
|
+
|
|
318
|
+
### DeviceDetector(设备检测)- 返回检测结果
|
|
319
|
+
|
|
320
|
+
DeviceDetector 提供默认 UI,检测完成后返回设备和网络检测结果:
|
|
321
|
+
|
|
322
|
+
```javascript
|
|
323
|
+
import { DeviceDetector } from 'trtc-sdk-v5/plugins/device-detector';
|
|
324
|
+
|
|
325
|
+
const trtc = TRTC.create({ plugins: [DeviceDetector] });
|
|
326
|
+
|
|
327
|
+
// 仅检测设备
|
|
328
|
+
const result = await trtc.startPlugin('DeviceDetector');
|
|
329
|
+
|
|
330
|
+
// 检测设备 + 网络
|
|
331
|
+
const resultWithNetwork = await trtc.startPlugin('DeviceDetector', {
|
|
332
|
+
networkDetect: { sdkAppId, userId, userSig }
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
// 返回结果示例
|
|
336
|
+
// result.camera: { isSuccess: boolean, device: {...} }
|
|
337
|
+
// result.microphone: { isSuccess: boolean, device: {...} }
|
|
338
|
+
// result.speaker: { isSuccess: boolean, device: {...} }
|
|
339
|
+
// result.network: { isSuccess: boolean, result: { quality, rtt } }
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
**特点:**
|
|
343
|
+
- 提供默认的检测 UI,支持中英文
|
|
344
|
+
- 返回检测结果,可用于后续逻辑判断
|
|
345
|
+
- 支持仅检测设备或同时检测网络
|
|
346
|
+
|
|
347
|
+
### Debug(调试模式)- 自动启动
|
|
348
|
+
|
|
349
|
+
Debug 插件用于日志上传/导出和音视频转储,v5.8.4 起已内置 SDK:
|
|
350
|
+
|
|
351
|
+
```javascript
|
|
352
|
+
// v5.8.4+:无需引入插件,URL 添加 ?trtcDebug=1 自动开启弹窗
|
|
353
|
+
|
|
354
|
+
// v5.8.3 及以下:需引入插件
|
|
355
|
+
import { Debug } from 'trtc-sdk-v5/plugins/debug';
|
|
356
|
+
const trtc = TRTC.create({ plugins: [Debug] });
|
|
357
|
+
// 开发环境自动开启,部署环境需 URL 添加 ?trtcDebug=1
|
|
358
|
+
|
|
359
|
+
// 关闭调试模式
|
|
360
|
+
trtc.stopPlugin('Debug');
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
**特点:**
|
|
364
|
+
- v5.8.4+ 内置 SDK,无需外部引入
|
|
365
|
+
- 开发环境自动开启弹窗
|
|
366
|
+
- 支持日志上传/导出、音视频转储
|
|
367
|
+
|
|
368
|
+
## 静态资源部署
|
|
369
|
+
|
|
370
|
+
部分插件需要部署静态资源文件(WebAssembly、模型文件等),操作步骤:
|
|
371
|
+
|
|
372
|
+
### 1. 发布资源文件
|
|
373
|
+
|
|
374
|
+
将 `node_modules/trtc-sdk-v5/assets` 目录发布到 CDN 或静态资源服务器:
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
# 示例:复制到 public 目录
|
|
378
|
+
cp -r node_modules/trtc-sdk-v5/assets ./public/assets
|
|
379
|
+
|
|
380
|
+
# 或上传到 CDN
|
|
381
|
+
# https://your-cdn.com/assets/
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
### 2. 配置 assetsPath
|
|
385
|
+
|
|
386
|
+
创建 TRTC 实例时传入资源路径:
|
|
387
|
+
|
|
388
|
+
```javascript
|
|
389
|
+
const trtc = TRTC.create({
|
|
390
|
+
plugins: [VirtualBackground, AIDenoiser],
|
|
391
|
+
assetsPath: 'https://your-cdn.com/assets'
|
|
392
|
+
});
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
### 3. 注意事项
|
|
396
|
+
|
|
397
|
+
- 如果资源文件域名与应用域名不一致,需开启 CORS 策略
|
|
398
|
+
- 资源文件必须部署在 HTTPS 服务下(HTTP 会被浏览器安全策略禁止)
|
|
399
|
+
- SDK 版本低于 v5.10.0 可能需要额外部署特定文件(参考各插件文档)
|
|
400
|
+
|
|
401
|
+
## 相关链接
|
|
402
|
+
|
|
403
|
+
- [TRTC Web SDK API 文档](https://web.sdk.qcloud.com/trtc/webrtc/v5/doc/zh-cn/index.html)
|
|
404
|
+
- [包月套餐计费说明](https://cloud.tencent.com/document/product/647/85386)
|
|
405
|
+
- [在线 Demo 体验](https://web.sdk.qcloud.com/trtc/webrtc/demo/api-sample/index.html)
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
## 功能描述
|
|
2
|
+
|
|
3
|
+
本文主要介绍应对防火墙受限的最佳实践。例如在企业内网这类有防火墙的网络环境中,往往由于防火墙的原因,无法正常使用 TRTC Web SDK。这种情况下,有两种解决方案:
|
|
4
|
+
|
|
5
|
+
- 方案一:监听 SDK 错误,引导更换网络 或者 配置防火墙白名单。
|
|
6
|
+
- 方案二:使用 Nginx + coturn 代理方案。
|
|
7
|
+
|
|
8
|
+
> TRTC Web SDK 默认使用 UDP 与 TRTC 服务器进行媒体通信,并且有内置的 Turn Server,支持以 UDP or TCP 中转媒体数据。
|
|
9
|
+
> 正常在公网下,用户无需搭建任何代理,SDK 会按直连、Turn Server UDP、Turn Server TCP 的顺序尝试建立媒体连接。
|
|
10
|
+
> 若明确知道用户将在内网防火墙内使用,则可能会遇到无法建立媒体连接,此时则需要搭建代理。
|
|
11
|
+
|
|
12
|
+
## 前提条件
|
|
13
|
+
|
|
14
|
+
- 方案二需要搭建两个服务器,Nginx + Turn Server,您可以联系贵公司的运维同学协助帮忙搭建。Nginx 代理服务器用于代理转发 TRTC Web SDK 的 Websocket 信令数据包;Turn Server 用于转发音视频数据包。
|
|
15
|
+
|
|
16
|
+
## 实现流程
|
|
17
|
+
|
|
18
|
+
### 方案一
|
|
19
|
+
|
|
20
|
+
> 该方案适用于:您无法确定用户的网络是否会受防火墙限制,此时可以监听 SDK 错误,引导用户更换网络 or 检查防火墙。
|
|
21
|
+
|
|
22
|
+
当您调用 startLocalVideo, startLocalAudio, startRemoteVideo 等 API 时,SDK 内部会建立媒体连接通道,用于传输音视频数据。当遇到防火墙受限时,SDK 可能无法建立连接,此时 SDK 会抛出防火墙受限的错误,并继续进行重试。
|
|
23
|
+
|
|
24
|
+
您可以参照如下代码示例,监听该错误,并引导用户更换网络 or 检查网络防火墙,对 TRTC Web SDK 使用到的域名和端口开白名单。参考:[TRTC Web SDK 域名和端口白名单](https://cloud.tencent.com/document/product/647/34399#webrtc-.E9.9C.80.E8.A6.81.E9.85.8D.E7.BD.AE.E5.93.AA.E4.BA.9B.E7.AB.AF.E5.8F.A3.E6.88.96.E5.9F.9F.E5.90.8D.E4.B8.BA.E7.99.BD.E5.90.8D.E5.8D.95.EF.BC.9F)。
|
|
25
|
+
|
|
26
|
+
```js
|
|
27
|
+
trtc.on(TRTC.EVENT.ERROR, error => {
|
|
28
|
+
// 用户网络防火墙受限,会导致无法正常进行音视频通话。
|
|
29
|
+
// 此时引导用户更换网络 or 检查网络防火墙设置。
|
|
30
|
+
if (error.code === TRTC.ERROR_CODE.OPERATION_FAILED && error.extraCode === 5501) {
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 方案二
|
|
37
|
+
|
|
38
|
+
> 该方案适用于:您确定用户的网络是受防火墙限制的,此时需要搭建代理服务器来解决。
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
| 方案 | 适用场景 | 网络要求 |
|
|
42
|
+
| ------ | ---------------------------------- | ---------------------------------------------------------------------------- |
|
|
43
|
+
| 2-A | 用户网络可以访问特定的外网代理服务器 | 代理服务器搭建在外网,内网防火墙需开通白名单,允许内网用户访问外网的代理服务器。 |
|
|
44
|
+
| 2-B | 用户网络只能访问内网代理服务器 | 代理服务器搭建在内网,内网防火墙需开通白名单,允许内网代理服务器访问外网。 |
|
|
45
|
+
|
|
46
|
+
<div style="display: flex;justify-content: center;">
|
|
47
|
+
<img src="./assets/proxy-1.png"/>
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
<div style="display: flex;justify-content: center;">
|
|
51
|
+
2-A 方案示例图
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<div style="display: flex;justify-content: center;">
|
|
55
|
+
<img src="./assets/proxy-2.png" />
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<div style="display: flex;justify-content: center;">2-B 方案示例图</div>
|
|
59
|
+
|
|
60
|
+
### 设置代理服务器
|
|
61
|
+
|
|
62
|
+
当您搭建好 Nginx 和 Turn server 后,可以参考如下示例,设置代理服务器。
|
|
63
|
+
|
|
64
|
+
```javascript
|
|
65
|
+
const trtc = TRTC.create();
|
|
66
|
+
|
|
67
|
+
await trtc.enterRoom({
|
|
68
|
+
...,
|
|
69
|
+
proxy: {
|
|
70
|
+
// 设置 Websocket 代理,用于中转 SDK 与 TRTC 后台的信令数据包。
|
|
71
|
+
websocketProxy: 'wss://proxy.example.com/ws/',
|
|
72
|
+
// 设置 turn server,用于中转 SDK 与 TRTC 后台的媒体数据包。14.3.3.3:3478 为 turn server 的 ip 及端口。
|
|
73
|
+
turnServer: { url: '14.3.3.3:3478', username: 'turn', credential: 'turn', credentialType: 'password' },
|
|
74
|
+
// 默认 SDK 会直连 TRTC 服务器,如果连不上,则会尝试连 TURN server。你可以指定 'relay' 来强制连接 TURN server。
|
|
75
|
+
iceTransportPolicy: 'all',
|
|
76
|
+
// SDK 默认会向 yun.tim.qq.com 域名上报日志,但若该域名在您的内网无法访问,您需要给该域名开白名单或者配置以下日志代理。
|
|
77
|
+
// 设置日志上报代理,日志是排查问题的关键数据,请务必设置该代理。
|
|
78
|
+
loggerProxy: 'https://proxy.example.com/logger/',
|
|
79
|
+
}
|
|
80
|
+
})
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 2-A 方案
|
|
84
|
+
|
|
85
|
+
#### 搭建 Nginx 服务器
|
|
86
|
+
|
|
87
|
+
1. 部署 Nginx 服务器
|
|
88
|
+
|
|
89
|
+
参考互联网中搜索到的 Nginx 服务器部署教程进行搭建部署。如果企业已有部署 Nginx 服务,可以不用部署直接进行配置。
|
|
90
|
+
|
|
91
|
+
2. 配置 Nginx 服务器
|
|
92
|
+
|
|
93
|
+
```sh
|
|
94
|
+
vi /etc/nginx/nginx.conf
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
http {
|
|
99
|
+
server {
|
|
100
|
+
# nginx 服务器的访问域名
|
|
101
|
+
server_name proxy.example.com;
|
|
102
|
+
# nginx 服务器的访问端口
|
|
103
|
+
listen 443;
|
|
104
|
+
|
|
105
|
+
ssl on;
|
|
106
|
+
|
|
107
|
+
location /ws/ { # 对应 setProxyServer 中的 websocketProxy 参数
|
|
108
|
+
proxy_pass https://signaling.rtc.qq.com/; # TRTC 的服务器
|
|
109
|
+
proxy_http_version 1.1;
|
|
110
|
+
proxy_set_header Upgrade $http_upgrade;
|
|
111
|
+
proxy_set_header Connection "upgrade";
|
|
112
|
+
}
|
|
113
|
+
location /logger/ { # 对应 setProxyServer 中的 loggerProxy 参数
|
|
114
|
+
proxy_pass https://yun.tim.qq.com/;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
#域名对应的 SSL 证书,HTTPS 用,用户自行申请
|
|
118
|
+
ssl_certificate ./crt/1_proxy.trtcapi.com_bundle.crt;
|
|
119
|
+
ssl_certificate_key ./crt/2_proxy.trtcapi.com.key;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
3. 执行重新加载 Nginx
|
|
125
|
+
|
|
126
|
+
```sh
|
|
127
|
+
sudo nginx -s reload
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
4. 确认公司防火墙允许访问 Nginx 服务器 IP 及端口
|
|
131
|
+
|
|
132
|
+
#### 搭建 Turn 服务器
|
|
133
|
+
|
|
134
|
+
您可以在互联网中搜索 turn server 搭建教程进行搭建;也可以使用如下在 `Centos 中搭建 turn server `的脚本进行搭建。
|
|
135
|
+
|
|
136
|
+
1. 在 Linux 服务器中,创建脚本文件 `turn.sh`,脚本内容如下:
|
|
137
|
+
|
|
138
|
+
```sh
|
|
139
|
+
#!/usr/bin/env bash
|
|
140
|
+
|
|
141
|
+
# current file name is turn.sh
|
|
142
|
+
|
|
143
|
+
# ref:
|
|
144
|
+
# https://gabrieltanner.org/blog/turn-server STEP 3 testing turn server
|
|
145
|
+
# https://medium.com/av-transcode/what-is-webrtc-and-how-to-setup-stun-turn-server-for-webrtc-communication-63314728b9d0
|
|
146
|
+
|
|
147
|
+
# as super-user
|
|
148
|
+
# usage: current_program <external-ip>
|
|
149
|
+
|
|
150
|
+
set -x
|
|
151
|
+
set -e
|
|
152
|
+
|
|
153
|
+
ip a
|
|
154
|
+
pwd
|
|
155
|
+
whoami
|
|
156
|
+
|
|
157
|
+
display_usage() {
|
|
158
|
+
echo "This script must be run with super-user privileges."
|
|
159
|
+
echo -e "\nUsage: $0 <external-ip> \ne.g. $0 154.8.246.205"
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
# if less than two arguments supplied, display usage
|
|
163
|
+
if [ $# -lt 1 ]
|
|
164
|
+
then
|
|
165
|
+
display_usage
|
|
166
|
+
exit 1
|
|
167
|
+
fi
|
|
168
|
+
|
|
169
|
+
if [[ $1 =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
170
|
+
echo "get external ip $1"
|
|
171
|
+
else
|
|
172
|
+
echo "wrong external ip $1 , must not have whitespace, tab and other char"
|
|
173
|
+
exit 2
|
|
174
|
+
fi
|
|
175
|
+
|
|
176
|
+
yum install -y coturn
|
|
177
|
+
|
|
178
|
+
# $1 is <external-ip>
|
|
179
|
+
cat <<EOF > /etc/coturn/turnserver.conf
|
|
180
|
+
external-ip=$1
|
|
181
|
+
listening-port=3478
|
|
182
|
+
lt-cred-mech
|
|
183
|
+
max-port=65535
|
|
184
|
+
min-port=20000
|
|
185
|
+
no-dtls
|
|
186
|
+
no-tls
|
|
187
|
+
realm=tencent
|
|
188
|
+
user=turn:turn
|
|
189
|
+
verbose
|
|
190
|
+
EOF
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
2. 增加可执行权限
|
|
194
|
+
|
|
195
|
+
```sh
|
|
196
|
+
chmod +x turn.sh
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
3. 以 root 身份执行脚本,`sudo ./turn.sh <服务器外网IP>`, 例如:
|
|
200
|
+
|
|
201
|
+
```sh
|
|
202
|
+
sudo ./turn.sh 14.3.3.3
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
4. 启动 turn server
|
|
206
|
+
|
|
207
|
+
```sh
|
|
208
|
+
systemctl start coturn
|
|
209
|
+
|
|
210
|
+
# 检测 turn 是否启动成功
|
|
211
|
+
ps aux | grep coturn
|
|
212
|
+
|
|
213
|
+
# 若要重启服务,则执行
|
|
214
|
+
service coturn restart
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
5. 配置 turn 服务器的防火墙,打开入站端口 3478(TCP & UDP),及上述配置中 min ~ max port 之间的出站端口(UDP)。
|
|
218
|
+
|
|
219
|
+
6. 配置公司内网防火墙,允许访问 turn 服务器的 IP,及打开出站端口 3478(TCP & UDP)。
|
|
220
|
+
|
|
221
|
+
7. 测试 turn server
|
|
222
|
+
|
|
223
|
+
使用该[测试页面](https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/),测试搭建好的 turn server 是否能够正常连通访问。如下截图中 done 说明 turn 能正常访问。
|
|
224
|
+
|
|
225
|
+
<img src="./assets/turn-test.png" alt="turn-test" style="zoom: 33%;" />
|
|
226
|
+
|
|
227
|
+
### 2-B 方案
|
|
228
|
+
|
|
229
|
+
2-B 方案搭建 Nginx 代理的方式,与 2-A 方案相同。主要有两处区别:
|
|
230
|
+
|
|
231
|
+
1. 搭建 turn server 时,配置文件中的 external-ip 字段需填写服务器在您企业内网的地址。
|
|
232
|
+
|
|
233
|
+
```sh
|
|
234
|
+
# 2-A 方案中启动脚本填的是服务器外网地址,例如外网地址为 14.3.3.3
|
|
235
|
+
sudo ./turn.sh 14.3.3.3
|
|
236
|
+
# 2-B 方案中启动脚本填的是服务器在企业内网地址,例如内网地址为 10.0.0.4
|
|
237
|
+
sudo ./turn.sh 10.0.0.4
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
2. 防火墙配置:
|
|
241
|
+
|
|
242
|
+
- 对于 Nginx 服务器,需要在公司内网防火墙配置域名白名单,允许 Nginx 服务器访问 TRTC 的相关域名,参考:[TRTC Web SDK 域名和端口白名单](https://cloud.tencent.com/document/product/647/34399#webrtc-.E9.9C.80.E8.A6.81.E9.85.8D.E7.BD.AE.E5.93.AA.E4.BA.9B.E7.AB.AF.E5.8F.A3.E6.88.96.E5.9F.9F.E5.90.8D.E4.B8.BA.E7.99.BD.E5.90.8D.E5.8D.95.EF.BC.9F)
|
|
243
|
+
- 对于 Turn Server,需要允许 Turn Server 能够访问外网。
|
|
244
|
+
|