Yin的笔记本

vuePress-theme-reco Howard Yin    2021 - 2025
Yin的笔记本 Yin的笔记本

Choose mode

  • dark
  • auto
  • light
Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • Linux
  • MyIdeas
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • JavaScript
  • Python
  • Nvidia
  • Shell
  • Tex
  • Rust
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
author-avatar

Howard Yin

304

Article

153

Tag

Home
Category
  • CNCF
  • Docker
  • namespaces
  • Kubernetes
  • Kubernetes对象
  • Linux
  • MyIdeas
  • Revolution
  • WebRTC
  • 云计算
  • 人工智能
  • 分布式
  • 图像处理
  • 图形学
  • 微服务
  • 数学
  • OJ笔记
  • 博弈论
  • 形式语言与自动机
  • 数据库
  • 服务器运维
  • 编程语言
  • C
  • Git
  • Go
  • Java
  • JavaScript
  • Python
  • Nvidia
  • Shell
  • Tex
  • Rust
  • Vue
  • 视频编解码
  • 计算机网络
  • SDN
  • 论文笔记
  • 讨论
  • 边缘计算
  • 量子信息技术
Tag
TimeLine
About
查看源码
  • WebRTC源码中的Encoder

WebRTC源码中的Encoder

vuePress-theme-reco Howard Yin    2021 - 2025

WebRTC源码中的Encoder


Howard Yin 2022-03-08 08:54:05 WebRTClibvpx编程框架源码解读

学习要点:

  1. 所有的编码器都继承自VideoEncoder类
  2. LibvpxVp9Encoder继承自VP9Encoder,VP9Encoder继承自VideoEncoder
  3. LibvpxInterface类对libvpx里面的那些函数接口进行了封装(libvpx是C写的,没有面向对象)
  4. LibvpxVp8Encoder和LibvpxVp9Encoder都是调用LibvpxInterface类进行的实现,而不是直接调用libvpx里面的函数接口
  5. 因此,VideoEncoder就是沟通底层编码器和上层应用的接口。顺着VideoEncoder向上可以找到实现自适应编码的过程、向下可以找到自适应编码修改了编码器的哪些参数。

前置知识:先至少要知道WebRTC的一些接口标准,《pion学习总结:等待传入track的一般流程》和《pion学习总结:等待传入track的一般流程》可能会有所帮助。

最近在愁WebRTC MCU相关的事,需要基于WebRTC实现流处理转发单元,并且这个处理流是要处理流的内容,即把视频解码出来放进什么神经网络里处理好再编码回去。如果还要用上WebRTC的自适应码率调节机制的话

偶然在CSDN看到一篇给WebRTC用自定义编解码算法的操作:《让 WebRTC 使用外部的音视频编解码器》 ,喜出望外,遂顺着这个学习一下WebRTC里的编解码器都是什么样的。

按照《让 WebRTC 使用外部的音视频编解码器》 ,先从最顶层的CreatePeerConnectionFactory开始看:

api/create_peerconnection_factory.h:

// Create a new instance of PeerConnectionFactoryInterface with optional video
// codec factories. These video factories represents all video codecs, i.e. no
// extra internal video codecs will be added.
RTC_EXPORT rtc::scoped_refptr<PeerConnectionFactoryInterface>
CreatePeerConnectionFactory(
    rtc::Thread* network_thread,
    rtc::Thread* worker_thread,
    rtc::Thread* signaling_thread,
    rtc::scoped_refptr<AudioDeviceModule> default_adm,
    rtc::scoped_refptr<AudioEncoderFactory> audio_encoder_factory,
    rtc::scoped_refptr<AudioDecoderFactory> audio_decoder_factory,
    std::unique_ptr<VideoEncoderFactory> video_encoder_factory,
    std::unique_ptr<VideoDecoderFactory> video_decoder_factory,
    rtc::scoped_refptr<AudioMixer> audio_mixer,
    rtc::scoped_refptr<AudioProcessing> audio_processing,
    AudioFrameProcessor* audio_frame_processor = nullptr);

}  // namespace webrtc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

一看,这函数前面几个参数都是和线程有关的,后面几个参数都是音视频编解码,很好理解。

帮助我们改善此页面!
创建于: 2021-10-27 14:02:39

更新于: 2022-03-08 08:54:58