RTC 常见FAQ
更多 Agora RTC SDK 相关链接:
Agora RTC 官网FAQ
Agora GitHub 链接1: 可下载demo
Agora GitHub 链接2: 可下载demo
Agora GitHub 社区
论坛内常见FAQ相关链接:
RTM 常见FAQ:论坛链接
Web 常见FAQ:论坛链接
小知识 常见FAQ:论坛链接
云端录制 常见FAQ:论坛链接
本地录制 常见FAQ:论坛链接
小程序 常见FAQ:论坛链接
灵动课堂 常见FAQ:论坛链接
Vue 常见FAQ:论坛链接
点击问题展开答案
Q1. 音视频通话,最多支持多少人在线?
参考文档:官网文档解释
注意
- 如果同时发流人数超过 Agora 的建议值,用户只能随机听到或看到频道内某些发流用户。例如,在视频直播中,频道内有 18 位主播同时发流,每位用户都会随机听不见或看不见某一人的音视频。
- 多人视频场景下,Agora 建议开启双流模式,并使用小流的默认设置。
- Agora 不提供限制同时发流人数的 API,你可以在应用层自行实现该功能。
Q2. 如何同时实现屏幕共享推流和摄像头推流?
参考文档:官网文档解释
因为每个 Client 对象只能发送一路 Stream 流,所以如果一个发送端需要同时分享屏幕和开启本地视频采集,你需要创建两个 Client,一路发送屏幕共享流,一路发送本地采集视频流。
Q3. Web SDK 和 Native SDK 通话,Web 看不到 Native 端的视频,听得到声音,是什么原因?
可能的原因及解决方案:
- v3.0.0 之前的 SDK ,在直播场景下,移动端/桌面端和 Web 端必须同时手动设置互通接口,才能实现互通,否则会导致 Web 端看 Native 端黑屏。设置方法请参考:https://docs.agora.io/cn/faq/interop_faq
- Web 端和 Native 端的频道场景不一致,可能会导致无法互通。 请确保双端都设为通信场景或直播场景 :
- 通信场景:
- Web 端设置:
var client = AgoraRTC.createClient({ mode: 'rtc', codec: 'h264' });
- Native 端设置:
mRtcEngine.setChannelProfile(CHANNEL_PROFILE_COMMUNICATION);
- 直播场景:
- Web 端设置:
var client = AgoraRTC.createClient({ mode: 'live', codec: 'h264' });
- Native 端设置:
mRtcEngine.setChannelProfile(CHANNEL_PROFILE_LIVE_BROADCASTING);
- Web 端和 Native 端使用的 UID 类型不一致,可能会导致无法互通。 请确保双端使用的 UID 类型都是 int 型或都是 String 型。 一般而言,由于 String 型 UID 需要完成映射,出于稳定性考虑,我们更建议使用 int 型 UID。
Q4. 互动直播是如何收费的?
参考文档:官网文档解释
注意:高清视频 HD 和超清视频 HD+ 是由单个用户订阅的所有流的集合分辨率决定的。
集合分辨率为所有被订阅的视频流的分辨率之和,并且会经过分辨率校准将视频流的水平像素及垂直像素个位数归零(做进位处理)。
Q5. 直播场景下,如何监听远端观众用户加入/离开频道的事件?
参考文档:官网文档解释
目前,Agora 没有在 RTC SDK 中提供监听远端观众加入或离开频道事件的回调。你可以使用以下两种方法进行实现:
- 通过消息通知服务提供的事件通知。
- 利用 RTM SDK 的状态维护功能通知。
Q6. 如何实现视频截屏(截图)功能?
目前有三种方式实现截图功能:
1. 云端录制
通过 Agora 云端录制服务实现截图,详情请参考 云录制-进阶功能-视频截图 ,其中介绍了如何通过设置 RESTful API 参数对视频进行截图,并将图片上传至你的第三方云存储。
2. 本地服务端录制 SDK
可通过本地服务端录制 SDK 的截图功能获取到每一帧原始视频数据流。详情请参考 本地服务端录制-进阶功能-视频截图 ,其中介绍了如何通过命令行的方式获取视频截图,以便分析视频内容,例如对直播内容进行鉴黄以确保合法合规。
3. 原始视频数据回调
可通过裸数据接口获取到每一帧原始视频帧数据,从而实现截图功能。详情请参考 原始视频数据 。
Q7. 通信和直播场景有什么区别?
Agora 频道有通信和直播场景之分。这两种频道场景在如下方面是不同的:
相关文档
Q9. 如何实现主播对观众进行上下麦/禁言/禁摄像头操作?
参考文档:官网文档解释
在实时音视频互动中,经常会有本地对远端用户操作的需求。例如,语聊房场景中的主播可以邀请观众上麦互动,也可以将上麦观众变回为普通观众;视频会议的主持人则可以对与会人进行禁言、禁摄像头操作。
在实际应用场景中,你可以结合 Agora RTM SDK 的消息发送与频道属性功能,和 Agora RTC SDK 的切换用户角色和停止/恢复发布本地音频或视频流的功能,实现本地对远端用户的操作。
Q10. Web SDK 如何同时用两个视图播放同一个视频流?
- 播放两次本地视频流:
// 假设已有 localStream
localStream2 = AgoraRTC.createStream({
streamID: uid,
audio: false,
cameraId: camera,
microphoneId: microphone,
video: true,
screen: false
});
localStream2.init(function () {
var newVideoTrack = localStream2.getVideoTrack();
localStream.replaceTrack(newVideoTrack);
localStream2.play('agora_local1');
});
- 播放两次远端视频流:
<div id="video" style="margin:0 auto;">
<div id="agora_local" style="float:right;width:300px;height:300px;display:inline-block;transform: rotateY(360deg);"></div>
<div id="screenVideo" style="float:left;width:800px;height:600px;display:inline-block;"></div>
<div id="agora_local1" style="float:right;width:300px;height:300px;display:inline-block;transform: rotateY(360deg);"></div>
<div id="play1" style="float:right;width:300px;height:300px;display:inline-block;"></div>
</div>
var stream = evt.stream;
console.log("Subscribe remote stream successfully: " + stream.getId());
if($('div#video #agora_remote' + stream.getId()).length === 0) {
$('div#video').append('<div id="agora_remote' + stream.getId() +
' " style="float:left; width:800px; height:500px; display:inline-block;"></div>');
}
stream.play('agora_remote' + stream.getId());
var video = document.createElement('video');
var test1 = document.getElementById('play1');
test1.appendChild(video);
video.srcObject = evt.stream.stream;
video.play();
Q11. 如何判断订阅的流是屏幕共享流还是摄像头流?
目前 Agora SDK 没有提供这样方法去检测订阅的流是屏幕共享流还是摄像头流。
但你可以通过业务逻辑实现,例如:
自行记录发流端的摄像头流 uid 和屏幕共享流 uid,接收端通过 uid 判断订阅的流是屏幕共享流还是摄像头流。