更新记录
1.0.1(2025-05-09)
- 优化
1.0.0(2025-05-08)
- 音视频通话
- 共享手机屏幕
- 推流、拉流
平台兼容性
App |
快应用 |
微信小程序 |
支付宝小程序 |
百度小程序 |
字节小程序 |
QQ小程序 |
HBuilderX 3.7.0,Android:4.4,iOS:12,HarmonyNext:不支持 |
× |
× |
× |
× |
× |
× |
钉钉小程序 |
快手小程序 |
飞书小程序 |
京东小程序 |
鸿蒙元服务 |
× |
× |
× |
× |
× |
H5-Safari |
Android Browser |
微信浏览器(Android) |
QQ浏览器(Android) |
Chrome |
IE |
Edge |
Firefox |
PC-Safari |
× |
× |
× |
× |
× |
× |
× |
× |
× |
zego即构音视频通话,共享手机屏幕
开发文档
跑通demo
demo用的是vue3,HBuilderX导入的时候要选择vue3
- zego即构官网创建应用https://www.zego.im/
- 修改demo里common/key_center.js的appID和appSign
- 修改nativeplugins/wrs-zego的文件(ios屏幕共享功能),集成到项目时wrs-zego拷贝到项目对应文件夹:
ios的屏幕共享以ios extension方式集成,可参考uniapp官方集成文档https://nativesupport.dcloud.net.cn/NativePlugin/course/package.html#ios-extension
- manifest.json app原生插件配置勾选WRSShengwang插件
- 修改nativeplugins/wrs-zego/ios-extension.json文件:
identifier:extension的包名,一般是app包名+自定义后缀(${包名}.${自定义后缀}),如:
app包名为com.wrs.shengwang,则
identifier为com.wrs.shengwang.screenshare
UTSKeyboardGroup:iOS extension的group名,申请extension证书签名时需要增加group能力,并添加一个group名(同时app也同样需要增加同样group名的签名文件)
CFBundleDisplayName:共享屏幕的名称
com.apple.security.application-groups:数组里面添加上面申请的group名
- 集成项目时,拷贝AndroidManifest.xml、info.plist到项目根目录
- 把nativeResources/ios/UniApp.entitlements的array数组里改为上面的group名,集成到项目时这个文件需要拷贝到项目对应位置
视频画面组件,使用该组件的页面要用nvue
<wrs-uts-zego :viewMode="viewMode" :style="'width:'+width+'px;height:'+height+'px;'" @onLoadView="onLoadView" ref='localPreviewView'>
</wrs-uts-zego>
组件属性
- viewMode: 视图模式 预览本地视频,字符串,"0": AspectFit "1": AspectFill "3": ScaleToFill
- streamId: 流ID,用来渲染远程视频流
组件事件
- onLoadView:组件加载完成,加载完成后可以调用组件的接口
组件接口
// 开始预览本地视频
this.$refs.localPreviewView.startPreview()
接口
import {
UTSZego
} from "@/uni_modules/wrs-uts-zego"
- 设置回调
// 可以调用一次或多次
UTSZego.onCallback((resp) => {
console.log(JSON.stringify(resp))
let opt = resp.opt
switch (opt) {
// 开发调试错误
case "onDebugError":
break;
// 房间状态更新
case "onRoomStateUpdate": {
let state = resp.state
switch (state) {
case 0: {
// Disconnected
this.showMsg("房间断开连接")
}
break;
case 1: {
// Connecting
this.showMsg("房间连接中。。。")
}
break;
case 2: {
// Connected
this.showMsg("房间已经连接")
}
break;
default:
break;
}
}
break;
// 推流状态更新
case "onPublisherStateUpdate": {
let state = resp.state
switch (state) {
case 0: {
this.showMsg("没有推流")
}
break;
case 1: {
this.showMsg("推流请求中。。。")
}
break;
case 2: {
this.showMsg("正在推流中。。。")
}
break;
default:
break;
}
}
break;
// 相同房间内其他用户推的流增加或减少的通知。
case "onRoomStreamUpdate": {
let updateType = resp.updateType
switch (updateType) {
case 0: {
// 添加
let streamList = resp.streamList
for (let i = 0; i < streamList.length; i++) {
let streamId = streamList[i].streamId
this.remoteArray.push(streamId)
}
this.showMsg("有新用户视频流进来")
}
break;
case 1: {
// 删除
this.showMsg("有新用户关闭了视频流")
}
break;
default:
break;
}
}
break;
// 接收实验性 API 回调,请在 ZEGO 技术支持的帮助下使用此功能。
case "onRecvExperimentalAPI": {
}
break;
// 房间内其他用户增加或减少的回调通知。
case "onRoomUserUpdate": {
// 用户首次登录房间时,如果房间内有其他用户,SDK 会触发 "updateType" 为 [ZegoUpdateTypeAdd] 的回调通知,此时 "userList" 为房间内的其他用户。
// 用户已在房间内,如果有其他用户通过 [loginRoom]、[switchRoom] 函数登录到本房间,SDK 会触发 "updateType" 为 [ZegoUpdateTypeAdd] 的回调通知。
// 用户已在房间内,有其他用户通过 [logoutRoom]、[switchRoom] 函数登出本房间,SDK 会触发 "updateType" 为 [ZegoUpdateTypeDelete] 的回调通知。
// 用户已在房间内,如果有其他用户从服务端被踢出本房间,SDK 会触发 "updateType" 为 [ZegoUpdateTypeDelete] 的回调通知。
let updateType = resp.updateType
let userList = resp.userList
switch (updateType) {
case 0: {
// 添加
this.showMsg("有新用户进来")
}
break;
case 1: {
// 删除
this.showMsg("有新用户退出房间")
}
break;
default:
break;
}
}
break;
default:
break;
}
})
- 创建引擎
UTSZego.createEngine({
appID: KeyCenter.appID,
appSign: KeyCenter.appSign,
scenario: 8 // ZegoScenarioBroadcast
})
- scenario
3: default
4: StandardVideoCall
5: HighQualityVideoCall
6: StandardChatroom
7: HighQualityChatroom
8: Broadcast
9: Karaoke
10: StandardVoiceCall
- 登陆房间
let params = {}
params.roomId = this.roomId
params.userId = this.userId
params.isUserStatusNotify = true
// params.token = "xx"
UTSZego.loginRoom(params, (resp) => {
let flag = resp.flag
if (flag) {
this.showMsg("登陆房间成功:" + JSON.stringify(resp))
} else {
this.showMsg("登陆房间失败:" + JSON.stringify(resp))
}
})
- 退出房间
let params = {}
// params.roomId = this.roomId // roomId可选参数
UTSZego.logoutRoom(params)
- 设置视频配置
// 设置视频配置
let videoConfig = {}
videoConfig.encodeWidth = 720
videoConfig.encodeHeight = 1280
videoConfig.fps = 25
videoConfig.bitrate = 600
UTSZego.setVideoConfig(videoConfig)
- 开始推流
let params = {}
params.streamId = this.streamId // 流ID,不同用户
// params.channel = 1 // AUX
UTSZego.startPublishingStream(params)
- streamId: 流 ID,长度不超过 256 的字符串。需要在整个 AppID 内全局唯一,若出现在同一个 AppID 内,不同的用户各推了一条流且流名相同,将会导致后推流的用户推流失败
- channel:推流通道,可选参数,0: ZegoPublishChannelMain 1: ZegoPublishChannelAux 2: ZegoPublishChannelThird 3: ZegoPublishChannelFourth
- 停止推流
let params = {}
// params.channel = 1 // 可选参数
UTSZego.stopPublishingStream(params)
- 停止预览
let params = {}
// params.channel = 1 // 可选参数
UTSZego.stopPreview(params)
- 销毁引擎
UTSZego.destroyEngine(() => {})
- 切换前后摄像头
UTSZego.useFrontCamera(true)
- 开/关摄像头
UTSZego.enableCamera(true)
- 设置是否静音(关闭麦克风)
UTSZego.muteMicrophone(true)
- 设置是否静音(关闭音频输出)
UTSZego.muteSpeaker(true)
- 设置视频采集源
UTSZego.setVideoSource({
videoSource: 6, // ZegoVideoSourceTypeScreenCapture
channel: 1 // 可选参数,ZegoPublishChannelAux
})
- videoSource: 1: None 2: Camera 3: Custom 4: MainPublishChannel 5: TypePlayer 6: TypeScreenCapture 7: Default
- channel: 可选参数,见上面的channel
- 设置音频采集源
UTSZego.setAudioSource({
audioSource: 6, // ZegoVideoSourceTypeScreenCapture
channel: 1 // 可选参数,ZegoPublishChannelAux
})
- audioSource: 1: default 1: custom 2: 可选参数,见上面的channel 3: None 4: Microphone 5: MainPublishChannel 6: TypeScreenCapture
- channel: 可选参数,见上面的channel
- 开始屏幕采集,仅限 app 应用内录屏,仅支持iOS
let captureParams = {}
captureParams.captureVideo = true
captureParams.captureAudio = true
UTSZego.startScreenCaptureInApp(captureParams)
- 开始屏幕采集,仅支持Android
let captureParams = {}
captureParams.captureVideo = true
captureParams.captureAudio = true
UTSZego.startScreenCapture(captureParams)
- 开始屏幕采集,仅限 app 应用外录屏,仅支持iOS
let captureOutAppParams = {}
// captureOutAppParams.preferredExtension = "com.robustel.shengwang.screenshare" // 制定iOS extension的identify
UTSZego.startScreenCaptureOutApp(captureOutAppParams)
- 更新录屏配置
let params = {}
params.captureVideo = true
params.captureAudio = true
UTSZego.updateScreenCaptureConfig(params)
- 开始播放流
let params = {}
params.streamId = "xxx"
UTSZego.startPlayingStream(params)
- 设置app groupID,仅支持iOS
UTSZego.setAppGroupID("xxx)
- 是否开启硬解码
UTSZego.enableHardwareDecoder(true)
- 是否开启硬编码
UTSZego.enableHardwareEncoder(true)