「Agora RTC SDK」FAQ 大汇总

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:论坛链接


点击问题展开答案


Q1. 音视频通话,最多支持多少人在线?

参考文档:官网文档解释


:warning: 注意

  • 如果同时发流人数超过 Agora 的建议值,用户只能随机听到或看到频道内某些发流用户。例如,在视频直播中,频道内有 18 位主播同时发流,每位用户都会随机听不见或看不见某一人的音视频。
  • 多人视频场景下,Agora 建议开启双流模式,并使用小流的默认设置。
  • Agora 不提供限制同时发流人数的 API,你可以在应用层自行实现该功能。

Q2. 如何同时实现屏幕共享推流和摄像头推流?

参考文档:官网文档解释


因为每个 Client 对象只能发送一路 Stream 流,所以如果一个发送端需要同时分享屏幕和开启本地视频采集,你需要创建两个 Client,一路发送屏幕共享流,一路发送本地采集视频流。


Q3. Web SDK 和 Native SDK 通话,Web 看不到 Native 端的视频,听得到声音,是什么原因?

可能的原因及解决方案:

  1. v3.0.0 之前的 SDK ,在直播场景下,移动端/桌面端和 Web 端必须同时手动设置互通接口,才能实现互通,否则会导致 Web 端看 Native 端黑屏。设置方法请参考:https://docs.agora.io/cn/faq/interop_faq
  2. 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);
  1. Web 端和 Native 端使用的 UID 类型不一致,可能会导致无法互通。 请确保双端使用的 UID 类型都是 int 型或都是 String 型。 一般而言,由于 String 型 UID 需要完成映射,出于稳定性考虑,我们更建议使用 int 型 UID。

Q4. 互动直播是如何收费的?

参考文档:官网文档解释


:warning: 注意:高清视频 HD 和超清视频 HD+ 是由单个用户订阅的所有流的集合分辨率决定的。
集合分辨率为所有被订阅的视频流的分辨率之和,并且会经过分辨率校准将视频流的水平像素及垂直像素个位数归零(做进位处理)。


Q5. 直播场景下,如何监听远端观众用户加入/离开频道的事件?

参考文档:官网文档解释


目前,Agora 没有在 RTC SDK 中提供监听远端观众加入或离开频道事件的回调。你可以使用以下两种方法进行实现:

  • 通过消息通知服务提供的事件通知。
  • 利用 RTM SDK 的状态维护功能通知。

Q6. 如何实现视频截屏(截图)功能?

目前有三种方式实现截图功能:

1. 云端录制

通过 Agora 云端录制服务实现截图,详情请参考 云录制-进阶功能-视频截图 ,其中介绍了如何通过设置 RESTful API 参数对视频进行截图,并将图片上传至你的第三方云存储。

2. 本地服务端录制 SDK

可通过本地服务端录制 SDK 的截图功能获取到每一帧原始视频数据流。详情请参考 本地服务端录制-进阶功能-视频截图 ,其中介绍了如何通过命令行的方式获取视频截图,以便分析视频内容,例如对直播内容进行鉴黄以确保合法合规。

3. 原始视频数据回调

可通过裸数据接口获取到每一帧原始视频帧数据,从而实现截图功能。详情请参考 原始视频数据


Q7. 通信和直播场景有什么区别?

Agora 频道有通信和直播场景之分。这两种频道场景在如下方面是不同的:


相关文档


Q8. 如何处理视频黑屏问题?

参考文档:官网文档解释


常见的视频黑屏问题有以下三种情况:

  • 本地视频黑屏远端视频正常。
  • 本地视频正常远端视频黑屏。
  • 本地远端视频都黑屏。

Q9. 如何实现主播对观众进行上下麦/禁言/禁摄像头操作?

参考文档:官网文档解释


在实时音视频互动中,经常会有本地对远端用户操作的需求。例如,语聊房场景中的主播可以邀请观众上麦互动,也可以将上麦观众变回为普通观众;视频会议的主持人则可以对与会人进行禁言、禁摄像头操作。

在实际应用场景中,你可以结合 Agora RTM SDK 的消息发送与频道属性功能,和 Agora RTC SDK 的切换用户角色和停止/恢复发布本地音频或视频流的功能,实现本地对远端用户的操作。


Q10. Web SDK 如何同时用两个视图播放同一个视频流?
  1. 播放两次本地视频流:
// 假设已有 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');

});
  1. 播放两次远端视频流:
<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 判断订阅的流是屏幕共享流还是摄像头流。