NetEQ主要文件简介
-
accelerate.h
,accelerate.cc
加速操作,对语音信号处理以实现快速播放。
Accelerate
类继承自父类TimeStretch
,大多数功能由TimeStretch
实现。ReturnCodes Process(const int16_t* input, size_t input_length, bool fast_accelerate, AudioMultiVector* output, size_t* length_change_samples);
从|input|中读入长度为|input_length|的样本点;输出到算法缓冲区|output|中;改动的样本点数为|length_change_samples|;当fast_accelerate设置为True时,将删除更多的样本点,这有可能会导致删除多个音高周期。函数返回枚举值
RetureCodes
,表明操作的状态。附:
ReturnCodes
定义:enum ReturnCodes { kSuccess = 0, kSuccessLowEnergy = 1, kNoStretch = 2, kError = -1 };
-
audio_multi_vector.h
,audio_multi_vector.cc
算法缓冲区
AudioMultiVector
的实现:std::vector<AudioVector*> channels_; // AudioMultiVector
方法:
// 创建一个有N个声道且空的AudioMultiVector,声道数N必须大于0 explicit AudioMultiVector(size_t N); // 需要附加的数据append_this,附加数据长度length // 在每个声道后增加append_this数据,length必须可以整除声道数N,操作完成后每个声道增加length/N个样本点 virtual void PushBackInterleaved(const int16_t* append_this, size_t length); // 在每个声道后附加append_this数据,操作完成后每个声道增加length个样本点 virtual void PushBack(const AudioMultiVector& append_this); // 取append_this的index到最后,附加到AudioMultiVector // 注意:append_this和this的声道数一致 virtual void PushBackFromIndex(const AudioMultiVector& append_this, size_t index); // 从每个声道删除最前面的length个样本点 virtual void PopFront(size_t length); // 从每个声道删除最后面的length个样本点 virtual void PopBack(size_t length); ...
类似于标准库中的
Vector
顺序容器。 -
audio_vector.h
,audio_vector.cc
AudioVector
保存上述AudioMultiVector
的每一个通道的数据。 -
background_noise.h
,background_noise.cc
产生背景噪声。经VAD之后,如果没有语音,则产生背景噪声。
-
buffer_level_filter.h
,buffer_level_filter.cc
计算抖动缓冲延迟
bufferBufferFilt
? -
comfort_noise.h
,comfort_noise.cc
CNG(舒适背景噪声)生成接口类。
-
cross_correlation.h
,cross_correlation.cc
计算两个序列的互相关系数。互相关系数有很多,到底是计算哪个互相关系数?
-
decision_logic_fax.h
,decision_logic_fax.cc
播放模式
kPlayoutFax
和kPlayoutOff
的决策逻辑。播放模式
kPlayoutFax
和kPlayoutOff
具体是什么? -
decision_logic_normal.h
,decison_logic_normal.cc
播放模式
kPlayoutOn
和kPlayoutStreaming
的决策逻辑。 -
decision_logic.h
,decision_logic.cc
包含决策逻辑的基类
DecisionLogic
,所有子类必须实现:virtual Operations GetDecisionSpecialized(const SyncBuffer& sync_buffer, const Expand& expand, size_t decoder_frame_length, const Packet* next_packet, Modes prev_mode, bool play_dtmf, bool* reset_decoder, size_t generated_noise_samples) = 0;
返回接下来的操作。
-
decoder_database.h
,decoder_database.cc
decoders_
:typedef std::map<uint8_t, DecoderInfo> DecoderMap; DecoderMap decoders_; // 键值对decoders_用来存储decoder的信息
DecoderInfo
是定义在decoder_database.h
中结构体,用于保存音频格式,解码器名称等信息。 -
delay_manager.h
,delay_manager.cc
delay_peak_detector.h
,delay_peak_detector.cc
统计IAT的峰值,这在计算网络延时时需要用到。
-
dsp_helper.h
,dsp_helper.cc
DSP
辅助类,包含各种信号处理函数。 -
dtmf_buffer.h
,dtmf_buffer.cc
DTMF(RFC 4733)辅助类,包括提供保存DTMF事件缓冲区。
DTMF:双音多频信号DTMF,电话系统中电话机和交换机之间的一种用户信令。
-
dtmf_tone_generator.h
,dtmf_tone_generator.cc
DTMF信号生成器。
-
expand.h
,expand.cc
抖动隐藏的一种操作:
EXPAND
,丢包补偿(PLC) -
merge.h
,merge.cc
抖动隐藏的一种操作:
MERGE
,融合 -
nack_tracker.h
,nack_tracker.cc
包含
NackTracker
类,追踪丢失的数据包,并且估计给定数据包播放时间的估计值。 -
neteq_decoder_enum.h
,neteq_decoder_enum.cc
NetEQ解码器的枚举值
-
neteq_impl.h
,neteq_impl.cc
NetEQ接口,包含最外层主要实现函数,比如输入RTP包和输出音频。
-
neteq.cc
NetEQ主函数入口,实例化
NetEqImpl
对象。 -
normal.h
,normal.cc
DSP的正常播放操作。适用于没有任何数据包丢失,不需要伸缩音频信号,也不需要特殊操作的情况。
-
packet_buffer.h
,packet_buffer.cc
存储从网络中获得的RTP数据包,这些数据包还没有通过解码器解码。
typedef std::list<Packet> PacketList;
-
packet.h
,packet.cc
作为PacketBuffer
的一个元素。 -
post_decode_vad.h
,post_decode_vad.cc
解码后,进行VAD?
-
preemptive_expand.h
,preemptive_expand.cc
减速播放操作。大多数操作由父类
TimeStretch
实现。ReturnCodes Process(const int16_t *pw16_decoded, size_t len, size_t old_data_len, AudioMultiVector* output, size_t* length_change_samples);
由
pw16_decoded
读入,样本数len
,通过time-stretching
增加的样本数为length_change_samples
。 -
random.vector.h
,random_vector.cc
生成随机样本。
void Generate(size_t length, int16_t* output);
生成length个样本,输出到output中去。
-
red_playload_splitter.h
,red_playload_splitter.cc
将
RED
负载分割成小块。 -
rtcp.h
,rtcp.cc
处理RTCP的统计信息。
-
statistics_caculator.h
,statistics_caculator.cc
NetEQ中的各种网络统计信息,包括通过
EXPAND
产生的样本数,丢弃的数据包等。 -
sync_buffer.h
,sync_buffer.cc
提供语音缓冲区实现类
SyncBuffer
-
tick_timer.h
,tick_timer.cc
时间计数器。提供包括秒表,倒计时等功能。
-
time_stretch.h
,time_stretch.cc
加速
Accelerate
和减速PreemptiveExpand
操作的基类,并实现大部分功能。 -
timestamp_scaler.h
,timestamp_scaler.cc
提供类
TimestampScaler
,用于内部时间戳和外部时间戳的转换。内部时间戳使用采样率作为单位,而外部时间戳(RTP自身携带的时间戳)使用固有的时钟频率。