更新记录
1.0.7(2024-10-14)
- ios增加设置音频类别接口setCategory
1.0.6(2024-10-13)
- 升级声网 sdk, iOS升级到4.4.0,Android升级到4.4.1
1.0.5(2024-10-12)
- 修复高版本HB回调只回调一次的问题
平台兼容性
Vue2 | Vue3 |
---|---|
√ | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 3.7.0,Android:4.4,iOS:9,HarmonyNext:不确定 | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 |
---|---|---|---|
× | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | × | × |
声网音视频通话实时互动,屏幕共享
集成插件步骤请参考 https://www.cnblogs.com/wenrisheng/p/18323027
跑通demo
demo用的是vue2,HBuilderX导入的时候要选择vue2
- 声网官网创建应用https://www.shengwang.cn/
- 修改demo里common/key_center.js的appId和certificate
- 修改nativeplugins/wrs-shengang的文件(ios屏幕共享功能):
ios的屏幕共享以ios extension方式集成,可参考uniapp官方集成文档https://nativesupport.dcloud.net.cn/NativePlugin/course/package.html#ios-extension
- manifest.json app原生插件配置勾选WRSShengwang插件
- ios-extension.json里的identifier改为打包包名+自定义后缀(${包名}.${自定义后缀}),如:
包名为com.wrs.shengwang
后缀为screenshare
identifier为com.wrs.shengwang.screenshare
- ios-extension.json里的profile替换为iOS的extension签名文件名,文件名要以ios-为前缀
- ios-profile_dev20241031.mobileprovision替换为ios-extension.json里profile的签名文件
- ios-extension.json里的CFBundleDisplayName修改为自己的显示名称
- 删除unpackage文件夹
- 删除手机已有的app
- 从新自定义基座运行
权限配置
- iOS
"NSCameraUsageDescription" : "使用摄像头需要您的授权",
"NSMicrophoneUsageDescription" : "使用麦克风需要您的授权"
官方iOS接口https://doc.shengwang.cn/api-ref/rtc/ios/API/rtc_api_overview
官方android接口https://doc.shengwang.cn/api-ref/rtc/android/API/rtc_api_overview
视频画面组件,使用该组件的页面要用nvue
<wrs-uts-shengwang ref='localView' :style="'width:'+width+'px;height:'+height+'px;'" @onLoadView="onLoadView"
>
</wrs-uts-shengwang>
组件属性
- localVideo 预览本地视频,json字符串
let localVideo = {}
localVideo.uid = 111 // 用户ID,整形数字
localVideo.renderMode = 1 // 视频渲染模式,参考下面接口
localVideo.mirrorMode = 0 // 镜像模式,参考下面接口
localVideo: JSON.stringify(localVideo)
-
remoteVideo 预览远程用户视频,json字符串 参考localVideo数据结构
-
remoteVideoEx 预览多频道视频,json字符串 如:
{
"videoCanvas": {
"uid": 123,
"renderMode": 1
},
"connection": {
"channelId": "xxx",
"localUid": 111
}
}
组件回调接口
- onLoadView 组件加载完成
组件接口
- 初始化本地视图
var localVideoParams = {}
// 发布视频源的用户 ID
localVideoParams.uid = this.uid
// 发布某一路合图子视频流的用户 ID。
localVideoParams.subviewUid = "xxx"
// 视频渲染模式
// 1: 视频尺寸等比缩放。优先保证视窗被填满。因视频尺寸与显示视窗尺寸不一致而多出的视频将被截掉。
// AgoraVideoRenderModeHidden = 1,
// 视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充黑色
// /** Fit(2): Uniformly scale the video until one of its dimension fits the boundary (zoomed to fit). Areas that are not filled due to the disparity in the aspect ratio will be filled with black. */
// AgoraVideoRenderModeFit = 2,
localVideoParams.renderMode = 1
// 镜像模式
0:由 SDK 决定镜像模式。
本地视图镜像模式:如果你使用前置摄像头,默认启动本地视图镜像模式;如果你使用后置摄像头,默认关闭本地视图镜像模式。
远端用户视图镜像模式:默认关闭远端用户的镜像模式。
1:启用镜像模式。
2:关闭镜像模式。
localVideoParams.mirrorMode = 0
// 视频源的类型
AgoraVideoSourceTypeCamera
0:(默认)视频源为第一个摄像头。
AgoraVideoSourceTypeCameraSecondary
1:视频源为第二个摄像头。
AgoraVideoSourceTypeScreen
2:视频源为第一个屏幕。
AgoraVideoSourceTypeScreenSecondary
3:视频源为第二个屏幕。
AgoraVideoSourceTypeCustom
4:自定义的视频源。
AgoraVideoSourceTypeMediaPlayer
5:视频源为媒体播放器。
AgoraVideoSourceTypeImagePNG
6:视频源为 PNG 图片。
AgoraVideoSourceTypeImageJPEG
7:视频源为 JPEG 图片。
AgoraVideoSourceTypeImageGIF
8:视频源为 GIF 图片。
AgoraVideoSourceTypeRemote
9:视频源为网络获取的远端视频。
AgoraVideoSourceTypeTransCoded
10:转码后的视频源。
AgoraVideoSourceTypeUnknown
100:未知的视频源。
localVideoParams.sourceType = 0
this.$refs.localView.setupLocalVideo(JSON.stringify(localVideoParams))
- 初始化远端用户视图,参数看考setupLocalVideo接口
var uid = resp.uid
var elapsed = resp.elapsed
var videoParams = {}
videoParams.uid = uid
videoParams.renderMode = 1
this.$refs.remoteView.setupRemoteVideo(JSON.stringify(videoParams))
获取token
官网token说明https://doc.shengwang.cn/doc/rtc/ios/basic-features/token-authentication 一般都是从自己的业务服务器里获取token
export let appId = "xxx"
export let certificate = "" // 没有certificate的话设为空字符串
export let faceCaptureLicense = ""
export function generateToken(channelName, uid, handle) {
var data = {}
data.appCertificate = certificate
data.appId = appId
data.channelName = channelName
data.expire = 900
data.src = "iOS"
data.ts = Date.now() + ""
data.type = 1
data.uid = uid
uni.request({
url: 'https://toolbox.bj2.agoralab.co/v1/token/generate', //仅为示例,并非真实接口地址。
method: "POST",
data: data,
success: (res) => {
console.log(JSON.stringify(res))
handle(res.data.data.token)
},
fail(err){
console.log(JSON.stringify(err))
handle(null)
}
});
}
业务接口
import {
UTSAgoraRtcEngineKit,
getScreenInfo,
UTSAVAudioSession
} from "@/uni_modules/wrs-uts-shengwang"
- 创建并初始化
let params = {}
// 声网为 App 开发者签发的 App ID
params.appId = KeyCenter.appId
// 访问区域,即 SDK 连接的服务器所在的区域
// AgoraAreaCodeTypeCN = 0x1,
// AgoraAreaCodeTypeNA = 0x2,
// AgoraAreaCodeTypeEUR = 0x4,
// AgoraAreaCodeTypeAS = 0x8,
// AgoraAreaCodeTypeJP = 0x10,
// AgoraAreaCodeTypeIN = 0x20,
// AgoraAreaCodeTypeGlobal = 0xFFFFFFFF
params.areaCode = 0x1
// 频道使用场景
//0: 通信场景。声网推荐使用直播场景以获取更好的音视频体验。
//1:(默认)直播场景。
//2: (已废弃)游戏场景。
//3 : 互动场景。该场景对延时进行了优化。如果你的场景中有用户需要频繁互动,建议使用该场景。
params.channelProfile = 1
UTSAgoraRtcEngineKit.setConfig(params, (resp) => {
// console.log(JSON.stringify(resp))
var opt = resp.opt
// this.showMsg(JSON.stringify(data.resp))
switch (opt) {
// 发生错误回调。
case "onError":
break;
// Token 已过期回调。
case "onRequestToken":
break;
// Token 服务将在30s内过期回调
case "onTokenPrivilegeWillExpire":
break;
// 网络连接中断回调。
case "onConnectionInterrupted":
break;
// 网络连接中断,且 SDK 无法在 10 秒内连接服务器回调。
case "onConnectionLost":
break;
// 网络连接已被服务器禁止回调
case "onConnectionBanned":
break;
// 成功加入频道回调
case "onJoinChannel":
break;
// 成功重新加入频道回调
case "onRejoinChannel":
break;
// 直播场景下用户角色已切换回调。
case "onClientRoleChanged":
break;
// 直播场景下切换用户角色失败回调。
case "onClientRoleChangeFailed":
break;
// 离开频道回调
case "onLeaveChannel":
break;
// 远端用户(通信场景)/主播(直播场景)加入当前频道回调。
case "onUserJoined":
// 有人加入了这个频道
var uid = resp.uid
var elapsed = resp.elapsed
this.showMsg("remote user join uid:" + uid + " elapsed:" + elapsed + "ms")
var videoParams = {}
videoParams.uid = uid
videoParams.renderMode = 1
this.$refs.remoteView.setupRemoteVideo(JSON.stringify(videoParams))
break;
/// 远端用户(通信场景)/主播(直播场景)离开当前频道回调。
case "onUserOffline":
// 有人离开了这个频道
var uid = resp.uid
var elapsed = resp.elapsed
this.showMsg("remote user left uid:" + uid + " elapsed:" + elapsed + "ms")
var videoParams = {}
videoParams.uid = uid
videoParams.renderMode = 1
videoParams.nullView = true
this.$refs.remoteView.setupRemoteVideo(JSON.stringify(videoParams))
break;
// 本地视频状态发生改变回调。
case "onLocalVideoStateChanged":
// 在进行屏幕视频采集(state 为 capturing,souceType 为 screen)时,定义 rtcEngine 的行为
// state:
// /**
// * 0: The local video is in the initial state.
// */
// AgoraVideoLocalStateStopped = 0,
// /**
// * 1: The capturer starts successfully.
// */
// AgoraVideoLocalStateCapturing = 1,
// /**
// * 2: The first video frame is encoded successfully.
// */
// AgoraVideoLocalStateEncoding = 2,
// /**
// * 3: The local video fails to start.
// */
// AgoraVideoLocalStateFailed = 3
var state = resp.state
// sourceType
// AgoraVideoSourceTypeCamera = 0,
/** Video captured by the secondary camera.
*/
// AgoraVideoSourceTypeCameraSecondary = 1,
// /** Video for screen sharing.
// */
// AgoraVideoSourceTypeScreen = 2,
// /** Video for secondary screen sharing.
// */
// AgoraVideoSourceTypeScreenSecondary = 3,
// /** Video for custom video.
// */
// AgoraVideoSourceTypeCustom = 4,
// /** Video for media player sharing.
// */
// AgoraVideoSourceTypeMediaPlayer = 5,
// /** Video for png image.
// */
// AgoraVideoSourceTypeImagePNG = 6,
// /** Video for JPEG image.
// */
// AgoraVideoSourceTypeImageJPEG = 7,
// /** Video for GIF image.
// */
// AgoraVideoSourceTypeImageGIF = 8,
// /** Remote video received from network.
// */
// AgoraVideoSourceTypeRemote = 9,
// /** Video for transcoded.
// */
// AgoraVideoSourceTypeTransCoded = 10,
// /** Video captured by the third camera.
// */
// AgoraVideoSourceTypeCameraThird = 11,
// /** Video captured by the fourth camera.
// */
// AgoraVideoSourceTypeCameraFourth = 12,
// /** Video for third screen sharing.
// */
// AgoraVideoSourceTypeScreenThird = 13,
// /** Video for fourth screen sharing.
// */
// AgoraVideoSourceTypeScreenFourth = 14,
// /** Not define.
// */
// AgoraVideoSourceTypeUnknown = 100
var sourceType = resp.sourceType
if (state == 1 && sourceType == 2) {
// 屏幕共享
var mainScreen = getScreenInfo()
var params = {}
params.publishScreenCaptureVideo = !mainScreen.isCaptured
params.publishScreenCaptureAudio = !mainScreen.isCaptured
params.publishCameraTrack = mainScreen.isCaptured
params.clientRoleType = 1
params.publishCameraTrack = true
params.publishMicrophoneTrack = true
UTSAgoraRtcEngineKit.updateChannel(params)
}
break
default:
break;
}
})
- 设置日志文件
var logPath = plus.io.convertLocalFileSystemURL("_download/agorasdk/agorasdk.log");
UTSAgoraRtcEngineKit.setLogFile(logPath)
- 配置与声网私有媒体服务器接入模块的连接。
var params = {}
params.ipList = [""]
params.mode = 0
params.advancedConfig = {
logUploadServer: {
serverDomain: "",
serverPort: 8080,
serverPath: "",
serverHttps: true,
}
}
UTSAgoraRtcEngineKit.setLocalAccessPoint(params)
- 设置用户角色
1: 主播。主播可以发流也可以收流。
2:(默认)观众。观众只能收流不能发流。
var role = 1
UTSAgoraRtcEngineKit.setClientRole(role)
- 启用视频模块
UTSAgoraRtcEngineKit.enableVideo()
- 启用音频模块
UTSAgoraRtcEngineKit.enableAudio()
- 设置视频编码属性
var params = {}
用户可以自行设置分辨率,也可以参考下面分辨率:
params.dimensions = {
width: 100,
height: 100
}
params.frameRate = 0
params.bitrate = 0
params.orientationMode = 0
params.mirrorMode = 0
params.codecType = 0
UTSAgoraRtcEngineKit.setVideoEncoderConfiguration(params)
-
dimensions AgoraVideoDimension120x120:视频分辨率为 120 × 120。 AgoraVideoDimension160x120:视频分辨率为 160 × 120。 AgoraVideoDimension180x180:视频分辨率为 180 × 180。 AgoraVideoDimension240x180:视频分辨率为 240 × 180。 AgoraVideoDimension320x180:视频分辨率为 320 × 180。 AgoraVideoDimension240x240:视频分辨率为 240 × 240。 AgoraVideoDimension320x240:视频分辨率为 320 × 240。 AgoraVideoDimension424x240:视频分辨率为 424 × 240。 AgoraVideoDimension360x360:视频分辨率为 360 × 360。 AgoraVideoDimension480x360:视频分辨率为 480 × 360。 AgoraVideoDimension640x360:视频分辨率为 640 × 360。 AgoraVideoDimension480x480:视频分辨率为 480 × 480。 AgoraVideoDimension640x480:视频分辨率为 640 × 480。 AgoraVideoDimension840x480:视频分辨率为 840 × 480。 AgoraVideoDimension960x540:视频分辨率为 960 × 540。 AgoraVideoDimension960x720:视频分辨率为 960 × 720。 AgoraVideoDimension1280x720:视频分辨率为 1280 × 720。 AgoraVideoDimension1920x1080:视频分辨率为 1920 × 1080。 AgoraVideoDimension2540x1440:视频分辨率为 2540 × 1440。 AgoraVideoDimension3840x2160:视频分辨率为 3840 × 2160。
-
codecType 0:(默认)不指定编解码格式。SDK 会根据当前视频流的分辨率、设备性能自动匹配适合的编解码格式。 1:标准 VP8。 2:标准 H.264。 AgoraVideoCodecTypeH265 3:标准 H.265。 AgoraVideoCodecTypeGeneric 6:Generic。 本类型主要用于传输视频裸数据(比如用户已加密的视频帧),该类型视频帧以回调的形式返回给用户,需要用户自行解码与渲染。 20:Generic JPEG。 本类型所需的算力较小,可用于算力有限的 IoT 设备
- 开启视频预览
UTSAgoraRtcEngineKit.startPreview()
- 设置默认的音频路由
UTSAgoraRtcEngineKit.setDefaultAudioRouteToSpeakerphone(true)
- 设置媒体选项并加入频道
var params = {}
params.token = "" // 在服务端生成的用于鉴权的动态密钥
params.channelId = "" // 频道名
params.uid = 011 // 用户 ID
params.mediaOptions = { // 频道媒体设置选项
publishCameraTrack: true,// 设置是否发布摄像头采集的视频:
publishMicrophoneTrack: true, // 设置是否发布麦克风采集到的音频
clientRoleType: 1, // 直播场景里的用户角色,1: 主播。主播可以发流也可以收流。2:(默认)观众。观众只能收流不能发流。
publishSecondaryCameraTrack: false,// 设置是否发布第二个摄像头采集的视频
publishScreenCaptureVideo: false, // 设置是否发布屏幕采集的视频:
publishScreenCaptureAudio: false, // 设置是否发布屏幕采集的音频:
publishCustomAudioTrack: false, // 设置是否发布自定义采集的音频
publishCustomVideoTrack: false, // 设置是否发布自定义采集的视频:
publishEncodedVideoTrack: false, // 设置是否发布编码后的视频:
publishMediaPlayerAudioTrack: true, // 设置是否发布媒体播放器的音频
publishCustomAudioTrackId: 0 // 待发布的自定义音频轨道的 ID
}
UTSAgoraRtcEngineKit.joinChannel(params)
- 关闭音频模块
UTSAgoraRtcEngineKit.disableAudio()
- 关闭视频模块
UTSAgoraRtcEngineKit.disableVideo()
- 停止视频预览
UTSAgoraRtcEngineKit.stopPreview()
- 离开频道
UTSAgoraRtcEngineKit.leaveChannel((resp)=>{
})
- 开始屏幕采集
var params = {}
params.captureVideo = true // 屏幕共享时是否采集屏幕
params.captureAudio = true // 屏幕共享时是否采集系统音频
params.audioParams = {
captureSignalVolume: 100 // 采集的系统音量
}
params.videoParams = {
dimensions:{ // 视频编码的分辨率
width: 1920,
height: 1080
},
frameRate: 15, // 视频编码帧率 (fps)
bitrate: 30 // 视频编码码率 (Kbps)
}
UTSAgoraRtcEngineKit.startScreenCapture(params)
- 停止屏幕采集
UTSAgoraRtcEngineKit.stopScreenCapture()
- setScreenCaptureScenario
//
var scenarioType = 1
UTSAgoraRtcEngineKit.setScreenCaptureScenario(scenarioType)
-
scenarioType 1: (Default) Document. This scenario prioritizes the video quality of screen sharing and reduces the latency of the shared video for the receiver. If you share documents, slides, and tables, you can set this scenario. AgoraScreenScenarioDocument = 1, 2: Game. This scenario prioritizes the smoothness of screen sharing. If you share games, you can set this scenario.
AgoraScreenScenarioGaming = 2, 3: Video. This scenario prioritizes the smoothness of screen sharing. If you share movies or live videos, you can set this scenario.
AgoraScreenScenarioVideo = 3, 4: Remote control. This scenario prioritizes the video quality of screen sharing and reduces the latency of the shared video for the receiver. If you share the device desktop being remotely controlled, you can set this scenario. AgoraScreenScenarioRDC = 4,
- 加入频道后更新频道媒体选项。
// params参考joinChannel的mediaOptions节点参数
var params = {}
params.clientRoleType = 1
params.publishCameraTrack = true
params.publishMicrophoneTrack = true
params.publishScreenCaptureVideo = true
params.publishScreenCaptureAudio = true
UTSAgoraRtcEngineKit.updateChannel(params)
- 更新屏幕采集的参数配置
// params参考startScreenCapture的参数
var params = {}
UTSAgoraRtcEngineKit.updateScreenCapture(params)
- 取消或恢复订阅指定远端用户的音频流
var uid = 0 // 指定用户的用户 ID。
var mute = true // 是否取消订阅指定远端用户的音频流
UTSAgoraRtcEngineKit.muteRemoteAudioStream(uid, mute)
- 取消或恢复订阅指定远端用户的视频流
var uid = 0 // 指定用户的用户 ID。
var mute = true // 是否取消订阅指定远端用户的视频流
UTSAgoraRtcEngineKit.muteRemoteVideoStream(uid, mute)
- prepareSystemBroadcaster
UTSAgoraRtcEngineKit.prepareSystemBroadcaster({
frame: {
x: 0,
y: 0,
width: 60,
height: 60
},
showsMicrophoneButton: false,
preferredExtension: "com.robustel.shengwang.screenshare"
})
- 销毁 AgoraRtcEngineKit 对象。
UTSAgoraRtcEngineKit.destroy()
- 开关本地音频采集
var enabled = true
UTSAgoraRtcEngineKit.enableLocalAudio(enabled)
- 开关本地视频采集
var enabled = true
UTSAgoraRtcEngineKit.enableLocalVideo(enabled)
- 开启或关闭扬声器播放
var enabled = true
UTSAgoraRtcEngineKit.setEnableSpeakerphone(enabled)
- 切换前置/后置摄像头
UTSAgoraRtcEngineKit.switchCamera()
- 检测设备是否支持闪光灯常开
var support = UTSAgoraRtcEngineKit.isCameraTorchSupported()
- 切换前置/后置摄像头
var isOn = true
UTSAgoraRtcEngineKit.setCameraTorchOn(isOn)
- 查询当前摄像头是否支持曝光调节
var support = UTSAgoraRtcEngineKit.isCameraExposureSupported()
- 设置当前摄像头的曝光系数
var exposureFactor = 0.5
UTSAgoraRtcEngineKit.setCameraExposureFactor(exposureFactor)
- 获取摄像头支持最大缩放比例。
var value = UTSAgoraRtcEngineKit.cameraMaxZoomFactor()
- 检测设备是否支持摄像头缩放功能
var support = UTSAgoraRtcEngineKit.isCameraZoomSupported()
- 设置摄像头缩放比例
var zoomFactor = 0.5
UTSAgoraRtcEngineKit.setCameraZoomFactor(zoomFactor)
- 检测设备是否支持手动对焦功能。
var support = UTSAgoraRtcEngineKit.isCameraFocusPositionInPreviewSupported()
- 设置手动对焦位置,并触发对焦
var x = 15
var yy = 16
UTSAgoraRtcEngineKit.setCameraFocusPositionInPreview(x, y)
- 设置频道场景
var profile = 0
UTSAgoraRtcEngineKit.setChannelProfile(profile)
- profile AgoraChannelProfileCommunication 0: 通信场景。声网推荐使用直播场景以获取更好的音视频体验。 AgoraChannelProfileLiveBroadcasting 1:(默认)直播场景。 AgoraChannelProfileGame 2: (已废弃)游戏场景。
- 取消或恢复发布本地视频流。
var mute = true
UTSAgoraRtcEngineKit.muteLocalVideoStream(mute)
- 取消或恢复订阅所有远端用户的音频流
var mute = true
UTSAgoraRtcEngineKit.muteAllRemoteAudioStreams(mute)
- 取消或恢复订阅所有远端用户的视频流。
var mute = true
UTSAgoraRtcEngineKit.muteAllRemoteVideoStreams(mute)
- 设置音频编码属性
var profile = 0
UTSAgoraRtcEngineKit.setAudioProfile(mute)
- profile AgoraAudioProfileDefault 0: 默认值。 直播场景下:48 kHz 采样率,音乐编码,单声道,编码码率最大值为 64 Kbps。 通信场景下:32 kHz 采样率,语音编码,单声道,编码码率最大值为 18 Kbps。 AgoraAudioProfileSpeechStandard 1: 指定 32 kHz 采样率,语音编码,单声道,编码码率最大值为 18 Kbps。 AgoraAudioProfileMusicStandard 2: 指定 48 kHz 采样率,音乐编码,单声道,编码码率最大值为 64 Kbps。 AgoraAudioProfileMusicStandardStereo 3: 指定 48 kHz 采样率,音乐编码,双声道,编码码率最大值为 80 Kbps。 如需实现立体声,你还需要调用 setAdvancedAudioOptions 并在 AgoraAdvancedAudioOptions 中设置 audioProcessingChannels 为 AgoraAudioProcessChannelsStereo。
AgoraAudioProfileMusicHighQuality 4: 指定 48 kHz 采样率,音乐编码,单声道,编码码率最大值为 96 Kbps。 AgoraAudioProfileMusicHighQualityStereo 5: 指定 48 kHz 采样率,音乐编码,双声道,编码码率最大值为 128 Kbps。 如需实现立体声,你还需要调用 setAdvancedAudioOptions 并在 AgoraAdvancedAudioOptions 中设置 audioProcessingChannels 为 AgoraAudioProcessChannelsStereo。
AgoraAudioProfileIot 6: 指定 16 kHz 采样率,语音编码,单声道,应用回声消除算法 AES。
- 调节本地播放的所有远端用户信号音量。
var volume = 10 // 音量,取值范围为 [0,400]。
UTSAgoraRtcEngineKit.adjustPlaybackSignalVolume(volume)
- 更新本地视图显示模式
var renderMode = 0
var mirrorMode = 0
UTSAgoraRtcEngineKit.setLocalRenderMode(renderMode, mirrorMode)
-
renderMode AgoraVideoRenderModeHidden 1: 视频尺寸等比缩放。优先保证视窗被填满。因视频尺寸与显示视窗尺寸不一致而多出的视频将被截掉。 AgoraVideoRenderModeFit 2: 视频尺寸等比缩放。优先保证视频内容全部显示。因视频尺寸与显示视窗尺寸不一致造成的视窗未被填满的区域填充黑色。
-
mirrorMode AgoraVideoMirrorModeAuto 0:由 SDK 决定镜像模式。 本地视图镜像模式:如果你使用前置摄像头,默认启动本地视图镜像模式;如果你使用后置摄像头,默认关闭本地视图镜像模式。 远端用户视图镜像模式:默认关闭远端用户的镜像模式。 AgoraVideoMirrorModeEnabled 1:启用镜像模式。 AgoraVideoMirrorModeDisabled 2:关闭镜像模式。
- 检测设备是否支持人脸对焦功能
var support = UTSAgoraRtcEngineKit.isCameraAutoFocusFaceModeSupported()
- 设置是否开启人脸对焦功能
var enable = true
UTSAgoraRtcEngineKit.setCameraAutoFocusFaceModeEnabled(enable)
- 启用用户音量提示
var interval = 2 // 指定音量提示的时间间隔
var smooth = 2 // 平滑系数,指定音量提示的灵敏度。取值范围为 [0,10],建议值为 3。数字越大,波动越灵敏;数字越小,波动越平滑。
var reportVad = true // YES:开启本地人声检测功能。开启后,reportAudioVolumeIndicationOfSpeakers 回调的 vad 参数会报告是否在本地检测到人声。
NO:(默认)关闭本地人声检测功能。除引擎自动进行本地人声检测的场景外,reportAudioVolumeIndicationOfSpeakers 回调的 vad 参数不会报告是否在本地检测到人声。
UTSAgoraRtcEngineKit.enableAudioVolumeIndication(interval, smooth, reportVad)
- 使用连接 ID 加入频道
var params = {}
params.token = "xxx"
params.connection = {
channelId: "xx",
localUid: 0
}
params.mediaOptions = { // 参考joinChannel接口参数的mediaOptions节点
}
let resp = UTSAgoraRtcEngineKit.joinChannelEx(params, (resp)=>{
// 事件回调
}, (resp)=>{
// 加入成功回调
})
- 离开频道
var params = {
channelId: "xx",
localUid: 0
}
UTSAgoraRtcEngineKit.leaveChannelEx(params, (resp)=>{
})
- 加入频道后更新频道媒体选项
var params = {}
params.connection = { // 参考joinChannelEx接口参数的connection节点
}
params.mediaOptions = { // 参考joinChannelEx接口参数的mediaOptions节点
}
UTSAgoraRtcEngineKit.updateChannelEx(params)
- 调节本地播放的指定远端用户信号音量
var uid = 0
var volume = 20
var connection = {} // 参考joinChannelEx接口参数的connection节点
UTSAgoraRtcEngineKit.adjustUserPlaybackSignalVolumeEx(uid, volume, connection)
- 取消或恢复订阅所有远端用户的音频流。
var mute = true
var connection = {} // 参考joinChannelEx接口参数的connection节点
UTSAgoraRtcEngineKit.muteAllRemoteAudioStreamsEx(mute, connection)
- 取消或恢复订阅所有远端用户的视频流
var mute = true
var connection = {} // 参考joinChannelEx接口参数的connection节点
UTSAgoraRtcEngineKit.muteAllRemoteVideoStreamsEx(mute, connection)
- 取消或恢复发布本地视频流
var mute = true
var connection = {} // 参考joinChannelEx接口参数的connection节点
UTSAgoraRtcEngineKit.muteLocalVideoStreamEx(mute, connection)
- 停止/恢复接收指定的音频流。
var uid = 0
var mute = true
var connection = {} // 参考joinChannelEx接口参数的connection节点
UTSAgoraRtcEngineKit.muteRemoteAudioStreamEx(uid, mute, connection)
- 停止/恢复接收指定的视频流。
var uid = 0
var mute = true
var connection = {} // 参考joinChannelEx接口参数的connection节点
UTSAgoraRtcEngineKit.muteRemoteVideoStreamEx(uid, mute, connection)
- 设置远端视图显示模式
var renderMode= 0// 参考setLocalRenderMode接口
var mirrorMode= 0 // 参考setLocalRenderMode接口
var connection = {} // 参考joinChannelEx接口参数的connection节点
UTSAgoraRtcEngineKit.setRemoteRenderModeEx(renderMode, mirrorMode, connection)
- 开启视频预览并指定预览的视频源。
var sourceType = 0
UTSAgoraRtcEngineKit.startPreviewWithSourceType(sourceType)
-
sourceType VIDEO_SOURCE_CAMERA_PRIMARY 0:(默认)视频源为第一个摄像头。 VIDEO_SOURCE_CAMERA_SECONDARY 1:视频源为第二个摄像头。 VIDEO_SOURCE_SCREEN_PRIMARY 2:视频源为第一个屏幕。 VIDEO_SOURCE_SCREEN_SECONDARY 3:视频源为第二个屏幕。 VIDEO_SOURCE_CUSTOM 4:自定义的视频源。 VIDEO_SOURCE_MEDIA_PLAYER 5:视频源为媒体播放器。 VIDEO_SOURCE_RTC_IMAGE_PNG 6:视频源为 PNG 图片。 VIDEO_SOURCE_RTC_IMAGE_JPEG 7:视频源为 JPEG 图片。 VIDEO_SOURCE_RTC_IMAGE_GIF 8:视频源为 GIF 图片。 VIDEO_SOURCE_REMOTE 9:视频源为网络获取的远端视频。 VIDEO_SOURCE_TRANSCODED 10:转码后的视频源。 VIDEO_SOURCE_UNKNOWN 100:未知的视频源。
-
设置音频类型,仅支持iOS
// 支持ambient、soloAmbient、playback、record、playAndRecord、audioProcessing、multiRoute
let category = "playAndRecord"
UTSAVAudioSession.setCategory(category)