##音频、基础类
##视频类
为帮助用户更好更快的使用插件,论坛维护了一个示例,示例中包含示例代码供您参考。
声网, Agora。一个专注移动端的高清实时通话云服务解决方案的服务商。
声网团队90%都是技术人员。除了赵斌,联合创始人还包括YY前技术委员会执行主席;团队中还有由IEEE DSP 特邀编辑领衔的音视频算法团队。整个团队拥有超过 20 年的 VoIP 技术积累,有年服务 4000 亿分钟语音通话的经验。
声网在全球部署了近百个数据中心和近千台服务器,能够保障跨大洲、跨国家、跨运营商网络的实时数据传输质量。团队很有自信地宣称,在语音通话的质量上,他们有信心打败最有竞争力的技术对手,哪怕在硅谷。 由于是 To B 的云服务,声网的盈利模式也相对简单。声网面向企业收费,标准是每 1000分钟0.99美元,国内海外统一。这个基于规模效益的定价贴近于目前产品的成本价格,远低于客户自己运营维护这类服务的成本。 目前声网已经和国内许多产品在接洽合作,但团队没有透露具体已达成的合作。在国外,由于声网的海外版上线更早,已经有合作一段时间的产品了,比如针对“语言技能交换”的语音社交应用 HelloTalk。
超便宜,每分钟0.00099 美元起。
超简单接入,30 分钟出 Demo。
多平台,Native 和 Web 互通。
1,实时通信 API 7x24 质量保证,新型实时传输网 SD-RTN,连接全球 200 多个国家和地区,无论何地,都能享受高质量的实时通话。为开发者提供保障 7x24 高质量的跨国跨网通话服务,无论你的用户身处何时何地,都能享受高质量的实时通话
2,整套 API 灵活调用。一个 SDK 一套 API ,实现音视频通话、多人连麦全互动直播。创建频道、录制、白板、屏幕共享等均有独立接口
3,通话质量数据实时监控。 ·通话质量数据 ·终端用户分布地区 ·通话设备平台分布 ·网络状况分布
4,全网 256 加密,美国 HIPAA 安全认证。 ·全网采用 256 加密,数据传输绝对安全 ·符合美国最严格 HIPAA 加密安全认证,医疗和多行业适用 ·提供加密 API,可行业定制加密
小米,陌陌,talkSpace,TAL好未来,途牛,春雨国际,海尔,LeVR
agoraVideo 封装了声网直播的开放 SDK。声网直播功能强大。使用本插件前,需先到声网官方网站注册申请开发者账号,然后创建 app 获取 app id 等相关信息。本插件为收费插件,插件是对声网直播 SDK 的一层封装,以方便 YonBuilder移动开发 平台上的开发者,能迅速的集成声网直播功能。插件内涉及到的功能,以及产生的费用都是与声网之间的行为,与本插件及其开发者无关。插件开发者会定期维护更新优化升级该插件。
本插件分为两部分:
1,音频直播类:使用此类接口无需关心 UI 界面层,只需按照声网的规范要求设计自己的代码逻辑即可。
2,视频直播类:该类接口的 initVideoRect 相当于 open 了一个 frame。开发者可将直播视频区域当成一个 frame 层添加到 windows 上。然后自己再按照 UI 设计需求结合其它功能接口自定义一个功能 frame 层添加到视频层(插件层)上,以实现直播的功能。
注意:
1.在 iOS 平台上最低适配版本为 iOS8.0,应用打包时需在右上角高级设置里将固件要求自定义最低适配版本号为8.0;
2.本次更新的SDK为1.14 版: 发布于 2017 年 10 月 20 日
3.新功能:
4.目前暂时不支持 iPhone 8 上使用蓝牙耳机。
初始化引擎
init({params}, callback(ret))
appId:
ret:
{
status: //布尔类型;true||false,是否初始化成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.init({
appId:''
}, function(ret) {
if (ret.status) {
alert('初始化成功');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
加入通话频道
joinChannel({params}, callback(ret, err))
channelKey:
channelName:
uid:
ret:
{
status: true, //布尔类型;true||false,是否成功进入通话频道
channel: '123abc', //字符串类型;频道名
uid: 1234, //数字类型;用户id
elapsed: 100 //数字类型;从 joinChannel 开始到该事件产生的延迟(毫秒)
}
err:
{
code: //数字类型;错误码,取值范围如下:
//-2 :传递参数无效
//-3 :初始化失败,或未初始化
//-5 :SDK不能发起通话,可能是因为处于另一个通话中,或者创建频道失败
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.joinChannel({
channelKey: '',
channelName: '**************',
uid:
}, function(ret, err) {
if (ret.status) {
api.alert({msg:JSON.stringify(ret)});
} else {
api.alert({msg:JSON.stringify(err)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
离开通话频道
leaveChannel(callback(ret))
ret:
{
status: true, //布尔类型;true||false,是否成功离开频道
totalDuration: 1000, //数字类型;通话时长(s)
txBytes: 12342546, //数字类型;发送字节数( bytes)
rxBytes: 12343545, //数字类型;接收字节数( bytes)
txKBitRate: 100, //数字类型;发送码率( kbps),iOS 不支持此参数
rxKBitRate: 123, //数字类型;接收码率( kbps),iOS 不支持此参数
cpuTotalUsage: 23, //数字类型;当前系统的 CPU 使用率( %),iOS 不支持此参数
cpuAPPUsage:25 //数字类型;当前应用程序的 CPU 使用率( %),iOS 不支持此参数
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.leaveChannel(function(ret) {
if (ret.status) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
更新 ChannelKey。若已启用 ChannelKey 机制,一段时间后 ChannelKey 会失效。当 errorListener 回调 109 时,重新获取 ChannelKey,需调用本接口更新 ChannelKey,否则无法和服务器建立连接。
renewChannelKey({params}, callback(ret))
channelKey:
ret:
{
status: true //布尔类型;true||false,是否更新成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.renewChannelKey({
channelKey:'*********'
}, function(ret) {
if (ret.status) {
api.alert({msg:'更新成功!'});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
静音/取消静音,该方法可用于允许/禁止往网络发送本地音频流
muteLocalAudioStream({params}, callback(ret))
muted:
ret:
{
status: true //布尔类型;true||false,操作是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.muteLocalAudioStream({
muted: true
}, function(ret) {
if (ret.status) {
api.alert({msg:'操作成功!'});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
静音所有远端用户/对所有远端用户取消静音,本方法用于允许/禁止播放远端用户的音频流。
muteAllRemoteAudioStreams({params}, callback(ret))
muted:
ret:
{
status: true //布尔类型;true||false,操作是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.muteAllRemoteAudioStreams({
muted: true
}, function(ret) {
if (ret.status) {
api.alert({msg:});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
静音指定远端用户/对指定远端用户取消静音,本方法用于允许/禁止播放远端用户的音频流。
muteRemoteAudioStream({params}, callback(ret))
uid:
muted:
ret:
{
status: true //布尔类型;true||false,操作是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.muteRemoteAudioStream({
uid: '*************',
muted: true
}, function(ret) {
if (ret.status) {
alert('操作成功!');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
切换音频输出方式(扬声器、听筒)
setEnableSpeakerphone({params}, callback(ret))
enabled:
ret:
{
status: true //布尔类型;true||false,是否切换成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setEnableSpeakerphone({
enabled: true
}, function(ret) {
if (ret.status) {
alert('切换成功!');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
判断当前设备是否是扬声器状态
isSpeakerphoneEnabled(callback(ret))
ret:
{
status: true //布尔类型;true||false,是否为扬声器状态
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.isSpeakerphoneEnabled(function(ret) {
if (ret.status) {
alert('扬声器');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设定扬声器音量
setSpeakerphoneVolume({params}, callback(ret))
volume:
ret:
{
status: //布尔类型;true||false,是否设置成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setSpeakerphoneVolume({
volume : '10'
},function(ret) {
if (ret.status) {
alert('设置成功');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
在通话中进行录音,该接口需要在 joinChannel 之后调用。leaveChannel 时会自动停止录音
startAudioRecording({params}, callback(ret))
filePath:
ret:
{
status: true, //布尔类型;true||false,录音是否成功
realPath: '' //字符串类型;录制音频文件绝对路径
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.startAudioRecording({
filePath: 'fs://agoraVideo/audio.wav'
}, function(ret) {
if (ret.status) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
停止录音
stopAudioRecording({params}, callback(ret))
ret:
{
status: true //布尔类型;true||false,录音是否成功停止
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.stopAudioRecording(function(ret) {
if (ret.status) {
alert('停止录音');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
获取当前的通话 ID
getCallId({params}, callback(ret))
ret:
{
status: true, //布尔类型;true||false,是否获取成功
callId: 124325 //字符串类型;本次通话 ID
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.getCallId(function(ret) {
if (ret.status) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
通话结束后为本次通话评分
rate({params}, callback(ret))
callId:
rating:
description:
ret:
{
status:true //布尔类型;true||false,是否评分成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.rate({
callId: '4624625624',
rating: 5,
description : '很好很强大'
}, function(ret) {
if (ret.status) {
alert('评分成功');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
通话结束后对本次通话质量的投诉
complain({params}, callback(ret))
callId:
description:
ret:
{
status: true //布尔类型;true||false,是否投诉成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.complain({
callId: '24523452345',
description : '有杂音'
},function(ret) {
if (ret.status) {
alert('投诉成功!');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
监听耳机插拔事件,在加入通话前调用。若不监听,则拔掉耳机时不会自动停止播放声音。iOS 不支持本接口,拔掉耳机即自动停止声音外放
monitorHeadsetEvent({params})
monitor:
var agoraVideo = api.require('agoraVideo');
agoraVideo.monitorHeadsetEvent({
monitor: true
});
Android系统
可提供的1.0.0及更高版本
监听蓝牙耳机事件,在加入通话前调用。iOS 不支持本接口,拔掉耳机即自动停止声音外放
monitorBluetoothHeadsetEvent({params})
monitor:
var agoraVideo = api.require('agoraVideo');
agoraVideo.monitorBluetoothHeadsetEvent({
monitor: true
});
Android系统
可提供的1.0.0及更高版本
设置插入耳机时的音频输出设备优先级,需在通话前调用,iOS 不支持本接口
setPreferHeadset({params})
enabled:
var agoraVideo = api.require('agoraVideo');
agoraVideo.setPreferHeadset({
monitor: true
});
Android系统
可提供的1.0.0及更高版本
启用说话者音量提示
enableAudioVolumeIndication({params}, callback(ret))
interval:
smooth:
ret:
{
status: true //布尔类型;true||false,是否设置成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.enableAudioVolumeIndication({
interval: '200',
smooth: 3
}, function(ret) {
if (ret.status) {
alert('设置成功');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
启用内置的加密功能。
在加入频道之前,应用程序需调用本接口指定 secret 来启用内置的加密功能。
同一频道内的所有用户应设置相同的 secret。
当用户离开频道时,该频道的 secret 会自动清除。
如果未指定 secret 或将 secret 设置为空,则无法激活加密功能。
默认 AES-128-XTS 加密方式,若修改加密方式请调用 setEncryptionMode 接口。
setEncryptionSecret({params}, callback(ret))
secret:
ret:
{
status: true //布尔类型;true||false,是否设置成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setEncryptionSecret({
secret : '123456789'
}, function(ret) {
if (ret.status) {
alert('设置成功');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置内置的加密方案。
Agora 支持内置加密功能,默认使用 AES-128-XTS 加密方式。
通过本接口可设置使用其他加密方式。
同一频道内的所有用户必须设置相同的加密方式和 secret 才能进行通话。
setEncryptionMode({params}, callback(ret))
encryptionMode:
ret:
{
status: true //布尔类型;true||false,是否设置成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setEncryptionMode({
encryptionMode: 'aes-256-xts'
}, function(ret) {
if (ret.status) {
alert('设置成功');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
启动服务端录音功能
startRecordingService({params}, callback(ret))
recordingKey:
ret:
{
status: true //布尔类型;true||false,是否启动成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.startRecordingService({
recordingKey : '123456'
},function(ret) {
if (ret.status) {
alert('启动成功');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
停止服务端录音功能
stopRecordingService({params}, callback(ret))
recordingKey:
ret:
{
status: true //布尔类型;true||false,是否停止成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.stopRecordingService({
recordingKey : '123456'
},function(ret) {
if (ret.status) {
alert('停止成功');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置频道通话模式。 Agora 引擎需知道应用程序的使用场景(例如群聊模式或主播模式),从而使用不同的优化手段。
setChannelProfile({params}, callback(ret))
profile:
ret:
{
status: true //布尔类型;true||false,是否设置成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setChannelProfile({
profile : 'communication'
}, function(ret) {
if (ret.status) {
alert('设置成功');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
开启客户端本地混音。指定本地音频文件来和麦克风采集的音频流进行混音和替换(用音频文件替换麦克风采集的音频流),可以通过参数选择是否让对方听到本地播放的音频和指定循环播放的次数。 注:如需使用 startAudioMixing API,要求 Android 4.2 或以上设备,且 API Level>=16
startAudioMixing({params}, callback(ret))
filePath:
loopback:
replace:
cycle:
ret:
{
status: true //布尔类型;true||false,是否设置成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.startAudioMixing({
filePath: 'fs://test.mp3',
loopback: false,
replace: false,
cycle: -1
}, function(ret) {
if (ret.status) {
alert('设置成功');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
停止客户端本地混音
stopAudioMixing(callback(ret))
ret:
{
status: true //布尔类型;true||false,是否停止成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.stopAudioMixing(function(ret) {
if (ret.status) {
alert('操作成功');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
特有属性设置
setParameters({params},callback(ret))
options:
ret:
{
status: true //布尔类型;true||false,是否设置成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setParameters({
options: ''
}, function(ret) {
if (ret.status) {
alert('设置成功');
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
获取 Agora 引擎特有属性值
getParameters({params},callback(ret))
parameter:
args:
ret:
{
status: true, //布尔类型;true||false,是否获取成功
result: '' //字符串类型;获取的参数
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.getParameters(function(ret) {
if (ret.status) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
监听警告信息
warningListener({params}, callback(ret))
enable:
ret:
{
errCode: 20 //数字类型;错误码,取值范围如下:
//20:AgoraRtc_Warn_Pending
//103:AgoraRtc_Warn_NoAvailableChannel
//104:AgoraRtc_Warn_LookupChannelTimeout
//105:AgoraRtc_Warn_LookupChannelRejected
//106:AgoraRtc_Warn_OpenChannelTimeout
//107:AgoraRtc_Warn_OpenChannelRejected
//1014:AgoraRtc_Warn_Adm_RuntimePlayoutWarning
//1016:AgoraRtc_Warn_Adm_RuntimeRecordingWarning
//1019:AgoraRtc_Warn_Adm_RecordAudioSilence
//1020:AgoraRtc_Warn_Adm_PlaybackMalfunction
//1021:AgoraRtc_Warn_Adm_RecordMalfunction
//1025:AgoraRtc_Warn_Adm_Interruption
//1026:AgoraRtc_Warn_Adm_RouteChange
//1051:AgoraRtc_Warn_Apm_Howling
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.warningListener({
enable:true
},function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本
监听错误信息
errorListener({params}, callback(ret))
enable:
ret:
{
errCode: 101 //数字类型;取值范围如下:
// 101:无效的 App ID
// 102:无效的频道名
// 105:查找频道失败,意味着服务器主动拒绝了请求
// 107:加入频道失败,意味着媒体服务器主动拒绝了请求
// 1001:加载媒体引擎失败
// 1002:打开本地音视频设备、启动通话失败
// 1003:打开本地摄像头失败
//以下是 iOS 平台上错误码
//0:AgoraRtc_Error_NoError
//1:AgoraRtc_Error_Failed
//2:AgoraRtc_Error_InvalidArgument
//3:AgoraRtc_Error_NotReady
//4:AgoraRtc_Error_NotSupported
//5:AgoraRtc_Error_Refused
//6:AgoraRtc_Error_BufferTooSmall
//7:AgoraRtc_Error_NotInitialized
//8:AgoraRtc_Error_InvalidView
//9:AgoraRtc_Error_NoPermission
//10:AgoraRtc_Error_TimedOut
//11:AgoraRtc_Error_Canceled
//12:AgoraRtc_Error_TooOften
//13:AgoraRtc_Error_BindSocket
//14:AgoraRtc_Error_NetDown
//15:AgoraRtc_Error_NoBufs
//16:AgoraRtc_Error_InitVideo
//17:AgoraRtc_Error_JoinChannelRejected
//18:AgoraRtc_Error_LeaveChannelRejected
//19:AgoraRtc_Error_AlreadyInUse
//101:AgoraRtc_Error_InvalidAppId
//102:AgoraRtc_Error_InvalidChannelName
//109:AgoraRtc_Error_ChannelKeyExpired
//110:AgoraRtc_Error_InvalidChannelKey
//111:AgoraRtc_Error_ConnectionInterrupted
//112:AgoraRtc_Error_ConnectionLost
//113:AgoraRtc_Error_NotInChannel
//114:AgoraRtc_Error_SizeTooLarge
//115:AgoraRtc_Error_BitrateLimit
//116:AgoraRtc_Error_TooManyDataStreams
//120:AgoraRtc_Error_DecryptionFailed
//1001:AgoraRtc_Error_LoadMediaEngine
//1002:AgoraRtc_Error_StartCall
//1003:AgoraRtc_Error_StartCamera
//1004:AgoraRtc_Error_StartVideoRender
//1005:AgoraRtc_Error_Adm_GeneralError
//1006:AgoraRtc_Error_Adm_JavaResource
//1007:AgoraRtc_Error_Adm_SampleRate
//1008:AgoraRtc_Error_Adm_InitPlayout
//1009:AgoraRtc_Error_Adm_StartPlayout
//1010:AgoraRtc_Error_Adm_StopPlayout
//1011:AgoraRtc_Error_Adm_InitRecording
//1012:AgoraRtc_Error_Adm_StartRecording
//1013:AgoraRtc_Error_Adm_StopRecording
//1015:AgoraRtc_Error_Adm_RuntimePlayoutError
//1017:AgoraRtc_Error_Adm_RuntimeRecordingError
//1018:AgoraRtc_Error_Adm_RecordAudioFailed
//1020:AgoraRtc_Error_Adm_Play_Abnormal_Frequency
//1021:AgoraRtc_Error_Adm_Record_Abnormal_Frequency
//1022:AgoraRtc_Error_Adm_Init_Loopback
//1023:AgoraRtc_Error_Adm_Start_Loopback
//1501:AgoraRtc_Error_Vdm_Camera_Not_Authorized
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.errorListener({
enable:true
}, function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本
声音质量监听
audioQualityListener({params}, callback(ret))
enable:
ret:
{
uid: 123, //数字类型;说话方的用户 ID
quality:0, //数字类型;语音质量评分,取值范围如下:
//0:AgoraRtc_Quality_Unknown
//1:QUALITY_EXCELLENT
//2:QUALITY_GOOD
//3:QUALITY_POOR
//4:QUALITY_BAD
//5:QUALITY_VBAD
//6:QUALITY_DOWN
delay:25, //数字类型;延迟(毫秒)
lost:10 //数字类型;丢包率(百分比)
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.audioQualityListener({
enable: true
},function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本
声音音量监听
audioVolumeListener({params}, callback(ret))
enable:
ret:
{
speakers:[{ //JSON 对象;说话的用户数组
uid: 123, //数字类型;说话者的用户 ID
volume: 100 //数字类型;说话者的音量( 0~255)
}],
totalVolume:44 //数字类型;(混音后的)总音量( 0~255)
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.audioVolumeListener({
enable: true
}, function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本
用户加入频道监听
userJoinedListener({params}, callback(ret))
enable:
ret:
{
uid: 1234, //数字类型;用户 ID
elapsed: 23 //数字类型;joinChannel 开始到该回调触发的延迟(毫秒)
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.userJoinedListener({
enable: true
},function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本
再次进入频道监听。
有时候由于网络原因,客户端可能会和服务器失去连接, SDK 会进行自动重连,自动重连成功后触发此监听
rejoinChannelListener({params}, callback(ret))
enable:
ret:
{
status: true, //布尔类型;是否网络链接中断
channel: 'apicloud',//字符串类型;频道名
uid: 1233444, //数字类型;用户id
elapsed:100 //数字类型;从 joinChannel 开始到该事件产生的延迟(毫秒)
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.rejoinChannelListener({
enable: true
}, function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本
用户离开频道监听
userOfflineListener({params}, callback(ret))
enable:
ret:
{
uid: 1234, //数字类型;用户 ID
reason: 0, //数字类型;离线原因,取值范围如下:
//0:用户主动离开
//1:因过长时间收不到对方数据包,超时掉线。注意:由于 SDK 使用的是不可靠通道,也有可能对方主动离开本方没收到对方离开消息而误判为超时掉线
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.userOfflineListener({
enable: true
}, function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本
用户静音监听
userMuteAudioListener({params}, callback(ret))
enable:
ret:
{
uid:1234, //数字类型;用户 ID
muted: true //布尔类型;为 true 表示该用户将音频静音,反之则该用户取消了音 频静音
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.userMuteAudioListener({
enable: true
}, function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本
统计数据监听,每两秒触发一次
rtcStatsListener({params}, callback(ret))
enable:
ret:
{
totalDuration: 34, //数字类型;通话时长(秒)
txBytes: 900, //数字类型;发送字节数( bytes)
rxBytes: 900, //数字类型;接收字节数( bytes)
txKBitRate: 78, //数字类型;发送码率( kbps),iOS 平台不支持
rxKBitRate: 56, //数字类型;接收码率( kbps),iOS 平台不支持
cpuTotalUsage: 23, //数字类型;当前系统的 CPU 使用率( %),iOS 平台不支持
cpuAPPUsage: 34, //数字类型;当前应用程序的 CPU 使用率( %),iOS 平台不支持
users: 134 //数字类型;当前频道内人数
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.rtcStatsListener({
enable: true
}, function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本
报告网络质量监听。不在通话中时,不定期触发,向应用程序上报当前网络连接质量
lastmileQualityListener({params}, callback(ret))
enable:
ret:
{
quality:1 //数字类型;语音质量评分,取值范围如下:
//1:QUALITY_EXCELLENT
//2:QUALITY_GOOD
//3:QUALITY_POOR
//4:QUALITY_BAD
//5:QUALITY_VBAD
//6:QUALITY_DOWN
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.lastmileQualityListener({
enable: true
},function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本
网络连接中断监听。iOS 平台不支持本接口
connectionInterruptedListener({params}, callback(ret))
enable:
ret:
{
status: true //布尔类型;是否网络链接中断
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.connectionInterruptedListener({
enable: true
},function(ret) {
alert(JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
网络连接丢失监听。客户端和服务器失去了网络连接,并且尝试自动重连一段时间(默认 10 秒) 后仍未连上。iOS 平台不支持本接口
connectionLostListener({params}, callback(ret))
enable:
ret:
{
status:true //布尔类型;是否网络链接中断
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.connectionLostListener({
enable : true
}, function(ret) {
alert(JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
网络质量监听
networkQualityListener({params}, callback(ret))
enable:
ret:
{
uid: 123, //数字类型;网络质量监听用户id:
txQuality: 0, //数字类型;发送网络质量,取值范围如下:
//0:AgoraRtc_Quality_Unknown
//1:QUALITY_EXCELLENT
//2:QUALITY_GOOD
//3:QUALITY_POOR
//4:QUALITY_BAD
//5:QUALITY_VBAD
//6:QUALITY_DOWN
rxQuality: 0 //数字类型;接受网络质量,取值范围如下:
//0:AgoraRtc_Quality_Unknown
//1:QUALITY_EXCELLENT
//2:QUALITY_GOOD
//3:QUALITY_POOR
//4:QUALITY_BAD
//5:QUALITY_VBAD
//6:QUALITY_DOWN
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.lastmileQualityListener({
enable: true
}, function(ret) {
api.alert({msg:JSON.stringify(ret)});
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置 agora 引擎的输出 log 文件。
引擎运行时产生的所有 log 将写入该文件。
应用程序必须保证指定的目录存在而且可写。
setLogFile({params}, callback(ret))
filePath:
ret:
{
status: true, //布尔类型;true||false,是否设置成功
realPath: '' //字符串类型;日志文件绝对路径
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setLogFile({
filePath: 'fs://log.txt'
}, function(ret) {
if (ret.status) {
api.alert({msg:JSON.stringify(ret)});
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
初始化视频(本地、远程)区域
initVideoRect({params})
uid:
rect:
{
x: 0, //(可选项)数字类型;视频区域左上角的 x 坐标(相对于所属的 Window 或 Frame);默认:0
y: 0, //(可选项)数字类型;视频区域左上角的 y 坐标(相对于所属的 Window 或 Frame);默认:0
w: 320, //(可选项)数字类型;视频区域的宽度;默认:屏幕的宽
h: 480 //(可选项)数字类型;视频区域的高度;默认:屏幕的高
}
fixedOn:
fixed:
var agoraVideo = api.require('agoraVideo');
agoraVideo.initVideoRect({
uid:123456,
rect: {
x: 0,
y: 0,
w: 320,
h: 300
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
该方法用于开启视频模式。可以在加入频道前或者通话中调用,在加入频道前调用,则自动开 启视频模式,在通话中调用则由音频模式切换为视频模式。调用 disablevideo 方法可关闭视 频模式
enableVideo(callback(ret))
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.enableVideo( function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
该方法用于关闭视频,开启纯音频模式。可以在加入频道前或者通话中调用,在加入频道前调 用,则自动开启纯音频模式,在通话中调用则由视频模式切换为纯音频频模式。调用enablevideo 方法可开启视频模式
disableVideo(callback(ret))
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.disableVideo(function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
该方法用于启动本地视频预览。在开启预览前,必须先调用 setupLocalVideo 设置预览窗口及 属性,且必须调用 enableVideo 开启视频功能。如果在调用 joinChannel 进入频道之前调用了 startPreview 启动本地视频预览,在调用 leaveChannel 退出频道之后本地预览仍然处于启动 状态,如需要关闭本地预览,需要调用 stopPreview
startPreview(callback(ret))
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.startPreview(function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
该方法用于停止本地视频预览
stopPreview(callback(ret))
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.stopPreview(function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
该方法设置视频编码属性(Profile)。每个属性对应一套视频参数,如分辨率、帧率、码率等。 当设备的摄像头不支持指定的分辨率时, SDK 会自动选择一个合适的摄像头分辨率,但是编 码分辨率仍然用 setVideoProfile 指定的
setVideoProfile({params},callback(ret))
profile:
swapWidthAndHeight:
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setVideoProfile( {
profile:'120P',
swapWidthAndHeight:true
},function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
该方法设置本地视频显示信息,通常在初始化后调用该方法进行本地视频设置,然后再加入频道。
setupLocalVideo({params},callback(ret))
renderMode:
uid:
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setupLocalVideo( {
renderMode:'RENDER_MODE_HIDDEN'
},function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
该方法绑定远程用户和显示视图,即设定 uid 指定的用户用哪个视图显示。调用该接口时需要 指定远程视频的 uid
setupRemoteVideo({params},callback(ret))
renderMode:
uid:
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setupRemoteVideo( {
renderMode:'RENDER_MODE_HIDDEN',
uid:1
},function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
该方法用于在前置/后置摄像头间切换
switchCamera({params},callback(ret))
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.switchCamera(function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
禁用/启用本地视频功能。该方法用于只看不发的视频场景。该方法不需要本地有摄像头
enableLocalVideo({params},callback(ret))
enabled:
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.enableLocalVideo( {
enabled:true
},function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
暂停/恢复发送本地视频流。该方法用于允许/禁止往网络发送本地视频流
muteLocalVideoStream({params},callback(ret))
muted:
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.muteLocalVideoStream( {
muted:true
},function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
暂停/恢复所有人视频流。本方法用于允许/禁止播放所有人的视频流
muteAllRemoteVideoStreams({params},callback(ret))
muted:
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.muteAllRemoteVideoStreams( {
muted:true
},function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
暂停/恢复指定远端视频流。本方法用于允许/禁止播放指定远端视频流。
muteRemoteVideoStream({params},callback(ret))
uid:
muted:
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.muteRemoteVideoStream( {
uid:'1,
muted:true
},function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
提示第一帧本地视频画面已经显示在屏幕上
firstLocalVideoFrameListener({params}, callback(ret))
enable:
ret:
{
width: //数字类型;视频流宽(像素)
height: //数字类型;视频流高(像素)
elapsed: //数字类型;加入频道开始到该回调触发的延迟(毫秒)
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.firstLocalVideoFrameListener({
enable : true
},function(ret) {
alert(JSON.stringify(ret));
});
iOS系统,Android系统
可提供的1.0.0及更高版本
第一帧远程视频显示在视图回调监听
firstRemoteVideoFrameListener({params}, callback(ret))
enable:
ret:
{
uid: //数字类型;用户id
width: //数字类型;视频流宽(像素)
height: //数字类型;视频流高(像素)
elapsed: //数字类型;加入频道开始到该回调触发的延迟(毫秒)
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.firstRemoteVideoFrameListener({
enable : true
},function(ret) {
alert(JSON.stringify(ret));
});
iOS系统,Android系统
可提供的1.0.0及更高版本
远端视频接收解码回调,收到第一帧远程视频流并解码成功时,触发此调用
firstRemoteVideoDecodedListener({params}, callback(ret))
enable:
ret:
{
uid: //数字类型;用户id
width: //数字类型;视频流宽(像素)
height: //数字类型;视频流高(像素)
elapsed: //数字类型;加入频道开始到该回调触发的延迟(毫秒)
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.firstRemoteVideoDecodedListener({
enable : true
},function(ret) {
alert(JSON.stringify(ret));
});
iOS系统,Android系统
可提供的1.0.0及更高版本
其他用户停止/重启视频回调,iOS 暂不支持本接口
userMuteVideoListener({params}, callback(ret))
enable:
ret:
{
uid: //数字类型;用户id
muted: //数字类型;True:该用户暂停了视频发送,False:该用户恢复了视频发送
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.userMuteVideoListener({
enable : true
},function(ret) {
alert(JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
其他用户启用/关闭视频回调,iOS 暂不支持本接口
userEnableVideoListener({params}, callback(ret))
enable:
ret:
{
uid: //数字类型;用户id
muted: //数字类型;True:该用户启用了视频功能,False:该用户关闭了视频功能
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.userEnableVideoListener({
enable : true
},function(ret) {
alert(JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
本地视频统计回调,报告更新本地视频统计信息,该回调函数每两秒触发一次
localVideoStatListener({params}, callback(ret))
enable:
ret:
{
sentBitrate: //数字类型;(上次统计后)发送的码率(kbps)
sentFrameRate: //数字类型;(上次统计后)发送的帧率(fps)
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.localVideoStatListener({
enable : true
},function(ret) {
alert(JSON.stringify(ret));
});
iOS系统,Android系统
可提供的1.0.0及更高版本
远端视频统计回调,报告更新远端视频统计信息,该回调函数每两秒触发一次。
remoteVideoStatListener({params}, callback(ret))
enable:
ret:
{
uid: //数字类型;用户id
width: //数字类型;视频流宽(像素)
height: //数字类型;视频流高(像素)
receivedBitrate: //数字类型;接收码率(kbps)
receivedFrameRate: //数字类型;接收帧率(fps)
delay: //数字类型;延时(毫秒)
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.remoteVideoStatListener({
enable : true
},function(ret) {
alert(JSON.stringify(ret));
});
iOS系统,Android系统
可提供的1.0.0及更高版本
摄像头启用回调,提示已成功打开摄像头,可以开始捕获视频。如果摄像头打开失败,可在 onError()中处理相应错误。 iOS 平台暂不支持本接口
cameraReadyListener({params}, callback(ret))
enable:
ret:
{
status: //布尔类型;是否启用摄像头
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.cameraReadyListener({
enable : true
},function(ret) {
alert(JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
视频功能停止回调。 iOS 平台暂不支持本接口
videoStoppedListener({params}, callback(ret))
enable:
ret:
{
status: //布尔类型;是否停止摄像头
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.videoStoppedListener({
enable : true
},function(ret) {
alert(JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
接收到对方数据流消息的回调
streamMessageListener({params}, callback(ret))
enable:
ret:
{
uid: //数字类型;用户id
streamId: //数字类型;数据流 ID
data: //字符串类型;接收到的数据
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.streamMessageListener({
enable : true
},function(ret) {
alert(JSON.stringify(ret));
});
iOS系统,Android系统
可提供的1.0.0及更高版本
接收对方数据流消息错误的回调
streamMessageErrorListener({params}, callback(ret))
enable:
ret:
{
uid: //数字类型;用户id
streamId: //数字类型;数据流 ID
errMsg: //字符串类型;错误信息
missed: //数字类型;丢失的消息数量
cached: //数字类型;数据流中断时,后面缓存的消息数量
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.streamMessageErrorListener({
enable : true
},function(ret) {
alert(JSON.stringify(ret));
});
iOS系统,Android系统
可提供的1.0.0及更高版本
伴奏已播放结束的回调,iOS 平台暂不支持本接口
audioMixingFinishedListener({params}, callback(ret))
enable:
ret:
{
status: //数字类型;是否结束
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.audioMixingFinishedListener({
enable : true
},function(ret) {
alert(JSON.stringify(ret));
});
Android系统
可提供的1.0.0及更高版本
在加入频道前, 用户需要通过本方法设置观众或主播模式(默认)。 在加入频道后,用户可以通过本方法切换用户模式。 该方法仅在直播模式有效
setClientRole({params}, callback(ret))
role:
permissionKey:
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVoice = api.require('agoraVideo');
agoraVideo.setClientRole({
role: 'AUDIENCE'
}, function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
关闭视频预览区域
closePreview({params})
uid:
var agoraVoice = api.require('agoraVideo');
agoraVideo.closePreview({uid:0});
iOS系统,Android系统
可提供的1.0.0及更高版本
重设视频预览区域
resetVideoRect({params})
rect:
{
x: 0, //(可选项)数字类型;视频区域左上角的 x 坐标(相对于所属的 Window 或 Frame);默认:原值
y: 0, //(可选项)数字类型;视频区域左上角的 y 坐标(相对于所属的 Window 或 Frame);默认:原值
w: 320, //(可选项)数字类型;视频区域的宽度;默认:原值
h: 480 //(可选项)数字类型;视频区域的高度;默认:原值
}
animation:
uid:
var agoraVoice = api.require('agoraVideo');
agoraVideo.resetVideoRect({
rect:{
x:10,
y:10,
w:300,
h:280
},
animation: true
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置远程视频流质量
setRemoteVideoStream({params},callback(ret))
uid:
type:
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setRemoteVideoStream( {
type:low,
uid:0
},function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
打开与Web SDK的互通
enableWebSdkInteroperability({params},callback(ret))
enabled:
ret:
{
status: , //布尔类型;true||false,是否成功
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.enableWebSdkInteroperability( {
enabled:true
},function(ret) {
if (ret.status) {
alert(JSON.stringify(ret));
}
});
iOS系统,Android系统
可提供的1.0.0及更高版本
设置音频参数和应用场景
setAudioProfile({params},callback(ret))
profile:
类型:字符串
描述:音频参数
取值范围:
- default(使用默认设置)
- speechStandard(32Khz, 18kbps, mono, speech)
- musicStandard(48Khz, 50kbps, mono, music)
- MusicStandardStereo(48Khz, 50kbps, stereo, music)
- MusicHighQuality(48Khz, 128kbps, mono, music)
- MusicHighQualityStereo (48Khz, 128kbps, stereo, music)
scenario:
类型:字符串
描述:应用场景
取值范围:
- default(使用默认设置)
- chatRoom
- Education
- GameStreaming
- ShowRoom
ret:
{
code: 0, //数字类型;0为成功,其他值为失败
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setAudioProfile( {
profile:'default',
},function(ret) {
alert(JSON.stringify(ret));
});
iOS系统,Android系统
可提供的1.0.0及更高版本
提供基础变声功能
setLocalVoicePitch({params},callback(ret))
pitch:
ret:
{
code: 0, //数字类型;0为成功,其他值为失败
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setLocalVoicePitch( {
pitch:1.0
},function(ret) {
alert(JSON.stringify(ret));
});
iOS系统,Android系统
可提供的1.0.0及更高版本
提供调节耳返音量功能
setInEarMonitoringVolume({params},callback(ret))
volume:
ret:
{
code: , //数字类型;0为成功,其他值为失败
}
var agoraVideo = api.require('agoraVideo');
agoraVideo.setInEarMonitoringVolume( {
volume:100
},function(ret) {
alert(JSON.stringify(ret));
});
iOS系统,Android系统
可提供的1.0.0及更高版本