zoukankan      html  css  js  c++  java
  • 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

      播放模式kPlayoutFaxkPlayoutOff的决策逻辑。

      播放模式kPlayoutFaxkPlayoutOff具体是什么?

    • decision_logic_normal.h,decison_logic_normal.cc

      播放模式kPlayoutOnkPlayoutStreaming的决策逻辑。

    • 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自身携带的时间戳)使用固有的时钟频率。

  • 相关阅读:
    ScriptManager在客户端来调用服务器端方法或者webService的方法
    转2010 .NET面试题整理之基础篇
    .net 面试题1
    读写文件
    三种编解码方式
    vs2008快捷键
    SharePoint类库说明.NET教程,Asp.Net研发
    一道sql面试题解法
    16天学完java
    总结DataTable 导出Excel数据
  • 原文地址:https://www.cnblogs.com/mengnan/p/11637421.html
Copyright © 2011-2022 走看看