目录
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 "cartoon.h"
int main()
{
VideoCapture capture(0);
if (!capture.isOpened()) { //判断能够打开摄像头
cout<<"can not open the camera"<<endl;
cin.get();
exit(1);
}
capture.set(CV_CAP_PROP_FRAME_WIDTH, 640);
capture.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
int count=0;
while (1) {
Mat frame;
capture>>frame; //载入图像
if (frame.empty()) { //判断图像是否载入
cout<<"can not load the frame"<<endl;
} else {
count++;
if (count == 1) {
cout<<frame.cols<<" "<<frame.rows<<endl;
}
imshow("camera", frame);
char c=waitKey(30); //延时30毫秒
if (c == 27) //按ESC键退出
break;
}
}
}
//
第一种
是恒定比特率 CBR(constant bitrate)的码率控制算法,CBR 的输入不仅要有视频源,还要另外设置一个目标比特率 。它能够动态地调节量化参数,主要依据是不同视频的内容复杂度差异、网络带宽的不同和解码缓冲区的大小等,使得在给定的码率限制下,图像的质量最佳 。编码过程中,CBR 的码率围绕着目标码率基本不变 。
第二种
是可变比特率 VBR( variable bitrate) 的码率控制算法,VBR 的输入当然也要包括视频源,此外还要设置量化参数 QP 。输出的比特率会在一定范围内变化,原因有很多,比如实际视频序列中的图像内容复杂度的差异,又比如运动的快慢不同等,所以在传输信道有波动的条件下常常使用 VBR 算法 。
调整编码器顺序一、视频编码格式初始配置
webrtcmediaengineinternalencoderfactory.cc按照Push顺序,优先选取第一个编解码格式 。
二、视频分辨率初始配置
webrtcpcvideocapturertracksource.cc选取的原则是,在kVideoFormats里面找参数与kDefaultFormat默认值最接近的一组参数,作为本端的编码能力 。
三、视频码率默认值
webrtcmediaenginewebrtcvideoengine.cc四、默认QP、帧率最大值配置
EncoderStreamFactory::CreateEncoderStreams
webrtcmediaenginewebrtcvideoengine.cc五、使能SRTP
static const int kDefaultQpMax = 56;
const int kDefaultVideoMaxFramerate = 60;
webrtcsrcwebrtcapipeerconnectioninterface.h配置密钥:
disable_encryption = true 取消SRTP
disable_encryption = false 开启SRTP
bool Conductor::CreatePeerConnection(bool dtls)配置是否生成密钥 。六、生效新的帧率码率流程
在webrtc里面函数实现如下:
->VideoStreamEncoder::EncodeVideoFrame->VideoSender::AddVideoFrame----
在这个函数中读取全局变量encoder_params_,判断是否需要调整视频参数 。->VideoSender::SetEncoderParameters
->VCMGenericEncoder::SetEncoderParameters七、H264打包模式
->H264EncoderImpl::SetRateAllocation---传递新的帧率码率到编码器 。
codec.cc VideoCodec::SetDefaultParametersJanus框架分析模块结构本文介绍的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等;
推荐阅读
- 抖音视频点赞一万提现多少 抖音点赞一万怎么提现
- 谁是5G时代的抖音?
- BATH加码新基建,AI云5G如何撬动智能时代
- 5G——NB-IoT技术简介
- 游戏史上销量最高的游戏 帝国时代是单机游戏吗
- 6年13轮融资,5G时代,它如何对抗36亿人的互联网黑夜
- 空腹喝什么减肥呢
- 光跑步可以减肥的吗
- 抖音视频多久不会被推荐 抖音都是短视频吗
- 生益科技:“驾车”追赶5G时代,业绩增长新动能
