• webrtc codec


    1、视频

    std::unique_ptr<VideoEncoder> InternalEncoderFactory::CreateVideoEncoder(
        const SdpVideoFormat& format) {
      if (absl::EqualsIgnoreCase(format.name, cricket::kVp8CodecName))
        return VP8Encoder::Create();
      if (absl::EqualsIgnoreCase(format.name, cricket::kVp9CodecName))
        return VP9Encoder::Create(cricket::VideoCodec(format));
      if (absl::EqualsIgnoreCase(format.name, cricket::kH264CodecName))
        return H264Encoder::Create(cricket::VideoCodec(format));
      RTC_LOG(LS_ERROR) << "Trying to created encoder of unsupported format "
                        << format.name;
      return nullptr;
    }
    

     从上到下的优先级的形式设置

     2 音频

    WebRtcVoiceMediaChannel::SetRecvCodecs

    WebRtcVoiceMediaChannel::SetSendCodecs

     for (const AudioCodec& voice_codec : codecs) {
        if (!(IsCodec(voice_codec, kCnCodecName) ||
              IsCodec(voice_codec, kDtmfCodecName) ||
              IsCodec(voice_codec, kRedCodecName))) {
          webrtc::SdpAudioFormat format(voice_codec.name, voice_codec.clockrate,
                                        voice_codec.channels, voice_codec.params);
    
          voice_codec_info = engine()->encoder_factory_->QueryAudioEncoder(format);
          if (!voice_codec_info) {
            RTC_LOG(LS_WARNING) << "Unknown codec " << ToString(voice_codec);
            continue;
          }
    

      这个里边 从codecs的列表里 从头到尾的优先级找到当前使用的codec。

    而这个codecs的列表数据,是音频引擎在启动的时候,获取到的,代码如下:

    void WebRtcVoiceEngine::Init() {
      RTC_DCHECK(worker_thread_checker_.IsCurrent());
      RTC_LOG(LS_INFO) << "WebRtcVoiceEngine::Init";
    
      // TaskQueue expects to be created/destroyed on the same thread.
      low_priority_worker_queue_.reset(
          new rtc::TaskQueue(task_queue_factory_->CreateTaskQueue(
              "rtc-low-prio", webrtc::TaskQueueFactory::Priority::LOW)));
    
      // Load our audio codec lists.
      RTC_LOG(LS_VERBOSE) << "Supported send codecs in order of preference:";
      send_codecs_ = CollectCodecs(encoder_factory_->GetSupportedEncoders());
      for (const AudioCodec& codec : send_codecs_) {
        RTC_LOG(LS_VERBOSE) << ToString(codec);
      }
    
      RTC_LOG(LS_VERBOSE) << "Supported recv codecs in order of preference:";
      recv_codecs_ = CollectCodecs(decoder_factory_->GetSupportedDecoders());
      for (const AudioCodec& codec : recv_codecs_) {
        RTC_LOG(LS_VERBOSE) << ToString(codec);
      }
    

      

  • 相关阅读:
    2018-10-20-WPF-通过位处理合并图片
    2019-2-11-WPF-获取应用的所有窗口
    2019-2-11-WPF-获取应用的所有窗口
    2018-8-10-WPF-如何在绑定失败异常
    2018-8-10-WPF-如何在绑定失败异常
    类和对象
    类和对象
    什么是可串行化MVCC
    LeetCode-环形链表|+环形链表||
    用js仿探探拖拽卡片的效果、飞卡片的效果,感觉挺酷,最后有美女看哦!
  • 原文地址:https://www.cnblogs.com/132818Creator/p/12942279.html
Copyright © 2020-2023  润新知