Artem Titov | a617867 | 2023-01-30 10:51:01 | [diff] [blame] | 1 | <!-- go/cmark --> |
| 2 | <!--* freshness: {owner: 'hlundin' reviewed: '2021-04-13'} *--> |
Minyue Li | 0498519 | 2021-04-14 07:07:11 | [diff] [blame] | 3 | |
| 4 | # The WebRTC Audio Coding Module |
| 5 | |
| 6 | WebRTC audio coding module can handle both audio sending and receiving. Folder |
| 7 | [`acm2`][acm2] contains implementations of the APIs. |
| 8 | |
| 9 | * Audio Sending Audio frames, each of which should always contain 10 ms worth |
| 10 | of data, are provided to the audio coding module through |
| 11 | [`Add10MsData()`][Add10MsData]. The audio coding module uses a provided |
| 12 | audio encoder to encoded audio frames and deliver the data to a |
| 13 | pre-registered audio packetization callback, which is supposed to wrap the |
| 14 | encoded audio into RTP packets and send them over a transport. Built-in |
| 15 | audio codecs are included the [`codecs`][codecs] folder. The |
| 16 | [audio network adaptor][ANA] provides an add-on functionality to an audio |
| 17 | encoder (currently limited to Opus) to make the audio encoder adaptive to |
| 18 | network conditions (bandwidth, packet loss rate, etc). |
| 19 | |
| 20 | * Audio Receiving Audio packets are provided to the audio coding module |
| 21 | through [`IncomingPacket()`][IncomingPacket], and are processed by an audio |
| 22 | jitter buffer ([NetEq][NetEq]), which includes decoding of the packets. |
| 23 | Audio decoders are provided by an audio decoder factory. Decoded audio |
| 24 | samples should be queried by calling [`PlayoutData10Ms()`][PlayoutData10Ms]. |
| 25 | |
Tony Herre | b0ed120 | 2021-07-22 15:40:44 | [diff] [blame] | 26 | [acm2]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/modules/audio_coding/acm2/;drc=854d59f7501aac9e9bccfa7b4d1f7f4db7842719 |
| 27 | [Add10MsData]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/modules/audio_coding/include/audio_coding_module.h;l=136;drc=d82a02c837d33cdfd75121e40dcccd32515e42d6 |
| 28 | [codecs]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/modules/audio_coding/codecs/;drc=883fea1548d58e0080f98d66fab2e0c744dfb556 |
| 29 | [ANA]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/modules/audio_coding/audio_network_adaptor/;drc=1f99551775cd876c116d1d90cba94c8a4670d184 |
| 30 | [IncomingPacket]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/modules/audio_coding/include/audio_coding_module.h;l=192;drc=d82a02c837d33cdfd75121e40dcccd32515e42d6 |
| 31 | [NetEq]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/modules/audio_coding/neteq/;drc=213dc2cfc5f1b360b1c6fc51d393491f5de49d3d |
| 32 | [PlayoutData10Ms]: https://source.chromium.org/chromium/chromium/src/+/main:third_party/webrtc/modules/audio_coding/include/audio_coding_module.h;l=216;drc=d82a02c837d33cdfd75121e40dcccd32515e42d6 |