标签:数据压缩 嵌入式 部分 ted 抽样 over rpc 离散化 应用
[Code:webrtc\src\api\audio_codecs\]
[Code:modules\audio_coding\codecs\]
WebRTC默认是采用OPUS编码。
WebRTC中默认是采用Opus编码,Opus编码是由silk编码和celt编码合并在一起,silk编码是由skype公司开源的一种语音编码,特别适合人声,适合于Voip语音通信。celt和mp3,aac类似,适合于传输音乐。Opus编码具备以下特点:
* 6 kb /秒到510 kb / s的比特率
* 采样率从8 kHz(窄带)到48 kHz(全频)
* 帧大小从2.5毫秒到60毫秒
* 支持恒定比特率(CBR)和可变比特率(VBR)
* 从窄带到全频段的音频带宽
* 支持语音和音乐
* 支持单声道和立体声
* 支持多达255个频道(多数据流的帧)
* 可动态调节比特率,音频带宽和帧大小
* 良好的鲁棒性丢失率和数据包丢失隐藏(PLC)
* 浮点和定点实现
WebRTC中要使用Opus编码,首先在SDP中要有以下定义:
* a=rtpmap:111 *opus*/*48000*/2
* a=rtcp-fb:111 transport-cc
* a=fmtp:111 minptime=*10*;useinbandfec=1
* 以上的WebRTC产生的默认配置,这种配置下,音频采样率是48000,音频打包时间是10ms,单声道,编码采用的是Opus里面的silk编码,适合传人声,不适合传音乐。
[Code:modules\audio_coding\codecs\opus\]
PCM 脉冲编码调制是Pulse Code Modulation的缩写。脉冲编码调制是数字通信的编码方式之一。主要过程是将话音、图像等模拟信号每隔一定时间进行取样,使其离散化,同时将抽样值按分层单位四舍五入取整量化,同时将抽样值按一组二进制码来表示抽样脉冲的幅值。
模拟信号数字化必须经过三个过程,即抽样、量化和编码。
人对频率的识别范围是 20HZ ## 20000HZ, 如果每秒钟能对声音做 20000 个采样, 回放时就足可以满足人耳的需求.
* 8000hz 为电话采样。
* 22050 的采样频率是常用的。
* 44100已是CD音质, 超过48000的采样对人耳已经没有意义。
* 一般情况下,一帧PCM是由2048次采样组成的。
每个采样数据记录的是振幅, 采样精度取决于储存空间(采样位数)的大小:
* 1 字节(也就是8bit) 只能记录 256 个数, 也就是只能将振幅划分成 256 个等级
* 2 字节(也就是16bit) 可以细到 65536 个数, 这已是 CD 标准了;
* 如果是双声道(stereo), 采样就是双份的, 文件也差不多要大一倍.
码率是指经过编码后的音频数据每秒钟需要用多少个比特来表示
一般都是指传统CD格式中的16bit/44.1kHz采样率的文件格式
//采样位数:高低8位,拼接成16bit。
size_t WebRtcPcm16b_Decode() {
for (i = 0; i < len / 2; ++i)
speech[i] = encoded[2 * i] << 8 | encoded[2 * i + 1];
}
//采样频率:支持8K, 16k, 32k, 48k
AudioDecoderPcm16B::AudioDecoderPcm16B(int sample_rate_hz, size_t num_channels)
: sample_rate_hz_(sample_rate_hz), num_channels_(num_channels) {
RTC_DCHECK(sample_rate_hz == 8000 || sample_rate_hz == 16000 ||
sample_rate_hz == 32000 || sample_rate_hz == 48000)
<< "Unsupported sample rate " << sample_rate_hz;
RTC_DCHECK_GE(num_channels, 1);
}
[Code:modules\audio_coding\codecs\pcm16b\]
是一种宽带和超宽带音频编码器。
[Code:modules\audio_coding\codecs\isac]
一种窄带语音编解码器,可以保证低带宽条件下较好的音质,采样频率:8khz;20ms每帧时比特率为15.2kbps;30ms每帧时比特率为13.33kbps
[Code:modules\audio_coding\codecs\ilbc\]
一种由国际电信联盟(ITU-T)制定的音频编码方式,又称为ITU-T G.711。它代表了对数PCM(logarithmic pulse-code modulation)抽样标准,主要用于电话。它主要用脉冲编码调制对音频采样,采样率为8k每秒。它利用一个 64Kbps 未压缩通道传输语音讯号。 起压缩率为1:2, 即把16位数据压缩成8位。G.711是主流的波形声音编解码器。20ms打包,带宽为 ( 528/20 + 64) Kbit/s=90.4 Kbit/s
G.711是最基本的一种编码方法,俗称PCM,采用μ-law(主要北美地区使用)和A-law(其它地区)两种非线性量化方法进行压缩。说它“基本”是因为一方面PCM算法非常简单,很多ADC硬件的输入输出就直接支持PCM格式;另一方面PCM格式在通信系统中往往需要进一步压缩,因此它是其它语音编码算法的输入源。
[Code:modules\audio_coding\codecs\g711\]
G.722.1是由Polycom提出的一套低码率低复杂度的宽带语音编码算法,主要采用了变换域编码方法,因此可以对语音(300~4000Hz)和7kHz以内的音乐进行编码,采样率为16kHz,其32kbps码率的重建语音质量相当于64 kbps G.722 SB-ADPCM。在实际的应用中,本算法在低码率时其音质要高于MP3等音频算法,再加上算法低复杂度非常适合嵌入式平台通信、存储应用。最后,它的附录C中提供了32kHz采样的14k带宽的音频编码方案,进一步提高了音质。
[Code:modules\audio_coding\codecs\g722\]
gather the two latest encodings from the underlying codec into one packet
一个包内包含两种编码后的数据。
[Code:modules\audio_coding\codecs\red\]
*官方解释:RED (REDundant coding) * The primary motivation of sending redundant data is to be able to recover packets lost under lossy network conditions. If a packet is lost then the missing information may be reconstructed at the receiver from the redundant data that arrives in the following packet(s).
// secondary data.
AudioEncoder::EncodedInfo AudioEncoderCopyRed::EncodeImpl(){
if (secondary_info_.encoded_bytes > 0) {
encoded->AppendData(secondary_encoded_);
info.redundant.push_back(secondary_info_);
RTC_DCHECK_EQ(info.redundant.size(), 2);
}
}
标签:数据压缩 嵌入式 部分 ted 抽样 over rpc 离散化 应用
原文地址:https://www.cnblogs.com/herryzz/p/13195598.html