当前位置: 首页 > news >正文

Android音视频直播低延迟探究之:WLAN低延迟模式

Android WLAN低延迟模式

Android WLAN低延迟模式是 Android 10 引入的一种功能,允许对延迟敏感的应用将 Wi-Fi 配置为低延迟模式,以减少网络延迟,启动条件如下:

  • Wi-Fi 已启用且设备可以访问互联网。
  • 应用已创建并获得 Wi-Fi 锁,并且正在前台运行。
  • 屏幕处于开启状态。

好多开发者提到,在一些设备,是不是需要开这个WLAN的低延迟模式,为此,我们做了测试,本文先从理论层面解读,再到代码层面测试比较实际的效果。

先说理论探究:我们都知道,WIFI_MODE_FULL_LOW_LATENCY是一种 Wi-Fi 模式的常量表示。以下是对其含义的分析:

一、各部分含义

  1. “WIFI_MODE_FULL”:
    • 通常表示全功能模式。在这种模式下,设备可能会启用所有可用的 Wi-Fi 功能和特性,以提供最佳的连接性能和体验。这可能包括较高的数据传输速率、支持多种协议和功能扩展等。
  2. “LOW_LATENCY”:
    • 表示低延迟。低延迟对于一些对实时性要求较高的应用非常重要,例如在线游戏、视频会议、实时流媒体等。在这种模式下,Wi-Fi 连接会尽量减少数据传输的延迟时间,以确保快速响应和流畅的交互体验。

二、可能的应用场景

  1. 在线游戏
    • 对于竞技类在线游戏,低延迟是至关重要的。玩家需要快速的响应时间来执行操作,否则可能会导致游戏体验不佳。启用WIFI_MODE_FULL_LOW_LATENCY模式可以减少网络延迟,提高游戏的流畅性和响应速度。
  2. 视频会议和直播
    • 在视频会议和直播中,低延迟可以确保实时的音频和视频传输,避免出现卡顿和延迟现象。这种模式可以提供更稳定和流畅的通信体验,提高会议和直播的质量。
  3. 实时流媒体
    • 对于观看实时体育赛事、音乐会等流媒体内容,低延迟可以减少缓冲时间,提供更即时的观看体验。

三、实现方式

  1. 硬件支持
    • 设备的 Wi-Fi 芯片和天线需要支持低延迟功能。一些高端的 Wi-Fi 芯片可能会专门针对低延迟应用进行优化,提供更好的性能。
  2. 软件配置
    • 操作系统和应用程序可以通过设置来启用低延迟模式。例如,在设备的网络设置中选择WIFI_MODE_FULL_LOW_LATENCY模式,或者在特定的应用程序中进行网络优化设置。
  3. 网络优化
    • 可以通过优化网络环境来减少延迟。例如,使用更靠近设备的 Wi-Fi 接入点、减少网络拥塞、优化路由器设置等。

需要注意的是,具体的实现方式可能因设备和操作系统的不同而有所差异。在使用WIFI_MODE_FULL_LOW_LATENCY模式时,可能会对设备的电池寿命、功耗和其他性能方面产生一定的影响。此外,不是所有的设备和网络环境都支持这种模式,因此在使用前需要确保设备和网络的兼容性。

Android平台代码实现

为了验证Android平台WLAN低延迟模式,我们在大牛直播的RTSP|RTMP播放器模块,添加了如下的代码测试,下图展示的是我们Windows平台RTMP推流模块,采集屏幕数据,然后推RTMP到nginx服务,然后Android端从nginx获取RTMP流,同时播放4路的效果图(1920*1080分辨率),几无多大延迟,值得注意的是,实际上我们不开启这个选项,SDK也没多大延迟,所以是不是这块设置有效果,还要后面慢慢探究论证。

AndroidManifest.xml添加相关权限:

    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.WAKE_LOCK"/>

启动APP的时候,打开:

WifiManager wifiManager = (WifiManager) context_.getSystemService(Context.WIFI_SERVICE);  //激活WIFI性能锁定
wifi_lock_ = wifiManager.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, TAG);wifi_lock_.acquire();
PowerManager powerManager = (PowerManager) context_.getSystemService(Context.POWER_SERVICE); //激活CPU性能锁定
wake_lock_ = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
wake_lock_.acquire();

APP停止播放或业务关闭的时候,调用release接口释放:

....if (wake_lock_ != null) {wake_lock_.release();wake_lock_ = null;
}
if (wifi_lock_ != null) {wifi_lock_.release();wifi_lock_ = null;
}

总结

Android WLAN低延迟模式为开发者提供了一种优化网络延迟的方式,但在使用时需要满足特定的条件,并且设备制造商也需要更新 WLAN 驱动程序和供应商 HAL 来支持该功能。特别是我们做音视频对延迟比较敏感的行业,可酌情参考。

相关文章:

Android音视频直播低延迟探究之:WLAN低延迟模式

Android WLAN低延迟模式 Android WLAN低延迟模式是 Android 10 引入的一种功能&#xff0c;允许对延迟敏感的应用将 Wi-Fi 配置为低延迟模式&#xff0c;以减少网络延迟&#xff0c;启动条件如下&#xff1a; Wi-Fi 已启用且设备可以访问互联网。应用已创建并获得 Wi-Fi 锁&a…...

docker 部署freeswitch(非编译方式)

一&#xff1a;安装部署 1.拉取镜像 参考&#xff1a;https://hub.docker.com/r/safarov/freeswitch docker pull safarov/freeswitch 2.启动镜像 docker run --nethost --name freeswitch \-e SOUND_RATES8000:16000 \-e SOUND_TYPESmusic:en-us-callie \-v /home/xx/f…...

OpenHarmony的公共事件

OpenHarmony的公共事件 公共事件简介 CES&#xff08;Common Event Service&#xff0c;公共事件服务&#xff09;为应用程序提供订阅、发布、退订公共事件的能力。 公共事件分类 公共事件从系统角度可分为&#xff1a;系统公共事件和自定义公共事件。 系统公共事件&#…...

深度学习transformer

Transformer可是深度学习领域的一个大热门呢&#xff01;它是一个基于自注意力的序列到序列模型&#xff0c;最初由Vaswani等人在2017年提出&#xff0c;主要用于解决自然语言处理&#xff08;NLP&#xff09;领域的任务&#xff0c;比如机器翻译、文本生成这些。它厉害的地方在…...

低成本出租屋5G CPE解决方案:ZX7981PG/ZX7981PM WIFI6千兆高速网络

刚搬进新租的房子&#xff0c;没有网络&#xff0c;开个热点&#xff1f;续航不太行。随身WIFI&#xff1f;大多是百兆级网络。找人拉宽带&#xff1f;太麻烦&#xff0c;退租的时候也不能带着走。5G CPE倒是个不错的选择&#xff0c;插入SIM卡就能直接连接5G网络&#xff0c;千…...

【黑马点评debug日记】redis登录跳转不成功

登录后一直跳转登录界面&#xff1b; debug: 网络日志报401&#xff0c; 说明前端获取的token为空&#xff1b; 查看应用程序&#xff0c; 发现没有token存储信息 前端网页增加 sessionStorage.setItem("token", data); 记得刷新网页 成功存储token...

C#自定义特性-SQL

语法 原则 自定义特性必须继承自System.Attribute类&#xff1b; AttributeUsage属性来指定特性的使用范围和是否允许重复等&#xff1b; 在特性类中定义属性&#xff0c;这些属性将用于存储特性值。 示例 using System;// 定义一个自定义特性类 [Attribute…...

协方差矩阵及其计算方法

协方差矩阵&#xff08;Covariance Matrix&#xff09;是一个描述多维数据特征之间相互关系的矩阵&#xff0c;广泛应用于统计学和机器学习中。它用于表示各个特征之间的协方差&#xff0c;是分析多维数据分布和特征依赖性的重要工具。 什么是协方差矩阵&#xff1f; 协方差矩…...

【OH】openHarmony开发环境搭建(基于windows子系统WSL)

前言 本文主要介绍基于windows子系统WSL搭建openHarmony开发环境。 WSL与Vmware虚拟机的区别&#xff0c;可以查看WSL与虚拟机的区别 更详细的安装配置过程可参考微软官网&#xff1a; ​安装 WSL 前提 以下基于windows 111专业版进行配置&#xff0c;windows 10应该也是可以…...

Visual Studio Code 端口转发功能详解

Visual Studio Code 端口转发功能详解 引言 Visual Studio Code&#xff08;简称 VS Code&#xff09;是一个功能强大的源代码编辑器&#xff0c;它支持多种编程语言的语法高亮、智能代码补全、自定义快捷键、代码重构等特性。除了这些基本功能外&#xff0c;VS Code 还提供了…...

Android Framework AMS(14)ContentProvider分析-1(CP组件应用及开机启动注册流程解读)

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要解读ContentProvider组件的基本知识。关注思维导图中左上侧部分即可。 有了前面activity组件分析、service组件分析、广播组件分析的基…...

Three.js PBR材质

本文将详细介绍Three.js中的PBR&#xff08;Physically Based Rendering&#xff09;材质&#xff0c;包括PBR的基本概念、适用场景、PBR材质的构建以及一些高级应用技巧。 1. PBR&#xff08;Physically Based Rendering&#xff09;基本概念 PBR&#xff0c;即Physically B…...

智谱AI清影升级:引领AI视频进入音效新时代

前几天智谱推出了新清影,该版本支持4k、60帧超高清画质、任意尺寸&#xff0c;并且自带音效的10秒视频,让ai生视频告别了"哑巴时代"。 智谱AI视频腾空出世&#xff0c;可灵遭遇强劲挑战&#xff01;究竟谁是行业翘楚&#xff1f;(附测评案例)之前智谱出世那时体验了一…...

嵌入式硬件电子电路设计(五)MOS管详解(NMOS、PMOS、三极管跟mos管的区别)

引言&#xff1a;在我们的日常使用中&#xff0c;MOS就是个纯粹的电子开关&#xff0c;虽然MOS管也有放大作用&#xff0c;但是几乎用不到&#xff0c;只用它的开关作用&#xff0c;一般的电机驱动&#xff0c;开关电源&#xff0c;逆变器等大功率设备&#xff0c;全部使用MOS管…...

Centos 9 安装 PostgreSQL 16 并支持远程访问

仅列出核心操作&#xff0c;可以解决使用过程中遇到的访问问题。 1 安装 使用dnf源安装 sudo dnf module -y install postgresql:16 2 配置文件夹权限 使用root权限操作 sudo chown postgres:postgres /var/lib/pgsql/datasudo chmod -R 0750 /var/lib/pgsql/data 3 初…...

Dubbo源码解析(三)

一、Dubbo整合Spring启动流程 Dubbo的使用可以不依赖Spring&#xff0c;但是生产环境中Dubbo都是整合到Spring中一起使用&#xff0c;所以本章就解析Dubbo整合Spring的启动流程 一、传统的xml解析方式 一、Dubbo配置解析流程 在Java 中&#xff0c;一切皆对象。在JDK 中使用…...

HarmonyOS Next星河版笔记--界面开发(5)

1.字符串 1.1.字符串拼接 作用&#xff1a;把两个或多个字符串&#xff0c;拼成一个字符串。&#xff08;通常是用来拼接字符串和变量&#xff09; hello world > helloworld 加好作用&#xff1a;拼接 let name:string 小明 console.log(简介信息,名字是 name) …...

Spring Boot3 实战案例合集上线了

Spring Boot3实战案例合集...

在Ubuntu 24.04 LTS上安装飞桨PaddleX

前面我们介绍了《在Windows用远程桌面访问Ubuntu 24.04.1 LTS》本文接着介绍安装飞桨PaddleX。 PaddleX 3.0 是基于飞桨框架构建的一站式全流程开发工具&#xff0c;它集成了众多开箱即用的预训练模型&#xff0c;可以实现模型从训练到推理的全流程开发&#xff0c;支持国内外多…...

Homebrew 命令大全

Homebrew 是 macOS 和 Linux 系统上的一个流行的包管理器&#xff0c;它可以帮助用户轻松地安装、更新和管理软件包。以下是一些常用的 Homebrew 命令&#xff1a; 安装 Homebrew 如果你还没有安装 Homebrew&#xff0c;可以使用以下命令在 macOS 上进行安装&#xff1a; /b…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...

C++ 类基础:封装、继承、多态与多线程模板实现

前言 C 是一门强大的面向对象编程语言&#xff0c;而类&#xff08;Class&#xff09;作为其核心特性之一&#xff0c;是理解和使用 C 的关键。本文将深入探讨 C 类的基本特性&#xff0c;包括封装、继承和多态&#xff0c;同时讨论类中的权限控制&#xff0c;并展示如何使用类…...

k8s从入门到放弃之Pod的容器探针检测

k8s从入门到放弃之Pod的容器探针检测 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;容器探测是指kubelet对容器执行定期诊断的过程&#xff0c;以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...