自从
4.18.0
如果你需要更灵活地监听自动播放失败事件,推荐通过在 IAgoraRTC.on 方法中传入该回调来代替 onAutoplayFailed。
AgoraRTC.on("autoplay-failed", (info) => {
console.log("Autoplay failed!", info.state, info.device);
});
自从
4.18.0
如果你需要更灵活地监听视频采集设备状态变化,推荐通过在 IAgoraRTC.on 方法中传入该回调来代替 onCameraChanged。
AgoraRTC.on("camera-changed", (info) => {
console.log("Camera changed!", info.state, info.device);
});
设备信息,详见 DeviceInfo。
自从
4.18.0
如果你需要更灵活地监听麦克风设备变化,推荐通过在 IAgoraRTC.on 方法中传入该回调来代替 onMicrophoneChanged。
AgoraRTC.on("microphone-changed", (info) => {
console.log("Microphone changed!", info.state, info.device);
});
设备信息,详见 DeviceInfo。
自从
4.18.0
如果你需要更灵活地监听音频播放设备变化,推荐通过在 IAgoraRTC.on 方法中传入该回调来代替 onPlaybackDeviceChanged。
AgoraRTC.on("playback-device-changed", (info) => {
console.log("Playback device changed!", info.state, info.device);
});
设备信息,详见 DeviceInfo。
自从
4.18.0
如果你需要更灵活地监听触发 CSP 规则事件,推荐通过在 IAgoraRTC.on 方法中传入该回调来代替 onSecurityPolicyViolation。
AgoraRTC.on("security-policy-violation", (info) => {
console.log("Security policy violation!", info.state, info.device);
});
音频轨道自动播放失败回调。
DEPRECATED
自 4.6.0 起废弃,请改用 onAutoplayFailed。
该回调在音频轨道自动播放失败的时候触发。如果短时间内有多个音频轨道对象都调用了 play
,SDK 会触发多次 onAudioAutoplayFailed
。
音频自动播放失败是浏览器的自动播放策略导致的,视频轨道的播放不受此影响。
在 Agora Web SDK 中,只要用户和页面发生过一次点击交互,就会自动解锁浏览器音频自动播放的限制,所以针对音频自动播放有两种解决方案:
onAudioAutoplayFailed
回调,就确保在调用 RemoteAudioTrack.play
和 LocalAudioTrack.play
之前用户已经和页面发生了点击交互。RemoteAudioTrack.play
和 LocalAudioTrack.play
之前用户已经和页面发生点击交互,就监听 onAudioAutoplayFailed
回调,通过回调在页面上显示一个按钮引导用户点击。无论使用何种方案,只要浏览器启用了自动播放策略,都需要用户至少触发一次点击交互操作才能播放音频。随着用户使用某个页面的次数变多,浏览器会在这个页面上默认关闭自动播放策略,此时不需要任何交互也可以播放音频了,但是我们无法通过 JavaScript 去感知浏览器这个行为。
下面的示例代码演示了当检测到自动播放失败后的处理:在页面上动态显示一个按钮让用户点击。
let isAudioAutoplayFailed = false;
AgoraRTC.onAudioAutoplayFailed = () => {
if (isAudioAutoplayFailed) return;
isAudioAutoplayFailed = true;
const btn = document.createElement("button");
btn.innerText = "Click me to resume the audio playback";
btn.onClick = () => {
isAudioAutoplayFailed = false;
btn.remove();
};
document.body.append(btn);
};
需要注意的是,短时间内可能会有多个音频轨道对象都调用了
play
,此时会触发多次onAudioAutoplayFailed
。示例代码中通过isAudioAutoplayFailed
这个对象防止创建重复的按钮对象。
音频或视频轨道自动播放失败回调。
自从
4.6.0
SDK 在音频或视频轨道自动播放失败时触发该回调。
WKWebView
中(如 iOS 微信浏览器),纯视频的自动播放也会受到限制。在 Agora Web SDK 中,只要用户和页面发生过一次点击交互,就会自动解锁浏览器音频或视频的自动播放限制,所以针对自动播放有两种解决方案:
onAutoplayFailed
回调,就确保在调用 RemoteTrack.play
和 LocalTrack.play
之前用户已经和页面发生了点击交互。RemoteTrack.play
和 LocalTrack.play
之前用户已经和页面发生点击交互,就监听 onAutoplayFailed
回调,通过回调在页面上显示一个按钮引导用户点击。无论使用何种方案,只要浏览器启用了自动播放策略,都需要用户至少触发一次点击交互操作才能播放音频或视频。随着用户使用某个页面的次数变多,浏览器会在这个页面上默认关闭自动播放策略,此时不需要任何交互也可以播放音频和视频了,但是我们无法通过 JavaScript 去感知浏览器这个行为。
下面的示例代码演示了当检测到自动播放失败后的处理:在页面上动态显示一个按钮让用户点击。
AgoraRTC.onAutoplayFailed = () => {
const btn = document.createElement("button");
btn.innerText = "Click me to resume the audio/video playback";
btn.onClick = () => {
btn.remove();
};
document.body.append(btn);
由于自动播放失败后在用户通过手势点击恢复播放之前,
onAutoplayFailed
只会触发一次,因此在业务代码中不需要像onAudioAutoplayFailed
回调一样维护isAutoplayFailed
状态。
视频采集设备状态变化回调。
该回调提示有摄像头被添加或移除。
注意事项:当该回调提示有设备被添加时,如果该设备是虚拟设备,可能无法采集到音频或视频。
AgoraRTC.onCameraChanged = (info) => {
console.log("camera changed!", info.state, info.device);
};
Parameters
音频采集设备状态变化回调。
该回调提示有麦克风被添加或移除。
注意事项:当该回调提示有设备被添加时,如果该设备是虚拟设备,可能无法采集到音频或视频。
AgoraRTC.onMicrophoneChanged = (info) => {
console.log("microphone changed!", info.state, info.device);
};
Parameters
自从
4.1.0
音频播放设备状态变化回调。
该回调提示有音频播放设备被添加或移除。
AgoraRTC.onPlaybackDeviceChanged = (info) => {
console.log("speaker changed!", info.state, info.device);
};
Parameters
自从
4.15.0
触发 CSP 规则回调。
当声网服务相关的资源加载或请求发送因为触发浏览器的 CSP(Content Security Policy,内容安全策略)规则而失败时,SDK 会触发该回调。 收到该回调后,请及时调整你的 CSP 设置,确保能正常体验声网的服务。
Agora Web SDK 的版本信息。
创建一个客户端对象用于通话/直播管理,通常来说这是使用 Agora Web SDK 的第一步。
客户端的配置,包括通话场景、编码格式等,默认使用 vp8
编码,rtc
通话场景。详见 ClientConfig。
通过该配置指定文件路径、缓存策略和编码配置。
返回的音频轨道对象相对于普通的音频轨道对象增加了一些控制音频播放流程的方法。包括播放、暂停、跳转、实时播放状态获取等。
通过摄像头采集的视频创建一个视频轨道。
采集视频的配置,包括采集设备、编码配置等。详见 CameraVideoTrackInitConfig。
创建一个自定义的音频轨道。
你可以使用这个方法将自己维护的 MediaStreamTrack 转换成一个可以用于 SDK 的音频轨道。
自定义音频的配置,详见 CustomAudioTrackInitConfig。
创建一个自定义的视频轨道。
你可以使用这个方法将自己维护的 MediaStreamTrack 转换成一个可以用于 SDK 的视频轨道。
自定义视频轨道的配置,详见 CustomVideoTrackInitConfig。
自 v4.17.1 起,自定义视频轨道配置 config 除了支持设置码率,还支持设置分辨率和帧率。
同时创建麦克风音频轨道和摄像头视频轨道。
通过麦克风采集的音频创建一个音频轨道,同时通过摄像头采集的视频创建一个视频轨道。
调用该方法和分别调用 createMicrophoneAudioTrack 以及 createCameraVideoTrack 的区别是:
- 调用该方法会同时要求麦克风和摄像头的授权,用户只需授权一次。
- 分别创建音频轨道和视频轨道需要用户分别对麦克风和摄像头进行授权,也就是说用户需要授权两次。
采集音频的配置,包括采集设备、编码配置等。
采集视频的配置,包括采集设备、编码配置等。
通过麦克风采集的音频创建一个音频轨道。
麦克风采集音频的配置,包括采集设备、音频编码配置等,详见 MicrophoneAudioTrackInitConfig。
创建用于屏幕共享的视频轨道。
屏幕共享的视频配置,包括编码配置、采集配置等。
屏幕共享时是否同时分享屏幕共享输入源的音频。
enable
: 分享音频。disable
: (默认)不分享音频。auto
: 根据浏览器是否支持决定是否分享音频。注意事项:
- 该功能仅支持 Windows 和 macOS 平台下的 Chrome 浏览器 74 及以上版本。
- Windows 平台支持在共享整个屏幕和共享 Chrome 标签页时分享音频,不支持在共享应用窗口时分享音频。macOS 平台仅支持在共享 Chrome 标签页时分享音频。
- 设置了
withAudio
为enable
后,还需要在屏幕共享的弹出框上,勾选分享音频才能真正生效。
withAudio
设为 enable
,返回包含屏幕共享视频轨道和一个音频轨道的列表。如果用户没有勾选分享音频,SDK 会抛出错误。withAudio
设为 disable
,返回屏幕共享的视频轨道。withAudio
设为 auto
,在支持屏幕共享音频的浏览器上 SDK 会默认尝试分享音频。创建用于屏幕共享的视频轨道。
屏幕共享的视频配置,包括编码配置、采集配置等。
屏幕共享时是否同时分享屏幕共享输入源的音频。
enable
: 分享音频。disable
: (默认)不分享音频。auto
: 根据浏览器是否支持决定是否分享音频。注意事项:
- 该功能仅支持 Windows 和 macOS 平台下的 Chrome 浏览器 74 及以上版本。
- Windows 平台支持在共享整个屏幕和共享 Chrome 标签页时分享音频,不支持在共享应用窗口时分享音频。macOS 平台仅支持在共享 Chrome 标签页时分享音频。
- 设置了
withAudio
为enable
后,还需要在屏幕共享的弹出框上,勾选分享音频才能真正生效。
withAudio
设为 enable
,返回包含屏幕共享视频轨道和一个音频轨道的列表。如果用户没有勾选分享音频,SDK 会抛出错误。withAudio
设为 disable
,返回屏幕共享的视频轨道。withAudio
设为 auto
,在支持屏幕共享音频的浏览器上 SDK 会默认尝试分享音频。创建用于屏幕共享的视频轨道。
屏幕共享的视频配置,包括编码配置、采集配置等。
屏幕共享时是否同时分享屏幕共享输入源的音频。
enable
: 分享音频。disable
: (默认)不分享音频。auto
: 根据浏览器是否支持决定是否分享音频。注意事项:
- 该功能仅支持 Windows 和 macOS 平台下的 Chrome 浏览器 74 及以上版本。
- Windows 平台支持在共享整个屏幕和共享 Chrome 标签页时分享音频,不支持在共享应用窗口时分享音频。macOS 平台仅支持在共享 Chrome 标签页时分享音频。
- 设置了
withAudio
为enable
后,还需要在屏幕共享的弹出框上,勾选分享音频才能真正生效。
withAudio
设为 enable
,返回包含屏幕共享视频轨道和一个音频轨道的列表。如果用户没有勾选分享音频,SDK 会抛出错误。withAudio
设为 disable
,返回屏幕共享的视频轨道。withAudio
设为 auto
,在支持屏幕共享音频的浏览器上 SDK 会默认尝试分享音频。关闭日志上传。
日志上传默认是关闭状态,如果你调用了开启日志上传(enableLogUpload),可以通过本方法停止上传日志。
开启日志上传。开启后 SDK 的日志会上传到声网的服务器。
日志上传功能默认为关闭状态,如果你需要开启此功能,请确保在所有方法之前调用本方法。
如果没有成功加入频道,则服务器上无法查看日志信息。
设置 SDK 的日志输出级别。
选择一个级别,你就可以看到在该级别及该级别以上所有级别的日志信息。
SDK 日志输出级别。按照输出日志最全到最少排列:
例如,如果你输入代码 AgoraRTC.setLogLevel(1);
,就可以看到 INFO,WARNING 和 ERROR 级别的日志信息。
该方法枚举可用的视频输入设备,比如摄像头。
调用成功后 SDK 会通过 MediaDeviceInfo 对象返回可用的视频输入设备。
调用本方法会暂时打开摄像头以触发浏览器的媒体设备权限申请。在 Chrome 81+、Firefox、 Safari 等浏览器上,没有媒体设备权限时无法获取到准确的设备信息。
是否跳过权限检查。你可以通过将该参数设置成 true
来跳过媒体设备权限申请步骤,但是 SDK 无法保证可以通过本方法获取准确的媒体设备信息。
true
: 跳过权限检查。false
:(默认)不跳过权限检查。该方法枚举可用的媒体输入和输出设备,比如麦克风、摄像头、耳机等。 调用成功后 SDK 会通过 MediaDeviceInfo 对象返回可用的媒体设备。
注意事项:
- 调用本方法会暂时打开摄像头和麦克风以触发浏览器的媒体设备权限申请。在 Chrome 81+、Firefox、 Safari 等浏览器上,没有媒体设备权限时无法获取到准确的设备信息。
- 即使是对于同一设备,SDK 返回的 MediaDeviceInfo.deviceId 也可能会发生变化,例如用户清除 Cookie 后,
deviceId
就会被重置。因此,声网不建议基于deviceId
开发业务逻辑。
getDevices().then(devices => {
console.log("first device id", devices[0].deviceId);
}).catch(e => {
console.log("get devices error!", e);
});
是否跳过权限检查。你可以通过将该参数设置成 true
来跳过媒体设备权限申请步骤,但是 SDK 无法保证可以通过本方法获取准确的媒体设备信息。
true
: 跳过权限检查。false
:(默认)不跳过权限检查。在 Electron 环境下获取屏幕共享源。
调用成功后 SDK 会返回一组 ElectronDesktopCapturerSource 对象。
如果你的 Electron 运行环境开启了 contextIsolation 配置,调用此方法会报错。你需要自己使用 contextBridge.exposeInMainWorld 来获取视频源 id。
// preload.js
const {
contextBridge, desktopCapturer
} = require("electron");
contextBridge.exposeInMainWorld(
"electronDesktopCapturer", {
getSources: async (...args) => {
const sources = await desktopCapturer.getSources(...args);
return sources;
}
}
);
// renderer.js
(async () => {
sources = await window.electronDesktopCapturer.getSources(["window", "screen"]);
const source = sources[0]; // just for example ,you shuould make an UI for user to select the exact source.
const screenVideoTrack = await AgoraRTC.createScreenVideoTrack({ electronScreenSourceId: source.id });
})()
需要获取的共享源类型(窗口/应用/屏幕),详见 ScreenSourceType。如果为空则获取所有可以获取的共享源。
该方法枚举可用的音频输入设备,比如麦克风。
调用成功后 SDK 会通过 MediaDeviceInfo 对象返回可用的音频输入设备。
调用本方法会暂时打开麦克风以触发浏览器的媒体设备权限申请。在 Chrome 81+、Firefox、 Safari 等浏览器上,没有媒体设备权限时无法获取到准确的设备信息。
是否跳过权限检查。你可以通过将该参数设置成 true
来跳过媒体设备权限申请步骤,但是 SDK 无法保证可以通过本方法获取准确的媒体设备信息。
true
: 跳过权限检查。false
:(默认)不跳过权限检查。自从
4.1.0
该方法枚举可用的音频播放设备,比如扬声器。
调用成功后 SDK 会通过 MediaDeviceInfo 对象返回可用的音频播放设备。
- 该方法目前仅支持 Chrome 浏览器。
- 调用本方法会暂时打开麦克风以触发浏览器的媒体设备权限申请。在 Chrome 81+ 上,没有媒体设备权限时无法获取到准确的设备信息。
是否跳过权限检查。你可以通过将该参数设置成 true
来跳过媒体设备权限申请步骤,但是 SDK 无法保证可以通过本方法获取准确的媒体设备信息。
true
: 跳过权限检查。false
:(默认)不跳过权限检查。检测音频轨道是否活跃。
SDK 通过检测指定时间范围内音量是否发生变化来判断音频轨道是否活跃。
声网建议通过此方法在开始通话前对音频输入设备进行可用性检测。你可以将麦克风采集到的音频轨道作为参数传入该方法,判断麦克风是否正常运行。
注意事项:
- 极为安静的环境下可能检测失败,所以声网建议你在使用此方法的时候提示用户发出声响。
- 当音频轨道被 mute 时,会返回
false
。- 不建议频繁调用此方法。
const audioTrack = await AgoraRTC.createMicrophoneAudioTrack({ microphoneId });
AgoraRTC.checkAudioTrackIsActive(audioTrack).then(result => {
console.log(`${ microphoneLabel } is ${ result ? "available" : "unavailable" }`);
}).catch(e => {
console.log("check audio track error!", e);
});
需要进行检测的本地或远端音频轨道。
音频轨道检测的超时时间,单位为毫秒,默认 5,000 毫秒。
传入该方法的音频轨道中的音量大小是否发生了变化:
true
: 音量大小有变化。对于麦克风音频轨道,说明音频采集设备采集到了声音。false
: 音量大小未变化,说明音频采集设备没有采集到声音,或自定义音频轨道中没有音量变化,或音频轨道被 mute。检查 Agora Web SDK 对正在使用的浏览器的适配情况。
该方法必须在创建客户端对象 createClient 之前调用。
是否支持当前浏览器。
true
: 支持。false
: 不支持。检测视频轨道是否活跃。
SDK 通过检测指定时间范围内视频图像是否发生变动来判断视频轨道是否活跃。
声网建议通过此方法在开始通话前对视频输入设备进行可用性检测。你可以将摄像头采集到的视频轨道作为参数传入该方法,判断摄像头是否正常运行。
注意事项:
- 当视频轨道被 mute 时,会返回
false
。- 不建议频繁调用此方法。
const videoTrack = await AgoraRTC.createCameraVideoTrack({ cameraId });
AgoraRTC.checkVideoTrackIsActive(videoTrack).then(result => {
console.log(`${ cameraLabel } is ${ result ? "available" : "unavailable" }`);
}).catch(e => {
console.log("check video track error!", e);
});
需要进行检测的本地或远端视频轨道。
视频轨道检测的超时时间,单位为毫秒,默认 5,000 毫秒。
传入该方法的视频轨道中的图像是否发生了变动:
true
: 视频画面发生变动。对于摄像头视频轨道,说明视频采集设备采集到了画面。false
: 视频画面未变动,说明视频采集设备异常或被完全遮挡,或视频轨道被 mute。创建跨频道媒体流转发的配置对象。
指定一个事件名,获取当前所有监听这个事件的回调函数。
事件名称。
获取 Agora Web SDK 对当前浏览器支持的编解码格式。
调用该方法会返回声网服务与当前浏览器同时支持的编解码格式。目前而言,视频支持 VP8 及 H.264 格式,音频支持 OPUS 格式。
注意事项:
- 该方法支持所有浏览器。对于不支持 WebRTC 或无法识别的浏览器环境,编解码列表返回为空。
- 返回的音视频编码为浏览器通过 SDP 声称的编码类型,为参考值。
- 目前部分安卓手机 H.264 与其他平台 H.264 存在无法互通或单通问题,对于这部分机型推荐使用 VP8 编码格式。
AgoraRTC.getSupportedCodec().then(result => {
console.log(`Supported video codec: ${result.video.join(",")}`);
console.log(`Supported audio codec: ${result.audio.join(",")}`);
});
调用该方法会返回一个 Promise
对象,在 .then(function(result){})
回调中,result
包含以下属性:
video
: 数组类型,支持的视频编解码格式。可能含有 "H264"
、"VP8"
两种取值,或为空数组。audio
: 数组类型,支持的音频编解码格式。可能含有 "OPUS"
,或为空数组。取消一个指定事件的监听。
指定事件的名称。
监听事件时传入的回调函数。
自从
4.18.0
事件名称。
自从
4.18.0
事件名称。
自从
4.18.0
事件名称。
自从
4.18.0
事件名称。
自从
4.18.0
事件名称。
监听一个指定的事件,当事件触发时会调用传入的回调函数。
当监听后事件第一次触发时,该监听和回调函数就会被立刻移除,也就是只监听一次指定事件。
指定事件的名称。
传入的回调函数。
自从
4.5.0
对本地播放的音频启用回声消除。
在多个用户同时播放一个媒体文件的场景中,例如一起看电影,如果用户 A 在 Chrome 浏览器上通过 HTMLMediaElement 使用扬声器播放媒体文件,扬声器播放的声音会和人声一起被 SDK 采集,因此其他用户会听到自己本地播放的媒体音频以及用户 A 发送的媒体音频,从而产生回声。针对这种情况,你可以调用 processExternalMediaAEC
方法传入 HTMLMediaElement
,对本地播放的媒体进行回声消除,提升音频体验。
<audio crossOrigin="anonymous" src="http://www.test.com/test.mp3" id="audioDom"></audio>
<script>
const element = document.getElementById("audioDom");
AgoraRTC.processExternalMediaAEC(element);
</script>
注意事项:如果本地播放的媒体元素的地址是跨域地址,必须设置 HTMLMediaElement 中的
crossOrigin
属性为"anonymous"
以允许跨域媒体被重采集。
需要进行回声消除的媒体元素,详见 HTMLMediaElement。
插件实例。
指定一个事件,取消其所有的监听。
指定事件的名称,如果没有指定事件,则取消所有事件的所有监听。
Agora Web SDK 的入口。