上层应用
了,
上层应用
可以在 浏览器中 直接访问 浏览器提供的API;非常成熟的算法
,开发时只需要调节参数
即可;
降噪(Noise Reduction)、自动增益;音视频、文件等非音视频
的传输;Peer Connection
中我们可以拿到流
,
通过流
我们可以拿到每一个多媒体
,
还可以拿到所有媒体的统一信息
、传输的统一信息
等rtc_base
:
不同操作系统,如Window和Linux,之间的系统函数差别就特别大;
但是rtc_base
都封装好了,
上层按照规范编写调用逻辑即可,
框架会判断是在哪个平台运行,并执行相应的代码;rtc_tool
是音视频相关的测试;
tool_webrtc
是整个框架的测试;system_wrappers
,
存放操作系统等操作代码,
不同系统不同文件存放;以上是WebRTC最外层的目录, 下面看WebRTC目录下的Modules子目录
Android、IOS、Window、Mac、Linux
的逻辑都是在audio_device
目录下的;
现在的话Android、IOS
被提取出去,
这里放的是关于Window、Mac、Linux
的文件;音频流
,
WebRTC则会把这几个音频流
混合在一起,
这样子在传输的时候就比较方便,
减少了音频流
总数;
那这个混音相关的逻辑文件,就放在audio_mixer
这里;回音消除、降噪、增益
等处理操作;congestion_controller
:
当我们检测到网络流量
比较高的时候,
我们要做一些流量控制
,
防止网络包把带宽打死;
相关处理逻辑 则 放在本文件夹下;
回音消除、降噪、增益
等处理操作;
如增加人脸识别
功能也可以放在这个目录下;RTCPeerConnection
连接,
然后把一个MediaStream
媒体流搭载上去,
随后的细节就不用管了,
其中所有的传输、寻路等细节,
都由RTCPeerConnection
内部封装实现了,底层封装做了很多相关的工作;文本文件、二进制数据
等),都通过RTCDataChannel
来传输;
RTCDataChannel
是通过RTCPeerConnection
获取的;
传输非音视频的数据时,
应用层要做的,
就是拿到一个RTCDataChannel
对象,把数据
搭载上去即可;PeerConnectionFactory
,
PeerConnectionFactory
可以
创建PeerConnection
、LocalMediaStream
、LocalVide/AudioTrack
等;Application
【注意这里Application
本身就是一个PeerConnectionObserver
】,
创建出一个PeerConnectionFactory
【CreatePeerConnectionFactory
】;PeerConnectionFactory
触发CreatePeerConnection
、
CreateLocalMediaStream
、CreateLocalVideoTrack
、CreateLocalAudioTrack
创建了PeerConnection
、MediaStream
等等实例;AddTrack
,
把各种轨(track)加到流(LocalMediaStream
)中去,
然后通过AddStream
,
把流加到PeerConnection
中;CommitStreamChanges
提交流的变化;
当流发生变化的时候,
会触发OnSignalingMessage
事件,创造出一个offer
【SDP描述信息】;offer
【SDP描述信息】之后,
就会通过应用层【Application】,通过信令,
发送到远端【Send offer to the remote peer】;【SDP描述信息】内容: 有哪些音视频数据,音视频数据的格式分别是什么,传输地址是什么等;
offer
SDP,
回复一个answer
SDP【Get answer from the remote peer】,
交给本地信令;answer
SDP之后,
会把信息传给本地PeerConnection
【ProcessSignalingMessage
】,
本地PeerConnection
就会拿到对方的媒体流信息
、传输端口、传输地址;至此,远端和本地就打通连接, 可以相互传
媒体数据
;
远端数据
来的时候,
PeerConnection
还会将远端的流
添加到Application
中去;
【OnAddStream(注意区分AddStream)】