2022「音视频Native SDK」常见FAQ

Q1:Agora RTC SDK 最多支持多少人同时在线?

Agora RTC SDK 提供多人实时音视频服务,对并发频道数量无限制,支持单个频道内百万用户同时在线。

一般情况下,Agora 建议单个频道内最多 17 位用户同时发流。

如果你使用 3.0.0 之前版本的 SDK,且频道场景为 setChannelProfile(COMMUNICATION),Agora 建议单个频道内最多 7 位用户同时发流。

⚠️注意:如果同时发流人数超过 Agora 的建议值,用户只能随机听到或看到频道内某些发流用户。

例如,在视频直播中,频道内有 18 位主播同时发流,每位用户都会随机听不见或看不见某一路音频或视频流。Agora 不提供限制同时发流人数的 API,你可以在应用层自行实现该功能。多人视频场景下,为降低带宽占用、确保通话流畅,Agora 建议参考多人视频场景进行设置。

官网链接: https://docs.agora.io/cn/Breakout%20Classroom/faq/capacity?platform=Android


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

// 加入频道,并发布本地摄像头采集的视频

options.publishCameraTrack = true;

options.publishScreenTrack = false;

engine.joinChannel(accessToken, channelId, 0, options);

// 加入同一个频道,并发布屏幕采集的视频

ChannelMediaOptions mediaOptions = new ChannelMediaOptions();

mediaOptions.publishCameraTrack = false;

mediaOptions.publishScreenTrack = true;

String channelId = et_channel.getText().toString();

engine.joinChannelEx(null, channelId, 0, mediaOptions, iRtcEngineEventHandler, rtcConnection2);

参考: https://docs.agora.io/cn/live-streaming-premium-4.x/screensharing_android_ng?platform=Android

🌟Agora 在 GitHub 提供了一个开源的 Android 屏幕共享示例项目,你可以下载体验,并参考源代码。

官网链接(Web平台): https://docs.agora.io/cn/All/faq/switch_screen_camera_web


Q3:如何减少集成 SDK 后的 app 体积?

v4.x SDK参考:https://docs.agora.io/cn/video-call-4.x/faq/reduce_app_size_ng

早于 3.6.2 版 的 SDK: https://docs.agora.io/cn/live-streaming-premium-legacy/faq/reduce_app_size_rtc?platform=Android

Agora在 v3.6.2 版起减少 app 体积的方式: https://docs.agora.io/cn/live-streaming-premium-legacy/reduce_rtc_app_size

Q4:如何避免直播上下麦音量变化?

为了保证不同场景下都有较好的音质体验,默认情况下,用户上下麦时,SDK 会调整底层音频的设置:非连麦模式下会使用媒体音量控制。

连麦模式下会使用通话音量控制。媒体音量和通话音量各有独立的音量控制机制。

如果想避免上下麦时音量变化,请确保上下麦前后 SDK 使用的音量类型保持不变。不同情况下 SDK 使用的音量类型不同,详见音量类型介绍。

例如,如果你在 Android 平台使用 AUDIO_SCENARIO_CHATROOM_ENTERTAINMENT,在 iOS 平台使用 AUDIO_SCENARIO_GAME_STREAMING,那么即使用户角色切换、音频路由改变,用户的音量类型也不会变化,从而音量不受到影响。

设置音频编码属性:https://docs.agora.io/cn/live-streaming-premium-4.x/audio_profile_android_ng?platform=Android

官网链接: https://docs.agora.io/cn/live-streaming-premium-legacy/faq/audio_role?platform=Android


Q5:通信和直播场景有什么区别?

为针对不同的实时音视频场景采用不同的优化策略,Agora 为 RTC 频道提供了一个 setChannelProfile 方法。

你可以通过该方法将频道设置为通信(CHANNEL_PROFILE_COMMUNICATION)场景或直播(CHANNEL_PROFILE_LIVE_BROADCASTING)场景。

这两种场景默认的用户角色、音频路由、视频编码码率是不同的。

官网参考:https://docs.agora.io/cn/All/faq/profile_difference


Q6:崩溃(卡死、闪退)问题如何处理?

确认是集成阶段出现的崩溃还是跑demo期间出现的崩溃。

如果跑demo出现了崩溃但是集成未出现崩溃,麻烦检查一下集成逻辑,如果是集成阶段出现了崩溃跑demo在同样的地方出现了崩溃,麻烦收集以下信息联系技术支持:

  1. 崩溃发生时间点生成的崩溃堆栈
  2. 崩溃/卡死/闪退时间点的SDK log
  3. 复现步骤(方便本地复现,有助于问题排查)
  4. 复现概率复现机型、操作系统、SDK版本

获取崩溃信息的方法: https://docs.agora.io/cn/live-streaming-premium-legacy/faq/logfile?platform=Android


Q7:如何监听频道内用户的麦克风和摄像头状态?

使用 Agora RTC SDK 实现音视频通话或直播时,若需监听频道内用户的麦克风和摄像头状态,你还需要使用 Agora RTM SDK。

实现方法:你可以使用 Agora RTM SDK 的如下功能进行监听:

  • 用户属性:监听频道内指定用户的麦克风和摄像头状态
  • 频道属性:监听频道内所有用户的麦克风和摄像头状态

监听指定用户:

加入频道后,调用 addOrUpdateLocalUserAttributes 添加或更新本地用户的麦克风和摄像头属性。

调用 getUserAttributesByKeys 获取频道内指定用户的麦克风和摄像头属性,从而获知麦克风和摄像头的状态。

  • 监听所有用户:

(此步骤仅适用于 Linux/Windows C++ 平台,其他平台可跳过)加入频道后,调用 createChannelAttribute 创建并返回一个 IRtmChannelAttribute 实例。获取麦克风和摄像头状态后,需调用 release 释放 IRtmChannelAttribute 实例。

调用 addOrUpdateChannelAttributes 添加或更新指定频道内所有用户的麦克风和摄像头属性。调用 getChannelAttributesByKeys 获取指定频道内所有用户的麦克风和摄像头属性,从而获取麦克风和摄像头的状态。

官网链接参考: https://docs.agora.io/cn/live-streaming-premium-legacy/faq/microphone_camera_status?platform=Android


Q8:如何通过Unity/Flutter/React Native/Electron/Unreal/Uni-app等框架集成?

视频通话快速开始:

  • Unreal

社区版: https://github.com/AgoraIO-Community/Agora-Unreal-SDK

MVP版: https://github.com/AgoraIO-Extensions/Agora-Unreal-RTC-SDK


Q9:SDK 是否支持断线重连机制?

在 app 断网或进程被杀时,SDK 会自动启用断线重连机制。

SDK的处理逻辑请参考文档: https://docs.agora.io/cn/All/faq/sdk_behavior

频道连接状态管理: https://docs.agora.io/cn/live-streaming-premium-4.x/channel_connection_android_ng?platform=Android

Q10:如何设置镜像模式?

自 v3.0.0 起,Agora Native SDK 提供新的接口方便你在实时音视频通话的不同阶段中获取期望的视频显示效果。

官网参考: https://docs.agora.io/cn/All/faq/mirrormode

设置视频编码属性: https://docs.agora.io/cn/live-streaming-premium-4.x/video_profile_android_ng?platform=Android


Q11:为什么我无法打开摄像头?

摄像头打开失败有多种原因,请按以下步骤检查:

确认摄像头权限有没有打开。

Android 和 iOS 系统都有权限管理,请在系统设置中检查。

同时 Android 上有些安全软件也管理权限。检查是否有其他应用占据了摄像头。关闭其他应用,重启手机再试。摄像头硬件问题。打开系统自带的拍摄视频程序看是否可以录像。


Q12:为什么无法使用 startAudioMixing 播放音乐文件?

请先按照文档内容进行自检: https://docs.agora.io/cn/All/faq/startaudiomixing_fail

🌟startAudioMixing : https://docs.agora.io/cn/live-streaming-premium-4.x/API%20Reference/java_ng/API/class_irtcengine.html?platform=Android#api_irtcengine_startaudiomixing2


Q13:如何实现美颜?

视频通话或直播时,用户常常希望向对方呈现良好的肌肤状态和精神面貌。Agora RTC SDK 提供 API 帮助开发者轻松实现基础美颜功能。

用户可以开启美颜功能并调节美白、磨皮、祛痘、红润效果等美颜选项,实现自然的美颜效果。

官网参考: https://docs.agora.io/cn/All/faq/image_enhancement

🌟如果 Agora RTC SDK 提供的基础美颜功能无法满足你的场景需求,你可以同时集成第三方美颜 SDK 和 Agora RTC SDK 实现具有高级美颜功能的实时音视频互动。

Agora 提供开源示例项目供你参考: https://github.com/AgoraIO/FaceUnity


Q14:如何判断一个通话是语音通话还是视频通话?

在实时音视频通话场景中,你可以通过 Agora RTM SDK 或 Agora RTC SDK 判断一个即将开始或正在进行的通话是语音通话还是视频通话。

官网参考: https://docs.agora.io/cn/All/faq/judge_voice_video_call

通话前检测: https://docs.agora.io/cn/video-call-4.x/lastmile_quality_android_ng?platform=Android

通话中质量监测: https://docs.agora.io/cn/video-call-4.x/in-call_quality_android_ng?platform=Android


Q15:如何避免在打电话时将音频流发送给远端用户?

问题描述在 Android 设备中,使用集成了 Agora RTC SDK 的 app 进行实时音视频互动,本地用户拨打或接听系统电话时仍将系统电话的声音发送给远端用户。

问题原因默认情况下,SDK 会监听 Android 系统电话事件,在用户拨打或接听系统电话时调用 disableAudio 关闭音频模块。

如果你在 app 中添加了拦截系统电话事件的业务逻辑,则 SDK 无法判断用户是否拨打或接收系统电话,从而造成该问题。

  • 解决方案请按如下步骤排查并解决问题:检查你的 app 拦截了什么 Android 系统电话事件:CALL_STATE_RINGING

CALL_STATE_OFFHOOK

  • 恢复监听已拦截的系统电话事件。

官网链接: https://docs.agora.io/cn/All/faq/avoid_sending_audio_during_phone_call


Q16:为什么 Android 设备上挂断系统电话后音乐文件不会自动恢复播放?

问题描述:在 Android 设备上调用 startAudioMixing 方法播放音乐文件,播放过程中使用系统自带的电话软件接听或者拨打了电话,挂断电话后音乐文件没有自动恢复播放。

问题原因:SDK 无法判断系统电话是否结束使用音频输出设备,所以音乐文件不会自动恢复播放。

解决方案:调用 startAudioMixing 方法后,建议使用安卓原生方法 PhoneStateListener 监听电话事件,并执行以下步骤:

接听或拨打电话时,调用 getAudioMixingCurrentPosition 方法获取音乐文件的播放进度。

挂断电话后,重新调用 startAudioMixing 方法播放音乐文件,再调用 setAudioMixingPosition 方法恢复到之前的播放进度。

官网链接: https://docs.agora.io/cn/All/faq/music_pause


Q17:为什么通过系统音量无法调节背景音乐?

问题描述:在移动设备中,用户在后台播放背景音乐,加入 RTC 频道后,用户无法通过调节系统音量去改变背景音乐的音量。

问题原因:移动设备的音量类型分为通话音量和媒体音量。一般而言,音视频通话时使用通话音量,播放背景音乐时使用媒体音量。

详见如何区分媒体音量和通话音量? https://docs.agora.io/cn/All/faq/system_volume

用户加入 RTC 频道后,Agora RTC SDK 控制的音量类型决定了系统音量控制的音量类型。

当 SDK 控制通话音量,背景音乐使用媒体音量时,系统音量只能控制通话音量,无法调节背景音乐的音量。

解决方案:

方案一:用 startAudioMixing 播放背景音乐,让 SDK 同时控制背景音乐和通话声音。不论 SDK 使用的是通话音量还是媒体音量,用户都可以通过系统音量同时调节背景音乐和通话声音的音量。

方案二:把 setAudioProfile 的 scenario 参数设为 GAME_STREAMING/AgoraAudioScenarioGameStreaming,即将 SDK 使用的音量类型设置为媒体音量。成功设置后,用户可以通过系统音量同时调节背景音乐和通话声音的音量。

方案三:如果上述方案满足不了需求,你可以利用 Android 或 iOS 原生 API 拦截音量按键事件并调节音量。可参考如下文档:

Android: 通过 AudioManager

iOS: 通过 MPVolumeView

官网链接: https://docs.agora.io/cn/All/faq/adjust_music_volume