5G时代-WebRTC音视频高级开发

智能 来源:简易百科 2023-09-20 10:42   阅读量:17663   

目录

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编码的。强调编码的相对性的有损和无损

郑重声明:此文内容为本网站转载企业宣传资讯,目的在于传播更多信息,与本站立场无关。仅供读者参考,并请自行核实相关内容。

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。

友情合作