【端午节社区活动】文档找茬挑战赛


#42

https://docs.agora.io/cn/Interactive%20Broadcast/API%20Reference/web/interfaces/agorartc.client.html#enableaudiovolumeindicator


#43

https://docs.agora.io/cn/Interactive%20Broadcast/API%20Reference/web/interfaces/agorartc.stream.html#getaudiolevel


#44

链接:https://docs.agora.io/cn/Video/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_rtc_engine.html#abb16ab61cebb6c676e1aab61030c3181
(其他平台同样的)

问题:setLogFilter方法等级描述不清晰,让人迷惑到底哪个设置才会拿到最全的日志。

建议:等级由日志最全到日志最少排序,同时说明下什么情况下建议用什么设置来获取所需日志。比如平时问题比较多建议开启debug级别日志好调查。


#45

链接:https://docs.agora.io/cn/Video/API%20Reference/cpp/classagora_1_1rtc_1_1_rtc_engine_parameters.html#a24ea74e7c6aa6063009a00cf636c0451

问题: enableLocalVideo方法说明里“该方法用于只看不发的视频场景”这句话不严谨;

建议:改成“当enableLocalVideo设置为false时该方法用于只看不发的场景”


#46

https://docs.agora.io/cn/Interactive%20Broadcast/API%20Reference/java/interfaceio_1_1agora_1_1rtc_1_1_i_audio_frame_observer.html#a386c3a451ce95f796d64e83006d7779c


#47

https://docs.agora.io/cn/Interactive%20Broadcast/API%20Reference/java/interfaceio_1_1agora_1_1rtc_1_1_i_audio_frame_observer.html#a3781dd30d34a0634140872a9dd131488
image


#48

https://docs.agora.io/cn/Interactive%20Broadcast/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_rtc_engine.html#a682a8c493660bb565a38869dcc84c73e


#49

已修改:https://docs.agora.io/cn/Video/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_i_rtc_engine_event_handler.html#a76be982389183c5fe3f6e4b03eaa3bd4
谢谢。


#50

已修复:


谢谢。


#51

修复方式:http改为https https://docs.agora.io/en/Agora%20Platform/dashboard_restful_communication?platform=All%20Platforms#6-online-statistics-query-api

谢谢。


#52

已删除note中这一条:https://docs.agora.io/en/Voice/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_rtc_engine.html#a8f89328fab2054d74f9dfa7819458866

谢谢。


#53

https://docs.agora.io/cn/Interactive%20Broadcast/push_stream_android2.0?platform=Android
image


#54

https://docs.agora.io/cn/Voice/API%20Reference/java/index.html


#55

Java确实是没有这几个回调的,但是Android上可以调用C++的这几个回调,在2.4.1的API文档首页会refer过去。


#56

https://docs.agora.io/cn/Audio%20Broadcast/rawdata_android_audio?platform=Android#修改语音数据


#57

贡献一下之前整理的FAQ,便于用户横向了解SDK的功能以及用法:

joinChannel常见问题:
Q1:调用joinChannel返回0就代表加入频道成功了吗?
A1:返回0只代表方法调用成功,不代表用户已经成功加入声网频道。如果SDK加入频道成功,Android端会回调onJoinChannelSuccess,SDK2.4.0以后除了onJoinChannelSuccess以外还会同时回调onConnectionStateChanged( Connection_State_Connected )表示SDK与媒体服务器已连接。

Q2:如果用户加入频道时断网,SDK的表现是什么?
A2:SDK2.3.2以前,4s内无法加入频道则回调onConnectionInterrupted,10s内无法加入频道则回调onConnectionLost。
SDK2.4.0以后,10s内无法加入频道则回调onConnectionStateChanged( Connection_State_Connecting )并持续尝试连接媒体服务器。

Q3:为什么用户“加入”频道后无声/黑屏?
A3:首先具体问题要具体分析。
另外,常见的一类问题是:用户加入房间( 应用层调用信令加入房间,同时调用joinChannel加入声网频道 )成功,但因为弱网导致加入声网频道失败,所以出现无声和黑屏。但用户以为加入房间成功( 未成功加入声网频道 )就应该出声出图,这时造成用户体验下降。
针对该场景:建议应用端发送joinChannel请求后20s内没有收到onJoinChannelSuccess回调( 大概率弱网导致加入频道失败 ),提示客户由于网络质量差未成功加入房间,请用户更换网络,并尝试重新加入频道。

Q4:为什么加入频道会失败?A4:首先,具体问题需要具体分析,UDP端口被封、客户端弱网、小运营商等情况都有可能导致加入频道失败。
另外,常见的一类问题是:频道内用户调用joinChannel加入新频道,导致加入新频道失败,这时SDK回调onError=17( Err_Join_Channel_Rjected )。可能的原因是:信令退出房间失败、leaveChannel时用户kill应用进程、应用突然hang、突然断网等情况。
针对该场景:建议应用端在joinChannel前调用leaveChannel,防止小概率用户在频道内没有正常退出的情况。频道外用户调用leaveChannel会回调onError=18( Err_Leave_Channel_Rejected ),这个属于正常告警,可以忽略。

Q5:为什么会出现互踢?互踢出现的原因以及规避方法是什么?
A5:用户使用两个不同设备以同一账号登陆( 应用分配相同UID )并且加入相同声网频道会出现异常表现,如果两次登陆的Session被分配到相同媒体服务器,则后登陆的账号会踢掉先登陆的账号;如果两次登陆Session被分配到不同的媒体服务器,则媒体服务器会随机发送音视频流,因此用户出现音视频卡顿的现象。
针对该场景:建议应用端评估如果多设备使用相同账号登陆可分配不同UID或者禁止多设备同账号登陆,避免出现互踢问题。

Q6:用户加入频道需要指定UID吗?
A6:最终用户joinChannel时如果不指定UID,SDK会给登陆成功的用户随机分配一个UID。
建议最终用户加入频道时指定APPID全局唯一UID,便于出现问题时快速通过UID定位问题用户,提高问题处理效率。

异常掉线常见问题:
Q1:SDK判定离线的机制是什么?
A1:SDK与媒体服务器每2秒发起一次PingPong同步消息,用于计算RTT、流订阅等功能。如果SDK连续4秒没有收到媒体服务器的任何数据包( 音视频数据包、广播包等 ),SDK会判断自己处于掉线状态,并尝试重新连接媒体服务器。

Q2:如何统计每日客户端重连次数?
A2:由于弱网或者网络连接中断,如果SDK连续4秒无法加入频道会回调onConnectionStateChanged( Connection_State_Reconnecting, Connection_Changed_Interrupted ) ,如果SDK连续10秒无法加入频道会回调onConnectionLost。建议如果onConnectionLost后10秒内SDK无法成功加入频道( 没有收到onRejoinChannelSuccess回调 ),则应用层判定用户掉线,并提示用户检查网络连接并重新加入声网频道。

Q3:onUserOffline/onUserOnline回调准确吗?
A3:准确。如果UID1正常离线,离线消息在频道内进行UDP广播,如果UID2收到UID1主动离线的UDP广播包则本地回调onUserOffline( reason leave ),但是因为广播包是UDP格式,存在丢失风险。如果UID2在T4时间点没有收到UID1主动离线的UDP广播包则会等20s后触发超时判断阈值回调onUserOffline( reason dropped )

Q1:一起看电影场景,客户期望如果连麦用户离线,则本地用户直接退出频道。推荐的判断机制是什么?
A1:建议通过以下两个条件作为本地用户离线的判断前置条件:(条件1)本地应用收到远端用户离线回调onUserOffline( reason dropped ),表示连续20秒SDK未收到远端用户任何数据包,建议提示本地用户:远端连麦用户已异常掉线;
(条件2)本地应用收到远端用户离线回调onUserOffline( reason leave ),表示远端用户调用leaveChannel退出频道,建议提示本地用户:远端连麦用户已下线。防止出现远端用户已经下线但本地用户仍以为对端用户在线的情况

Q1:如果持续弱网,应用层会持续收到onConnectionLost回调吗?
A1:不会。如果客户端SDK持续无法连接到媒体服务器,onConnectionLost只会回调一次;只有成功连接后又断开网络,才会再次回调onConnectionLost。同理,onConnectionStateChanged( Connection_State_Reconnecting, Connection_Changed_Interrupted ) 只会在连续断网4秒时回调一次,如果持续弱网不会多次回调。因为该回调表明SDK引擎连接状态的变化,只要连接状态没有改变,就不会重复回调。


#58

通话质量检测回调横向整理总结,帮助客户更好理解质量回调:

【通话前设备测试】:

调用startEchoTest对本地音频设备( 麦克风/扬声器 ) 和网络连接进行测试,可以排除音频设备硬件故障,但需要用户配合说话测试是否可以正常听到声音。
测试原理:echoTest开始后SDK会启动麦克风采集声音,用户可以说话,SDK将音频数据发送到媒体服务器,服务器10s后echo回SDK,然后送到音频引擎播放。如果一切正常,用户会在10秒后听到他刚才说的话。
注意事项:echoTest需要获取麦克风权限,只能在通信模式和直播模式+主播角色工作,另外10s的echo间隔目前无法按需配置。

【通话中质量监控】:
onNetworkQuality(每2秒回调一次) 通话中每个客户端上下行LastMile网络质量,如果远端有多个用户,该回调每2s会被触发多次,发现网络差提示人工干预更换网络 (建议Native端2.3.3版本后使用该接口);
onLocalVideoStats(每2秒回调一次) 本地视频流上传统计信息;
onRemoteVideoStats(每2秒回调一次) 判断远端视频质量:延迟/码率/帧率信息;
onRtcStats(每2秒回调一次) 收集上行发送码率,下行接收码率,流量,客户端CPU使用率;
onRemoteAudioTransportStats监控每个用户E2E音频传输延时/丢包/接收码率;(iOS平台远端音频流传输的统计信息回调)audioTransportStatsOfUid
onRemoteVideoTransportStats监控每个用户E2E视频传输延时/丢包/接收码率。

【音视频质量监控】:

  1. onRemoteVideoStateChanged监控远端用户视频流状态发生变化的回调,该回调在两个视频帧间隔≥600ms时触发;
  2. onRemoteAudioStats(每2秒回调一次)判断远端音频质量:Quality/delay/lost。
    音质(Quality)表示远端用户发送音频流质量;
    延迟(Delay)/丢包率(Lost)表示本地音频流接收质量,可能是本地下行网络或者远端上行网络导致的。
  3. onAudioVolumeIndication()收集频道内用户音量值,判断客户端采集音量是否正常,该音量回调只取本地收到的远端音量中最大的3路,设计初衷是超过3个人说话就听不清了,自己说话音量UID=0
  4. onRecordFrame()验证音频前处理阶段麦克风采集的声音是否有问题;
  5. getRecordingDeviceVolume()获取录音设备音量:仅限Windows平台,Native端没有相关接口。

【旁路推流质量监控】:
onFirstLocalAudioFrame回调表示:本地推流是否成功;
onFirstRemoteAudioFram回调表示:远端拉留是否成功。


#59

https://docs.agora.io/cn/Interactive%20Broadcast/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_rtc_engine.html#aa4b5ad92783b3657a9845f02f143f4d6
image


#60

中英文已统一:https://docs.agora.io/en/Agora%20Platform/firewall?platform=All%20Platforms,谢谢。


#61

官网文档已修复:https://docs.agora.io/cn/Interactive%20Broadcast/API%20Reference/java/classio_1_1agora_1_1rtc_1_1_i_rtc_engine_event_handler.html#aee0aa9286a39654312b162750713e986