招采场景集成最佳实践
更新时间: 2025/06/11 16:45:39
招采场景是指企业或组织通过公开招标、邀请招标等方式,从多个供应商中选择最优合作伙伴,以采购所需商品、服务或工程的过程。这一过程通常包括需求分析、市场调研、编制和发布招标文件、接收投标、开标与评标、谈判、确定中标者、签订合同以及执行和验收等多个环节,旨在确保采购活动的透明度、公平性和效率。本文介绍了如何通过网易云信音视频通话 2.0 NERTC Web SDK 搭建网页版远程异地评标系统。
业务场景
为了推动数字化采购改革以及企业数字化采购转型,国务院办公厅、财政部、国资委、工信部等部门已出台一系列关键政策。国务院办公厅 21 号文 明确指出要改进评标方法和评标机制,全面推广远程异地评标形式。多地政府已积极响应政府要求完成远程异地评标系统建设,通过电子化平台和远程异地评标等手段,来提高操作便捷性和公正性。
常见的招采业务场景如下图所示:

方案架构
网易云信具备一套全面的通信与视频服务解决方案,能够为招采场景提供高效、安全实时音视频(RTC)功能,如下图所示。方案支持远程沟通、在线谈判、视频会议等关键环节,从而提升采购过程的透明度、互动性和效率,同时确保数据的安全性和合规性,满足现代招采平台对于实时交互和协同工作的高要求。

功能介绍
远程异地评标系统是一种利用现代信息技术手段,实现评标专家在不同地理位置上进行协同工作的平台。这种系统旨在提高评标的公正性、透明度和效率,同时减少传统评标过程中可能出现的人为干扰。

根据上图,远程异地评标系统涉及的业务场景需求和对应的网易云信产品功能如下表所示:
功能项 |
业务场景需求 | 涉及网易云信能力项 |
---|---|---|
用户身份认证 |
|
N/A |
项目与文件管理 |
|
N/A |
在线评标环境 |
|
|
音视频会议支持 |
|
|
电子签名与审批 |
|
N/A |
数据安全保障 |
|
|
监督与审计 |
|
环境推荐
接入远程异地评标系统的最低设备配置,如下表所示:
设备配置 |
配置说明 |
---|---|
网络带宽 |
|
浏览器 | 推荐使用谷歌 Chrome 浏览器。
|
设备性能 |
|
注意事项
- 单一通话页面:当用户打开浏览器后,请只保留一个评审通话页面开启。多个通话页面使用同一个 UID 会导致会话互相踢出,从而引发通话异常。
- 设备音视频检测:进入评标系统前,请先进行摄像头和麦克风设备测试,确保设备正常工作并已获得浏览器授权,避免评审过程中出现音视频问题。
- 定期清理缓存:如遇到页面加载异常或功能无法正常使用的情况,建议清理浏览器缓存或使用浏览器的无痕/隐私模式重新访问系统。
接入流程
网易云信音视频通话 2.0 提供了全套 SDK,本文旨在帮助您实现 Web 端招采场景集成指导,供您在集成开发前参考。有关其他客户端的接入方式,请参考 接入流程。
flowchart LR
classDef default fill:#337EFF,stroke:#337EFF,stroke-width:0px,color:#FFFFFF;
A("创建应用并获取 App Key") --> B(开通服务) --> C("集成 SDK") --> D(实现音视频通话基本功能) --> E("实现关键功能")
步骤 |
操作指导 | 说明 |
---|---|---|
1 | 创建应用并获取 App Key | 在 网易云信控制台 中创建应用,查看该应用的应用密钥(App Key),后续集成 SDK 时,在本地工程中填入该 App Key。 |
2 | 开通 NERTC 服务 | 在 网易云信控制台 中为已创建的应用开通 音视频通话 服务。![]() |
3 | 集成 NERTC Web SDK | 通过网易云信音视频通话 2.0 产品提供的 NERTC Web SDK,快速集成客户端 SDK。 |
4 | 实现音视频通话基本功能 | 基于音视频通话 SDK 快速实现音视频通话的基本功能。以典型业务场景为例,为您介绍基于该业务流程的 SDK 实现步骤。 |
5 | 参考下文各项推荐配置,实现招采场景关键功能。 | 招采场景关键功能实现的推荐配置,如订阅配置,变声配置,录制配置等。 |
一:音视频参数配置
音视频参数配置(如分辨率、帧率、码率等)的设置目的在于提升用户体验、优化性能、确保安全性和满足业务场景的需求。
属性 |
客户端 API | 推荐配置 | 推荐原因 |
---|---|---|---|
音频属性 | setAudioProfile |
speech_standard | 在网络环境不够稳定的情况下,低码率可以保证语音通话的基本需求。 |
视频属性 |
以整体画布比例为 16:9 为例:
|
保证画面流畅性和画质清晰度。参考下文 视频订阅配置推荐。 |
|
场景属性 | setChannelProfile |
会议场景:rtc(通信模式) |
|
二:实现音频静音
评标通话过程中,涉及到用户静音的场景,有以下两种实现方式:
-
方式一:localStream.close,关闭麦克风采集和音频流发布。
-
方式二:(推荐)localStream.muteAudio,不关闭麦克风采集,只关闭音频流发布。
如果不需要释放麦克风,仅仅是静音成员,推荐您采用
muteAudio
方式,这样能避免重复打开或关闭麦克风,从而避免浏览器与麦克风之间可能存在的连接不稳定性。
三:视频订阅配置推荐
评标通话过程中,专家之间一般不允许互相观看视频画面,且评标人不需要观看专家摄像头高清分辨率。您可根据网络状况或业务需求,按需订阅视频以及按需订阅大流或者小流,提升音视频通话质量。
业务层建议定义好不同角色的 uid
规则,便于订阅时进行判断。
实现方法
-
按需订阅视频流。您可以先判断
uid
角色,在设置订阅参数Stream.setSubscribeConfig
时,设置video
等参数为true
或false
来决定是否订阅,也就不需要再用视频遮罩等功能去处理,从而降低了观看端的带宽占用。 -
按需订阅大流或者小流,详情请参考 配置大小流。
配置推荐
-
音视频发布订阅的推荐配置如下表所示:
人员 发布流 订阅流 音频 视频 & 屏幕共享 音频 视频 & 屏幕共享 专家 1 发布 发布 订阅所有人 不订阅 专家 2 发布 发布 订阅所有人 不订阅 专家 3 发布 发布 订阅所有人 不订阅 ...... ...... ...... ...... ...... 评标人 发布 不发布 订阅所有人 订阅所有人 监督人 不发布 不发布 订阅所有人 订阅所有人 -
评标人与监督人的画面布局,如果专家比较多,建议分页展示,避免占用过多设备内存,导致画面卡顿等问题。一个分页可以展示两个专家的画面,如下示例:
四:变声实现推荐
从 NERTC Web SDK 5.5.11 版本开始,基于 AI 音效插件实现了 美声变声 能力。支持多种预设音效包括音调调整、美声效果和混响处理。针对招采场景,您可以选用 5.8.0 及以上版本 NERTC Web SDK。
-
AI 音效插件与伴音功能互斥,不可同时使用。
-
AI 音效插件既支持本地音频流调整,也支持远端流处理。
实现方法 如下:
-
创建本地视频流并发布,参考 实现音视频通话。
-
调用
setAudioEffect
和disableAudioEffect
接口使用变声功能。推荐使用 成熟 音效(client.setAudioEffect(0, 4);
),详情请参考 AI 音效《场景一:本端流降噪 + 远端流混流后变声》查看相关示例代码。
五:录制实现推荐
网易云信云端录制功能在原有单人模式、混流模式基础上,扩展支持更加灵活的音视频录制组合模式。
文件生成规则
在 创建云端录制任务 服务端接口中,对于 recordConfig
的单人视频与混合音频录制模式中(即 mode
100 招采模式),为避免重复音频数据录制,遵循以下文件生成规则:
-
音视频房间:视频用户分别生成单人文件,纯音频、或只订阅音频用户不单独生成文件。
-
纯音频房间:假设频道无人开视频、全部纯音频,录制结果只生成一个
mix
的.aac
文件,对应的用户 ID(uid
)固定为1000006
,对应录制单独音频文件录制模式(即mode
6 单独音频文件模式)。
指定录制用户
-
您可以将业务维护专家
uid
名单: -
招采场景一般需要录制专家视频,以及所有参会人(包括评标人)音频,您可以设置
videoUidList
订阅专家视频,设置audioUidList
订阅全部参会人。
录制人数限制
- 频道单人录制、
mode
100 招采模式,均不限制录制人数。 - 合流自定义布局视频人数限制,已开放至最高 64 人。
解决视频黑边
为保证视频画面不变形,录制分辨率需保持宽高比例一致。在录制分辨率层面,网易云信的缩放模式,支持 适应图片 和 适应区域 两种。
在 适应图片 模式下,可能出现背景色黑边。解决方式如下:
-
在可接受部分内容被裁减的前提下,调整
adaption
为 适应区域(取值为1
),保证区域被填满。详情请参考 录制布局 设置用户画面章节adaption
参数说明。 -
选择自定义布局,调整用户区域和用户视频画面比例一致。
效果示例
不同录制模式的主要区别是模式设置参数(mode
)的取值不同。在 创建云端录制任务 服务端接口中,模板文件集合模式列表(modeList
)可以传多个 mode
,但每个 mode
值只能设置一次,您可以按需组合 modeList
来达到最终录制需求。
该模式将每个专家的摄像头和屏幕共享录制在同一个文件中,并且录制所有人音频。模式设置参数为 "mode": 100
。



配置示例:
JSON{
"cid": 114433117788,
"recordConfig": {
"recordType": 100,
"modeList": [
{
"mode": 100
}
]
},
"streamSubscribe": {
"streamType": 2,
"audioUidList": {
"unSubscribeUids": [
]
},
"videoUidList": {
"subscribeUids": [
66601,
66602
]
}
}
}
该模式将每个专家的摄像头和屏幕共享分别录制在两个文件中,并且只录制专家自己的音频。模式设置参数为 "mode": 0
。


配置示例:
JSON{
"cid": 114433117788,
"recordConfig": {
"recordType": 0,
"modeList": [
{
"mode": 0
}
]
}
}
该模式将每个专家的摄像头和屏幕共享录制在同一个文件中,并且录制所有人音频。模式设置参数为 "mode": 100
。
单流全屏配置 | 摄像头 | 屏幕共享 | 摄像头+屏幕共享 |
---|---|---|---|
未配置(默认) | ![]() |
![]() |
![]() |
配置 |
![]() |
![]() |
![]() |
配置示例:
JSON{
"cid": 114433117788,
"recordConfig": {
"recordType": 100,
"modeList": [
{
"mode": 100,
"layoutType": 2,
"layout": {
"canvas": {
"width": 720,
"height": 480
},
"subStreams": [
{
"adaption": 0,
"x": 0,
"width": 720,
"y": 0,
"zOrder": 1,
"height": 384
}
],
"users": [
{
"adaption": 1,
"x": 270,
"width": 144,
"zOrder": 2,
"y": 384,
"height": 96
}
]
}
}
]
},
"streamSubscribe": {
"streamType": 2,
"audioUidList": {
"unSubscribeUids": [
]
},
"videoUidList": {
"subscribeUids": [
66601,
66602
]
}
}
}
该模式将所有专家的摄像头和屏幕共享混合录制在一个文件中,并且录制所有人音频。模式设置参数为 "mode": 1
。

配置示例:
JSON{
"cid": 114433117788,
"recordConfig": {
"recordType": 100,
"modeList": [
{
"mode": 1,
"layoutType": 2,
"layout": {
"canvas": {
"width": 1280,
"height": 720
},
"users": [
{
"uid": 66601,
"x": 0,
"y": 0,
"width": 640,
"height": 360,
"adaption": 0
},
{
"uid": 66602,
"x": 640,
"y": 0,
"width": 640,
"height": 360,
"adaption": 0
}
],
"subStreams": [
{
"uid": 66601,
"x": 0,
"y": 360,
"width": 640,
"height": 360,
"adaption": 0
},
{
"uid": 66602,
"x": 640,
"y": 360,
"width": 640,
"height": 360,
"adaption": 0
}
]
}
}
]
},
"streamSubscribe": {
"streamType": 2,
"audioUidList": {
"unSubscribeUids": [
]
},
"videoUidList": {
"subscribeUids": [
66601,
66602
]
}
}
}
该模式是将所有专家的摄像头录制在一个文件中,不包含专家的屏幕共享,并且录制所有人音频,该模式采用画廊视图。模式设置参数为 "mode": 4
。



配置示例:
JSON{
"cid": 114433117788,
"recordConfig": {
"recordType": 100,
"modeList": [
{
"mode": 4
}
]
}
}
基于以上常规的录制模式设置,通过按需组合 modeList
来达到最终录制需求的示例如下:
专家合流模式一 会根据您选择的专家模式(默认的或者自定义的)以及合流模式进行输出,每个专家会生成一个包含了该专家摄像头、屏幕共享以及混合所有人声音的录制文件,还会再生成一个所有人的音视频混合在一起的录制文件。
配置示例:
JSON{
"cid": 114433117788,
"recordConfig": {
"recordType": 100,
"modeList": [
{
"mode": 100
},
{
"mode": 1,
"layoutType": 2,
"layout": {
"canvas": {
"width": 1280,
"height": 720
},
"users": [
{
"uid": 66601,
"x": 0,
"y": 0,
"width": 640,
"height": 360,
"adaption": 0
}
],
"subStreams": [
{
"uid": 66601,
"x": 0,
"y": 360,
"width": 640,
"height": 360,
"adaption": 0
}
]
}
}
]
},
"streamSubscribe": {
"streamType": 2,
"audioUidList": {
"unSubscribeUids": [
]
},
"videoUidList": {
"subscribeUids": [
66601,
66602
]
}
}
}
专家合流模式二 会在 专家合流模式一 基础上,每个专家再多生成一个摄像头录制视频文件和一个屏幕共享录制视频文件,这两个文件只有专家自己的声音,不会混合所有人的声音。配置文件会比 专家合流模式一 多一个 "mode": 0
设置。
配置示例:
JSON{
"cid": 114433117788,
"recordConfig": {
"recordType": 100,
"modeList": [
{
"mode": 100
},
{
"mode": 0
},
{
"mode": 1,
"layoutType": 2,
"layout": {
"canvas": {
"width": 1280,
"height": 720
},
"users": [
{
"uid": 66601,
"x": 0,
"y": 0,
"width": 640,
"height": 360,
"adaption": 0
}
],
"subStreams": [
{
"uid": 66601,
"x": 0,
"y": 360,
"width": 640,
"height": 360,
"adaption": 0
}
]
}
}
]
},
"streamSubscribe": {
"streamType": 2,
"audioUidList": {
"unSubscribeUids": [
]
},
"videoUidList": {
"subscribeUids": [
66601,
66602
]
}
}
}
六:获取录制文件
通过上文 录制实现推荐 提到的录制实现配置录制任务,通话结束之后,服务器侧会开始转码并生成对应的录制文件。网易云信提供了抄送回执和接口 API 的两种形式,可以用于获取生成的录制文件。
招采场景,一般通话时间较长,生成的录制文件较大,生成录制文件对应需要的转码时间也会较长。所以,通话结束后,您需要等待一段时间才能收到录制文件。如果您有更快速的录制时间诉求,可以 提交工单 联系网易云信技术支持工程师开通高优先级录制功能。
实现方法 如下:
-
方式一:(推荐)通话结束之后,录制文件通过抄送的形式,将生成的录制文件下载链接(URL)抄送到您在 网易云信控制台 配置的抄送地址。
消息抄送是网易云信提供的消息同步服务,通过这一服务,可以将录制文件的详细内容,以 HTTP/HTTPS 请求的形式实时同步给您预设的服务器地址。相关字段信息请参考 房间管理事件抄送 录制文件下载信息章节。
-
方式二:您可以调用 SDK 的 queryMediaFileByChannelId.action 接口,主动通过音视频的房间 ID(
cid
)查询。详情请参考 获取录制文件。
网易云信的录制文件按照特定的命名方式命名,命名格式如下所示:
-
音视频单人录制文件:
uid-cid-timestamp-sliceindex.filetype
-
音视频混合录制文件:
0-cid-timestamp-sliceindex-mix.filetype
-
互动直播录制文件:
taskId-cid-timestamp-sliceindex.filetype
录制文件名称不支持提前配置。如需修改命名,您可以在收到录制文件后,调用 修改视频文件信息 /app/vod/video/edit
接口修改文件信息。
七:解决网络受限问题
招采场景可能存在服务器部署在受限环境中,如仅允许内网访问评标系统,仅允许加白 IP 地址访问评标系统。
针对上述网络受限的场景,您可以考虑如下解决方案:
-
IP 白名单:当评标系统用户集中在某个单一地区时,推荐使用该方式。实现原理是网易云信对 指定应用 限制使用某地区的服务器提供服务,在合作过程中网易云信提供对应的服务器 IP 列表,您再将对应 IP 列表添加到内部防火墙,以应对部分网络受限场景。
如需使用该方式,请联系网易云信商务或 提交工单 联系网易云信技术支持工程师。
-
云代理方式:当评标系统用户分散在全国各地时,推荐使用该方式。实现原理请参考 实现云代理。
-
私有化部署:当部分客户面临强烈的监管及数据不外流的需求时,可以考虑该方式。通过将网易云信服务完全本地部署的方式提供服务,需要业务客户提供具体的服务器资源。如需使用该场景,请联系网易云信商务或 提交工单 联系网易云信技术支持工程师。
私有化场景没有单独查询录制文件的管理后台,在 获取录制文件 时,建议您依赖抄送方式获取录制文件地址。如果您需要查看私有化服务器上对应的存储文件,请联系私有化实施工程师了解存储路径。
八:通话音视频数据流加密
招采场景涉及通话内容敏感时,为了防止被黑客等获取到明文的音视频数据流,避免信息泄露,您可以考虑如下解决方案:
-
方式一:(建议)使用国密算法加密实现。NERTC SDK 已内置国密算法加密模式,您自行管理好密钥即可。
-
方式二:使用自定义加密算法实现。此方式需要您完整实现加解密过程,比较复杂。
以上两种加密算法请参考 媒体流加密。请详细阅读媒体流加密文档的注意事项等,如有遗漏,可能会导致加解密失败,进而导致听不见、看不到等现象。
九:设置屏幕共享
招采场景涉及到安全合规时,存在需要屏幕共享开启时,只允许共享整个屏幕,不能选择窗口和浏览器标签页的场景。针对此场景,您可以考虑做如下方案设置:
-
用户加入房间前,修改
NERTC.getParameters().forceDisplaySurface
为monitor
,以选择屏幕共享区域。forceDisplaySurface
的可选值包括了default
、browser
、window
、monitor
,默认为default
,monitor
代表只允许共享整个屏幕。 -
设置为
monitor
后,如果用户选择了其他区域进行共享,会触发回调方法Client.on("displaySurfaceError",...)
,您可以提示让用户重新开启屏幕共享,必须选择 整个屏幕。
十:转存点播文件
在实现网易云信点播服务私有化后,如果您需要通过私有化环境访问之前公有云的点播文件,您可以按以下步骤将公有云环境点播文件转存到私有化服务器上。
-
获取点播文件列表。
-
方式一:直接调用点播服务端接口。您可以自行调用
vcloud.163.com/app/vod/video/list
接口分页获取。 -
方式二:通过脚本调用点播服务端接口。
-
下载
getVideoList.py
Python 脚本。该脚本通过自动执行vod/video/list
服务端接口实现获取。 -
自行修改脚本中的参数:
appkey
和appsecret
:用于识别开发者身份,获取方式请参考 创建应用并获取 AppKey。start_date
和end_date
:用于修改获取点播文件的时间范围。
-
在 Python 环境下,执行
python getVideoList.py
命令运行脚本。 -
在脚本所在路径下,打开并查看自动生成的
video_list.csv
文件,文件中包含了原始下载文件,转码下载文件等。
-
-
-
根据您获取到的点播文件列表,按照存储地址下载文件。
- 下载方式不限,您可以自行调用迅雷或者系统的下载指令下载。
- 下载点播文件会涉及公有云点播下行带宽流量计费。请核实您的公有云点播计费规则。如果是按照日峰值带宽计费的话,请注意并行下载数量,避免同时下载的带宽过高造成较高的点播计费。
- 下载点播文件会占用您本地业务服务器带宽,建议您在业务低峰期下载,避免造成其他影响。
-
按需上传点播文件到私有化环境。不同私有化环境的上传方式可能不一样,您可以和网易云信实施工程师联系。
总结
本实践文档详细介绍了通过网易云信实现 Web 版本招采评标系统的音视频参数配置、音频静音实现、视频订阅、变声功能、录制推荐方法、文件生成规则、网络受限问题的解决方案以及屏幕共享设置,旨在优化评标流程,提升效率和安全性。通过这些功能,系统能够满足不同评标场景中评标专家、评标人、监督人的功能使用需求,同时通过安全保障和审计资料确保评标过程的公正性和透明度。如果您对招采场景方案有其他功能需求,或对文中描述有任何疑问,请 提交工单 联系网易云信技术支持工程师。