ttplayer绿色版 ttsplayer


ttplayer绿色版 ttsplayer


背景介绍在线教室场景下,声音是最重要的内容传输渠道之一,保障声音的稳定可靠 , 是在线教室质量非常重要的一环 。同时在线教室里许多功能模块都与声音有关联,如何处理好各个模块间的声音冲突成为一个重要话题 。
AVAudioSession在 iOS 端,说到声音的话题就绕不开 AVAudioSession 。AVAudioSession 的作用是管理音频这一唯一硬件资源的分配 , 通过调优合适的 AVAudioSession 来适配我们的 APP 对于音频的功能需求 。切换音频场景的时候,需要相应的切换 AVAudioSession 。

AVAudioSessionCategory教育场景下主要使用到的音频场景有:

AVAudioSessionModeiOS 提供 AVAudioSessionMode 用于与 AVAudioSessionCategory 搭配使用,教育场景下使用到的音频模式主要有:

AVAudioSessionOptions我们可以使用 options 去微调 Category 行为,教育场景下常用的有:

通话音量与媒体音量一般而言,通话音量指的是进行语音、视频通话时的音量 。媒体音量指的是播放音乐、视频或游戏的音效、背景音的音量 。
在实际使用中,两者的差异在于,通话音量有较好的回声消除,媒体音量有较好的声音表现力 。媒体音量可以调整到 0,而通话音量不可以 。
通话音量与媒体音量只能二选一,因此需要区分系统音量走的是通话音量还是媒体音量 。系统音量走通话音量,是指在设备上调整音量时,调整的是通话音量 。媒体音量同理 。媒体音量和通话音量分别属于 2 个不同的、独立的系统,一个设置不会影响到另外一个 。
进入通话后,音效的播放音量由通话音量控制 。退出通话后,则由媒体音量控制 。一般在教育场景下,学生作为观众拉流时,使用的媒体音量,老师说话的声音更加立体饱满,当学生连麦时 , 使用的通话音量,以保证通话声音的质量 。
简单来说,非连麦模式下会使用媒体音量控制 , 连麦模式下会使用通话音量控制,两者有独立的音量控制机制 。

当播放媒体资源时 , 使用播放器(如 AVPlayer)播放音频,播放器底层 AudioUnit 的 description 为 VoiceProcessingIO 。
RTC SDK 内部维护了一个 AudioUnit,通话音量下 AudioUnit 的 description 为 RemoteIO,媒体音量下为 VoiceProcessingIO,当出现模式切换时,会销毁原来的 AudioUnit , 再创建新的 AudioUnit,始终保持一个 AudioUnit 来进行音频播放 。
通话音量下 , AVPlayer 内 VoiceProcessingIO 的 AudioUnit 声音会被抑制 。同样的,在媒体音量下,RTC SDK 内的 AudioUnit 的 description 设置为 VoiceProcessingIO,如果此时其他模块通过设置 AVAudioSession 切换到通话音量 , RTC 的声音也会被抑制 。
行业现状在线教室场景下 , 很多功能都需要播放声音,包括课中音视频直播、课后回放、webview 内嵌课件声音(包括音频、视频、音效)、课堂音频、课堂视频、课堂游戏声音、音效声音等 。除此之外 , 教室内还包括很多需要声音录制的功能,包括连麦、跟读、集体发言、聊天语音输入、语音识别等 。
教室内这些功能存在各种组合,且对 AVAudioSession 的设置要求存在差异 , 而 AVAudioSession 又是一个单例,如果没有一个统一管理的逻辑,很容易就出现设置混乱的问题 。

推荐阅读