概述
1.WebRTC的数据流
如果视频数据帧率过多,则要将多余的帧丢掉。出来后的视频帧除了交给编码器编码外,还需要发送给本地渲染模块一份以进行本地预览。
对音频来说,最主要的是进行3A处理。AEC(回波抵消)ANS(背景噪声抑制)AGC(自动增益控制)
音频默认编码器是opus.
视频默认VP8, 支持VP8,VP9,H264
//以伪代码的方式进行逻辑梳理。
socketpacket=recvfromNt();
if(socketpacket==RTP)
{
if(socket.codec==FEC)
{
newpacket=Fec.decode(socketpacket)
}
else
{
newpacket=decodepacket(sockepacket)
}
if(newpacket.attr=audio)
{
NetEQ.pushBack(newpacket);
}
if(newpacket.attr=video)
{
Jittbuffer.pushBack(newpacket);
}
}
if(socketpacket==RTCP)
{
//do something
}
/*
NetEQ 对音频数据进行平滑处理,消除抖动,然后进行音频解码,最后根据音频时间戳对音频进行同步处理。
音频同步的处理规则:如果音频包没有丢包、抖动等问题,则正常解码播放音频;
如果音频数据由堆积,则加速播放;
如果音频数据不足,则采用变速不变调的方法将语音拉长。
*/
2 WebRTC线程模型
3 WebRTC网络传输
如何让通信的双方彼此知道对方的IP地址,开放的端口以及使用的网络协议类型?
1.各自收集自己可用的Candidate;
2.将收集好的Candidate通过信令交换给对方,之后双方就可以建立连接互发数据了。
如何检测Socket所对应的地址是否有外网映射?
向用户指定的STUN服务器发送Stun Binding Request消息,如果收到STUN服务器的Stun Binding Response的消息说明该该地址有外网映射。
WebRTC中建立网络连接的方法?
1.在收集Candidate并返回给应用层的过程中,如果已经收到RemoteCandidate,则会创建Connection对象,
2.应用层收到远端传来的Candidate并调用AddIceCandidate()方法,将其加入PeerConnection对象,会创建新的Connection.
3.WebRTC收到STUN服务器响应消息,如果对应的Connection还没有创建,那么此时会为其创建Connection.因为通信的双方存在多个可用的Connection,且每个Connection有优越之分。创建好Connection之后,还要对其进行排序和Ping测试(ping,STUN协议中的BindingRequest 和Binding Response实现Ping功能。
什么时候会用到第三种连接方式?
通常是在某一段使用第二种方式创建连接以后,做ping测试,者时另一端就会收到binding request,此时使用第三种方式在自己的一段将连接建立起来。
WebRTC音频采集
WebRTC在设备层上定义了一套统一接口,这样上层业务只要调用这套接口就可以采集音视频数据。
当WebRTC进行媒体协商时,它会调用ADM启动两个线程,一个用于设备采集音频数据,另一个用于播放音频数据。
音频采集流程:驱动设备按照采样参数(采样率、采样大小、通道数)设定的要求采集音频数据,每采集到一帧数据,就交由AudioDeviceBuffer处理。AudioDeviceBuffer在收到数据后,首先暂存起来,然后调用音频引擎对数据进行重采样,使其变成标准规格后做前处理(3A算法),处理后的音频帧就可以进行编码了。音频帧的回音消除、降噪等工作是由硬件完成的。AP(audio process)不在对其做同样的工作。
音频播放流程:
windows:音频播放流程也需要一个单独的县城,该线程会以阻塞方式向声卡的缓冲区填充数据。数据填好后,声卡会自动从缓冲区读取数据进行播放。播放线程一旦将数据填充成功,便立即向AudioDeviceBuffer要数据,AudioDeviceBuffer转而向音频引擎要数据,层层推进。解码线程拿到数据后,播放线程并不会直接使用,它会使用混音器将同一时刻多个通道的音频进行混音,在经过AP处理。
ios采用事件驱动的方式。
WebRTC视频采集
音频编码
音频编码器的管理
音频编码器何时创建的?
媒体协商之后,就可以确认双方使用的音视频编解码器。
音频解码
何时创建的音频解码器?
远端数据过来后才创建的。
WebRTC创建编码器并进行视频编码
最后
以上就是无心哑铃为你收集整理的WebRTC 源码分析1.WebRTC的数据流2 WebRTC线程模型3 WebRTC网络传输WebRTC音频采集WebRTC视频采集音频编码WebRTC创建编码器并进行视频编码的全部内容,希望文章能够帮你解决WebRTC 源码分析1.WebRTC的数据流2 WebRTC线程模型3 WebRTC网络传输WebRTC音频采集WebRTC视频采集音频编码WebRTC创建编码器并进行视频编码所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复