searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

[WebRTC架构分析]本地音频数据录制和播放

2024-11-20 09:15:19
1
0

WebRTC 对音频设备部分封装比较简单,结构非常清晰,容易理解。

  • AudioDeviceModule 实现了 WebRTC 的模块规范。实现类 AudioDeviceModuleImpl 是各个平台的通用实现。
  • AudioDeviceGeneric 是音频设备的一个抽象接口类,提供了一组虚函数,对音频设备的录制和播放做了一层抽象。
  • AudioDeviceWindowsCore 是 Windows 系统 Audio Core 的封装。Windows 系统相关 API 调用都封装在此类中,主要是音频采集和播放相关 API 的调用。
  • AudioDeviceBuffer 用于保存采集到的音频数据。AudioDeviceBuffer 的实例是由 AudioDeviceModuleImpl 持有,AudioDeviceWindowsCore 只是引用了一个指针。
  • AudioTransport 是 Audio Device 模块对外提供数据输出、输入的接口。
  • AudioDeviceModule 暴露了 RegisterAudioCallback 函数,用于向AudioDeviceBuffer 注册接收音频数据的实例。
  • ADMWrapper 是对 AudioDeviceModule 的一个包装,是为了使用的方便,对外通过 AudioDeviceDataObserver 来实现数据的输入、输出。
  • AudioDeviceDataObserver 类似 AudioTransport 的作用。

音频设备既有录音设备也有播放设备。比如,麦克风、耳机、音响等。音频采集也叫录音过程,或者是音频数据捕获(capture)过程。音频播放,有时也叫音频数据渲染(render)过程。采集与播放是两个相反的过程,所以编程实现逻辑也略有差异,我们分两部分来分析。

音频数据采集过程

音频数据的采集过程,是从音频设备(比如麦克风)采集声音,然后将数字化的音频数据发送给应用程序。

  1. AudioDeviceModule 提供了一个工厂方法用于创建 AudioDeviceModule 实例。
  2. 调用 AudioDeviceModule::Init 方法初始化 AudioDevice,主要是根据不同平台的类型,创建相应平台的 AudioDevice。比如,在windows 上是创建 AudioDeviceWindowsCore。
  3. 调用 AudioDeviceModule::RegisterAudioCallback 注册一个接收或者发送音频数据的类的实例,此类需要实现 AudioTransport 接口。
  4. 调用 AudioDeviceModule::SetRecordingDevice 方法设置录音设备,参数是录音设备的索引。在 Windows 上可以传入参数。 webrtc::AudioDeviceModule::WindowsDeviceType::kDefaultCommunicationDevice。
  5. 调用 AudioDeviceModule::InitRecording 方法初始化录音逻辑。
  6. 通过 AudioDeviceModule::StartRecording 启动录音。
  7. 通过调用 AudioDeviceModule::StopRecording 方法停止录音。
  8. 如果停止音频设备,需要调用 AudioDeviceModule::Terminate 来释放资源。

通过以上 1-6 步骤就可以采集到音频的 PCM 数据。

音频数据回放过程

音频数据的回放过程是从应用程序获取数字语音数据,然后送给喇叭或者是耳机播放出来。

  • AudioDeviceModule 提供了一个工厂方法用于创建 AudioDeviceModule 实例。
  • 调用 AudioDeviceModule::Init 方法初始化 AudioDevice,主要是根据不同平台的类型,创建相应平台的 AudioDevice。比如,在windows 上是创建 AudioDeviceWindowsCore。
  • 调用 AudioDeviceModule::RegisterAudioCallback 注册一个接收或者发送音频数据的类的实例,此类需要实现 AudioTransport 接口。
  • 调用 AudioDeviceModule::SetPlayoutDevice 方法设置播放设备,参数是播放设备的索引。在 Windows 上可以传入参数。 webrtc::AudioDeviceModule::WindowsDeviceType::kDefaultCommunicationDevice。
  • 调用 AudioDeviceModule::InitPlayout 方法初始化声音播放逻辑。
  • 通过 AudioDeviceModule::StartPlayout 方法启动播放。
  • 通过调用 AudioDeviceModule::StopPlayout 方法停止播放。
  • 如果停止音频设备,需要调用 AudioDeviceModule::Terminate 来释放资源。
0条评论
0 / 1000
w****6
3文章数
0粉丝数
w****6
3 文章 | 0 粉丝
原创

[WebRTC架构分析]本地音频数据录制和播放

2024-11-20 09:15:19
1
0

WebRTC 对音频设备部分封装比较简单,结构非常清晰,容易理解。

  • AudioDeviceModule 实现了 WebRTC 的模块规范。实现类 AudioDeviceModuleImpl 是各个平台的通用实现。
  • AudioDeviceGeneric 是音频设备的一个抽象接口类,提供了一组虚函数,对音频设备的录制和播放做了一层抽象。
  • AudioDeviceWindowsCore 是 Windows 系统 Audio Core 的封装。Windows 系统相关 API 调用都封装在此类中,主要是音频采集和播放相关 API 的调用。
  • AudioDeviceBuffer 用于保存采集到的音频数据。AudioDeviceBuffer 的实例是由 AudioDeviceModuleImpl 持有,AudioDeviceWindowsCore 只是引用了一个指针。
  • AudioTransport 是 Audio Device 模块对外提供数据输出、输入的接口。
  • AudioDeviceModule 暴露了 RegisterAudioCallback 函数,用于向AudioDeviceBuffer 注册接收音频数据的实例。
  • ADMWrapper 是对 AudioDeviceModule 的一个包装,是为了使用的方便,对外通过 AudioDeviceDataObserver 来实现数据的输入、输出。
  • AudioDeviceDataObserver 类似 AudioTransport 的作用。

音频设备既有录音设备也有播放设备。比如,麦克风、耳机、音响等。音频采集也叫录音过程,或者是音频数据捕获(capture)过程。音频播放,有时也叫音频数据渲染(render)过程。采集与播放是两个相反的过程,所以编程实现逻辑也略有差异,我们分两部分来分析。

音频数据采集过程

音频数据的采集过程,是从音频设备(比如麦克风)采集声音,然后将数字化的音频数据发送给应用程序。

  1. AudioDeviceModule 提供了一个工厂方法用于创建 AudioDeviceModule 实例。
  2. 调用 AudioDeviceModule::Init 方法初始化 AudioDevice,主要是根据不同平台的类型,创建相应平台的 AudioDevice。比如,在windows 上是创建 AudioDeviceWindowsCore。
  3. 调用 AudioDeviceModule::RegisterAudioCallback 注册一个接收或者发送音频数据的类的实例,此类需要实现 AudioTransport 接口。
  4. 调用 AudioDeviceModule::SetRecordingDevice 方法设置录音设备,参数是录音设备的索引。在 Windows 上可以传入参数。 webrtc::AudioDeviceModule::WindowsDeviceType::kDefaultCommunicationDevice。
  5. 调用 AudioDeviceModule::InitRecording 方法初始化录音逻辑。
  6. 通过 AudioDeviceModule::StartRecording 启动录音。
  7. 通过调用 AudioDeviceModule::StopRecording 方法停止录音。
  8. 如果停止音频设备,需要调用 AudioDeviceModule::Terminate 来释放资源。

通过以上 1-6 步骤就可以采集到音频的 PCM 数据。

音频数据回放过程

音频数据的回放过程是从应用程序获取数字语音数据,然后送给喇叭或者是耳机播放出来。

  • AudioDeviceModule 提供了一个工厂方法用于创建 AudioDeviceModule 实例。
  • 调用 AudioDeviceModule::Init 方法初始化 AudioDevice,主要是根据不同平台的类型,创建相应平台的 AudioDevice。比如,在windows 上是创建 AudioDeviceWindowsCore。
  • 调用 AudioDeviceModule::RegisterAudioCallback 注册一个接收或者发送音频数据的类的实例,此类需要实现 AudioTransport 接口。
  • 调用 AudioDeviceModule::SetPlayoutDevice 方法设置播放设备,参数是播放设备的索引。在 Windows 上可以传入参数。 webrtc::AudioDeviceModule::WindowsDeviceType::kDefaultCommunicationDevice。
  • 调用 AudioDeviceModule::InitPlayout 方法初始化声音播放逻辑。
  • 通过 AudioDeviceModule::StartPlayout 方法启动播放。
  • 通过调用 AudioDeviceModule::StopPlayout 方法停止播放。
  • 如果停止音频设备,需要调用 AudioDeviceModule::Terminate 来释放资源。
文章来自个人专栏
实时音视频
2 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0