• 沸点IT---为科技爱好者提供最新鲜最热门的IT科技资讯!

沸点IT

ad

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

来源:简易百科  |  发布时间:2023-09-20 10:43  |  阅读量:8332  |   
目录 1,自定义摄像头分辨率 2,码率限制 3,调整编码器顺序 4,Mesh模型多方通话 5,Janus框架分析 6,JanusWeb源码分析 7,JanusAndroid源码分析 8,基于Janus实现会议系统 自定义摄...

目录

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

免责声明:该文章系本站转载,旨在为读者提供更多信息资讯。所涉内容不构成投资、消费建议,仅供读者参考。

  • 海信贾少谦:以中国管理,建世界一流企业

    海信贾少谦:以中国管

  • 海信贾少谦:世界一流企业必然有一流的ESG表现

    海信贾少谦:世界一流

  • 天文学家利用AI发现迄今为止类太阳恒星周围最近的最小系外行星

    天文学家利用AI发现

  • 从“高门槛”到“消费级”,华为引领卫星通信飞入寻常百姓家

    从“高门槛”到“消费

沸点IT | 网站地图 | RSS订阅

所载文章、数据仅供参考,使用前务请仔细阅读网站声明。本站不作任何非法律允许范围内服务!

联系我们: jokerdeyouxiang@sina.com

备案号:皖ICP备2023005497号