WebRTC清晰度和流畅度
WebRTC清晰度和流畅度
flyfish
WebRTC提供了4种模式DISABLED,MAINTAIN_FRAMERATE,MAINTAIN_RESOLUTION,BALANCED
// Based on the spec in
// https://w3c.github.io/webrtc-pc/#idl-def-rtcdegradationpreference.
// These options are enforced on a best-effort basis. For instance, all of
// these options may suffer some frame drops in order to avoid queuing.
// TODO(sprang): Look into possibility of more strictly enforcing the
// maintain-framerate option.
// TODO(deadbeef): Default to "balanced", as the spec indicates?
enum class DegradationPreference {// Don't take any actions based on over-utilization signals. Not part of the// web API.DISABLED,// On over-use, request lower resolution, possibly causing down-scaling.MAINTAIN_FRAMERATE,// On over-use, request lower frame rate, possibly causing frame drops.MAINTAIN_RESOLUTION,// Try to strike a "pleasing" balance between frame rate or resolution.BALANCED,
};
接口是
// See https://crbug.com/653531 and https://w3c.github.io/mst-content-hint.enum class ContentHint { kNone, kFluid, kDetailed, kText };
根据源码 接口这里不是一一对应的kDetailed和kText是类似的
webrtc::DegradationPreference
WebRtcVideoChannel::WebRtcVideoSendStream::GetDegradationPreference() const {// Do not adapt resolution for screen content as this will likely// result in blurry and unreadable text.// `this` acts like a VideoSource to make sure SinkWants are handled on the// correct thread.if (!enable_cpu_overuse_detection_) {return webrtc::DegradationPreference::DISABLED;}webrtc::DegradationPreference degradation_preference;if (rtp_parameters_.degradation_preference.has_value()) {degradation_preference = *rtp_parameters_.degradation_preference;} else {if (parameters_.options.content_hint ==webrtc::VideoTrackInterface::ContentHint::kFluid) {degradation_preference =webrtc::DegradationPreference::MAINTAIN_FRAMERATE;} else if (parameters_.options.is_screencast.value_or(false) ||parameters_.options.content_hint ==webrtc::VideoTrackInterface::ContentHint::kDetailed ||parameters_.options.content_hint ==webrtc::VideoTrackInterface::ContentHint::kText) {degradation_preference =webrtc::DegradationPreference::MAINTAIN_RESOLUTION;} else if (IsEnabled(call_->trials(), "WebRTC-Video-BalancedDegradation")) {// Standard wants balanced by default, but it needs to be tuned first.degradation_preference = webrtc::DegradationPreference::BALANCED;} else {// Keep MAINTAIN_FRAMERATE by default until BALANCED has been tuned for// all codecs and launched.degradation_preference =webrtc::DegradationPreference::MAINTAIN_FRAMERATE;}}return degradation_preference;
}
使用方法
// create a new webrtc stream
{std::lock_guard<std::mutex> mlock(m_streamMapMutex);std::map<std::string, std::pair<rtc::scoped_refptr<webrtc::VideoTrackSourceInterface>, rtc::scoped_refptr<webrtc::AudioSourceInterface>>>::iterator it = m_stream_map.find(streamLabel);if (it != m_stream_map.end()){std::pair<rtc::scoped_refptr<webrtc::VideoTrackSourceInterface>, rtc::scoped_refptr<webrtc::AudioSourceInterface>> pair = it->second;rtc::scoped_refptr<webrtc::VideoTrackSourceInterface> videoSource(pair.first);if (!videoSource){RTC_LOG(LS_ERROR) << "Cannot create capturer video:" << videourl;}else{rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track = m_peer_connection_factory->CreateVideoTrack(streamLabel + "_video", videoSource.get());if ((video_track) && (!peer_connection->AddTrack(video_track, {streamLabel}).ok())){RTC_LOG(LS_ERROR) << "Adding VideoTrack to MediaStream failed";}else{RTC_LOG(LS_INFO) << "VideoTrack added to PeerConnection";ret = true;} }
上述代码video_track创建好之后,调用
video_track->set_content_hint(webrtc::VideoTrackInterface::ContentHint::kDetailed);
参考
https://w3c.github.io/webrtc-pc/#idl-def-rtcdegradationpreference
https://crbug.com/653531 and https://w3c.github.io/mst-content-hint
相关文章:
WebRTC清晰度和流畅度
WebRTC清晰度和流畅度 flyfish WebRTC提供了4种模式DISABLED,MAINTAIN_FRAMERATE,MAINTAIN_RESOLUTION,BALANCED // Based on the spec in // https://w3c.github.io/webrtc-pc/#idl-def-rtcdegradationpreference. // These options are …...
华为数通方向HCIP-DataCom H12-821题库(单选题:181-200)
第181题 某管理员需要创建AS Path过滤器(ip as-path-iter),允许AS_Path中包含65001的路由通过,那么以下哪一项配置是正确的? A、ip as-path-filter 1 permit 65001 B、ip as-path-filter 1 permit "65001 C、ip as-path-filter 1 permit *6500…...
海康威视二次开发适配安卓电视盒子
收到一个需求,需要在安卓电视盒子上适配海康威视摄像头视频: 1.类似电视家app界面,左边滑动菜单显示通道列表、设置按钮,遥控器呼出菜单。 2.遥控器操作:切换视频通道、云台上下左右控制、缩放等。 3.服务器域名、用…...
NIO原理浅析(二)
IO分类 阻塞和非阻塞 阻塞IO:用户空间引发内核空间的系统调用,需要内核IO操作彻底完成之后,返回值才会返回到用户空间,执行用户的操作。阻塞指的用户空间程序的执行状态,用户空间程序需要等到IO操作彻底执行完毕。j…...
leetcode每日一练-第53题-最大子数组和
一、思路 动态规划 二、解题方法 使用了两个变量 maxSum 和 currentSum 来分别记录全局的最大和和当前连续子数组的和。遍历数组时,我们不断更新 currentSum,并比较是否需要更新 maxSum。最后,maxSum 就是最大的连续子数组和。 三、code …...
京东云接入【风险识别】接口
京东云的接入文档写的真的跟逗你玩一样,就给提供了一个简单的实例,其他的全靠自己摸索。 这篇文章描述的是激动云【风险识别接口】接入,也会介绍如何接入其他的一些未在文章内描述到的接口。 这里使用的是python SDK,先安装 pip…...
在 linux 虚拟机上安装配置 hive
目录 一 下载hive 安装包 二 解压 hive 并配置环境变量 三 配置hive 的配置文件 四 更新 guava 五 hive初始化 六 开启远程连接 七 使用datagrip 连接 hive 一 下载hive 安装包 百度网盘资源如下: 链接: https://pan.baidu.com/s/18jF-Qri0hc52_rtL61O0YQ?…...
作品集(陆续上传中)
智能家居---不断完善中 家居-CSDN直播 家居 语音刷抖音 --- 基于串口和adb 基于守护进程的语音刷抖音-CSDN直播 基于守护进程的语音刷抖音 海天一色项目 --- 船舶靠港零碳排加热器 FTP云盘 --- 多进程和socket FTP云盘-CSDN直播 FTP云盘...
论文解读 | 三维点云深度学习的综述
原创 | 文 BFT机器人 KITTI 是作为基准测试是自动驾驶中最具影响力的数据集之一,在学术界和工业界都被广泛使用。现有的三维对象检测器存在着两个限制。第一是现有方法的远程检测能力相对较差。其次,如何充分利用图像中的纹理信息仍然是一个开放性的问题…...
基于costas环的载波同步系统matlab性能仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ............................................................................ I_Dataroun…...
解码自我注意的魔力:深入了解其直觉和机制
一、说明 自我注意机制是现代机器学习模型中的关键组成部分,尤其是在处理顺序数据时。这篇博文旨在提供这种机制的详细概述,解释它是如何工作的,它的优点,以及它背后的数学原理。我们还将讨论它在变压器模型中的实现和多头注意力的…...
mysql之存储引擎
目录 存储引擎概念 MyISAM MyISAM特点 MyISAM 表的存储格式 MyISAM适用的生产场景 InnoDB InnoDB特点 选择存储引擎依据 MyISAM 和 INNODB区别 命令 查看系统支持的存储引擎 查看表使用的存储引擎 修改存储引擎 存储引擎概念 MySQL中的数据用各种不同的技术存…...
服务器日志出现大量NTLM(NT LAN Manager)攻击
日志名称:Security 来源: Microsoft-Windows-Security-Auditing 日期: 2023/8/30 20:57:40 事件 ID:4625 任务类别:登录 级别: 信息 关键字: 审核失败 用户: 暂缺 计算机: WIN-QBJ3ORTR0CF 描述: 帐户登录失败。 主题: 安全 ID:NULL SID 帐户名:- 帐户域:- …...
Spring学习|Spring简介、IOC控制反转理解、IOC创建对象方式
Spring Spring:春天------>给软件行业带来了春天! 2002,首次推出了Spring框架的雏形: interface21框架! Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日发布了1.0正式版。 RodJohnson,Spring Framework创始人&…...
DDR2 IP核调式记录2
本文相对简单,只供自己看看就行。从其它的博客找了个代码,然后记录下仿真波形。 1. 功能 直接使用quartus生成的DDR2 IP核,然后实现循环 -->写入burst长度的数据后读出。 代码数据的传输是32位,实际使用了两片IC。因此IP核也是…...
【ES6】js 中class的extends、super关键字用法和避坑点
在JavaScript中,使用class关键字可以实现面向对象编程。其中,extends和super是两个非常重要的关键字,它们分别用于实现类的继承和调用父类的方法。 一、extends关键字 extends关键字用于实现类的继承,它可以让一个子类继承父类的…...
mysql排名函数row_number()over(order by)和with * as 的用法
601. 体育馆的人流量(力扣mysql题,难度:困难) 表:Stadium ------------------------ | Column Name | Type | ------------------------ | id | int | | visit_date | date | | people | int | ------------------------vis…...
linux局域网IP地址冲突检测
使用keepalived设置vip的时候,发现vip无法连接,经查是出现了ip地址冲突,使用了一个在用的ip作为了vip,但是这个ip其实ping不通,因为目标机禁用了ping,也即是丢弃了ICMP包。 一、那么怎么检测IP地址是否已经…...
远距离WiFi模组方案,实现移动设备之间高效通信,无人机远程图传应用
随着科技的不断进步,无线通信技术也在日新月异地发展。其中,WiFi技术已经成为现代生活中不可或缺的一部分。 从室内到室外,WiFi的应用场景正在不断扩大,为我们的日常生活和工业生产带来了极大的便利。 WiFi技术,即无…...
Docker构建Springboot项目,并发布测试
把SpringBoot项目打包成Docker镜像有两种方案: 全自动化:先打好docker镜像仓库,然后在项目的maven配置中配置好仓库的地址,在项目里配置好Dockerfile文件,这样可以直接在idea中打包好后自动上传到镜像仓库,…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
