目录 1,自定义摄像头分辨率 2,码率限制 3,调整编码器顺序 4,Mesh模型多方通话 5,Janus框架分析 6,Janus Web源码分析 7,Janus Android源码分析 8,基于Janus实现会议系统 自定义摄像头分辨率 一、videocapture类的介绍 1、Class for video capturing from video files, image sequences or cameras. 2、The class provides C++ API for capturing video from cameras or for reading video files and image sequences. 二、参数设置函数 set 函数的使用 1、代码 // #include quot;cartoon.hquot; int main VideoCapture capture; if ) //判断能够打开摄像头 coutlt;lt;quot;can not open the cameraquot;lt;lt;endl; cin.get; exit; capture.set; capture.set; int count=0; while Mat frame; capturegt;gt;frame; //载入图像 if ) //判断图像是否载入 coutlt;lt;quot;can not load the framequot;lt;lt;endl; else count++; if coutlt;lt;frame.colslt;lt;quot; quot;lt;lt;frame.rowslt;lt;endl; imshow; char c=waitKey; //延时30毫秒 if //按ESC键退出 break; // 码率控制算法 码率控制算法根据视频应用要求与目的的不同可分为以下两种, 第一种 是恒定比特率 CBR的码率控制算法, CBR 的输入不仅要有视频源, 还要另外设置一个目标比特率。它能够动态地调节量化参数,主要依据是不同视频的内容复杂度差异、网络带宽的不同和解码缓冲区的大小等, 使得在给定的码率限制下, 图像的质量最佳。编码过程中, CBR 的码率围绕着目标码率基本不变。 第二种 是可变比特率 VBR 的码率控制算法, VBR 的输入当然也要包括视频源, 此外还要设置量化参数 QP。输出的比特率会在一定范围内变化, 原因有很多, 比如实际视频序列中的图像内容复杂度的差异, 又比如运动的快慢不同等, 所以在传输信道有波动的条件下常常使用 VBR 算法。 调整编码器顺序 一、视频编码格式初始配置 webrtcmediaengineinternalencoderfactory.cc 按照Push顺序,优先选取第一个编解码格式。 二、视频分辨率初始配置 webrtcpcvideocapturertracksource.cc 选取的原则是,在kVideoFormats里面找参数与kDefaultFormat默认值最接近的一组参数,作为本端的编码能力。 三、视频码率默认值 webrtcmediaenginewebrtcvideoengine.cc EncoderStreamFactory::CreateEncoderStreams 四、默认QP、帧率最大值配置 webrtcmediaenginewebrtcvideoengine.cc static const int kDefaultQpMax = 56; const int kDefaultVideoMaxFramerate = 60; 五、使能SRTP webrtcsrcwebrtcapipeerconnectioninterface.h disable_encryption = true 取消SRTP disable_encryption = false 开启SRTP 配置密钥: bool Conductor::CreatePeerConnection配置是否生成密钥。 六、生效新的帧率码率流程 在webrtc里面函数实现如下: -gt;VideoStreamEncoder::EncodeVideoFrame-gt;VideoSender::AddVideoFrame- 在这个函数中读取全局变量encoder_params_,判断是否需要调整视频参数。-gt;VideoSender::SetEncoderParameters -gt;VCMGenericEncoder::SetEncoderParameters -gt;H264EncoderImpl::SetRateAllocation传递新的帧率码率到编码器。 七、H264打包模式 codec.cc VideoCodec::SetDefaultParameters Janus框架分析模块结构 本文介绍的Janus版本为0.6.0。 上图是Janus主要的模块结构,有一些通用工具模块这里没有列出。 媒体模块 Janus不是简单转发WebRTC的媒体流,还有一定的控制能力,因此需要支持WebRTC的媒体能力,其媒体功能包含以下基本模块: ICE:打洞,负责与Peer的连通,Janus可以部署在NAT后面,使用了libnice; DTLS:UDP版的TLS,就是加密的UDP,WebRTC用来传递SRTP的密钥,使用了OpenSSL/BoringSSL; RTP/RTCP:提供RTP/RTCP封/解包的接口,需要发送一些WebRTC支持的RTCP包,例如FIR、PLI、RR等; SRTP:加密的RTP,开启后WebRTC传输的RTP负载都是加密的; SDP:提供SDP封/解包的接口,用于协商媒体的协议,可以用SDP对WebRTC的一些功能进行设定; SCTP:WebRTC的数据通道使用的协议,就是加上了流控的UDP,可以传输任意数据。 信令模块 除了媒体协议,Janus还要提供信令交互的协议,传统的信令协议有SIP、XMPP等,Janus上的信令应用协议可以定制,底层主要的传输协议有 WebSocket; MQTT; NanoMsg; RabbitMQ。 Janus Web源码分析 总结;需要资料的可以关注+私信lsquo;资料rsquo;可以送大家 一起学习 对于自然界中的音频信号,如果转换成数字信号,进行音频编码,那么只能无限接近,不可能百分百还原。所以说实际上任何信号转换成数字信号都会有损。但是在计算机应用中,能够达到最高保真水平的就是PCM编码。因此,PCM约定俗成了无损编码。我们而习惯性的把MP3列入有损音频编码范畴,是相对PCM编码的。强调编码的相对性的有损和无损 免责声明:该文章系本站转载,旨在为读者提供更多信息资讯。所涉内容不构成投资、消费建议,仅供读者参考。 |