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 来支持该功能。特别是我们做音视频对延迟比较敏感的行业,可酌情参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/471898.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android setTheme设置透明主题无效

【问题现象】 1、首先&#xff0c;你在AndroidManifest.xml中声明一个activity&#xff0c;不给application或者activity设置android:theme, 例如这样&#xff1a; <applicationandroid:allowBackup"true"android:icon"mipmap/ic_launcher"android:lab…

基于Spring Boot的在线性格测试系统设计与实现(源码+定制+开发)智能性格测试与用户个性分析平台、在线心理测评系统的开发、性格测试与个性数据管理系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

摄像机视频分析软件下载LiteAIServer视频智能分析软件抖动检测的技术实现

在现代社会中&#xff0c;视频监控系统扮演着至关重要的角色&#xff0c;其可靠性和有效性在很大程度上取决于视频质量。然而&#xff0c;由于多种因素&#xff0c;如摄像机安装不当、外部环境振动或视频信号传输的不稳定&#xff0c;视频画面常常出现抖动问题&#xff0c;这不…

一文说清libc、glibc、glib的发展和关系

一 引言 在大家的技术生涯中&#xff0c;一定会遇到glib、glibc、libc这些个名词。 尤其像我这种对英文名脸盲的人&#xff0c;看着它们就头大&#xff0c;因为单从名字上看&#xff0c;也太像了&#xff0c;所以经常容易混淆。 即使翻翻网上的资料&#xff0c;看完还是有点懵…

【postman】怎么通过curl看请求报什么错

获取现成的curl方式&#xff1a; 1&#xff0c;拿别人给的curl 2&#xff0c;手机app界面通过charles抓包&#xff0c;点击接口复制curl 3&#xff0c;浏览器界面-开发者工具-选中接口复制curl 拿到curl之后打开postman&#xff0c;点击import&#xff0c;粘贴curl点击send&am…

综合文化信息管理系统|基于java和小程序的综合文化信息管理系统设计与实现(源码+数据库+文档)

综合文化信息管理系统 目录 基于java和小程序的打印室预约系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&…

vue3: ref, reactive, readonly, shallowReactive

vue3: ref, reactive, readonly, shallowReactive 原文地址:https://mp.weixin.qq.com/s/S3jPZKEMBP8nQQObF5d2VA <template><!-- <ul><li v-for"item in list.arr">{{item}}</li></ul><button click.prevent"add"…

计算机毕业设计Python+大模型中医养生问答系统 知识图谱 医疗大数据 中医可视化 机器学习 深度学习 人工智能 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

【Java Web】Ajax 介绍及 jQuery 实现

文章目录 AJAX介绍XMLHttpRequestjQuery实现Ajax$.ajax()$().load()$.get()$.post() AJAX介绍 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种创建高效、动态网页应用的网页开发技术。它允许在不重新加载整个页面的情况下进行异步数据更新和交互&#xf…

【C++】—— map 与 set 深入浅出:设计原理与应用对比

不要只因一次失败&#xff0c;就放弃你原来决心想达到的目的。 —— 莎士比亚 目录 1、序列式容器与关联式容器的概述与比较 2、set 与 multiset 2.1 性质分析&#xff1a;唯一性与多重性的差异 2.2 接口解析&#xff1a;功能与操作的全面解读 3、map 与 multimap 3.1 性…

Git回到某个分支的某次提交

1.切换到需要操作的分支&#xff08;<branch-name>是分支名称&#xff09;。 命令如下&#xff1a; git checkout <branch-name> 2.获取代码的提交记录 。命令如下&#xff1a; git log 按q退出当前命令对话。 获取到某次提交或者合并的hash值&#xff08;下文…

《TCP/IP网络编程》学习笔记 | Chapter 10:多进程服务器端

《TCP/IP网络编程》学习笔记 | Chapter 10&#xff1a;多进程服务器端 《TCP/IP网络编程》学习笔记 | Chapter 10&#xff1a;多进程服务器端进程概念及应用并发服务端的实现方法理解进程进程ID通过调用 fork 函数创建进程 进程和僵尸进程僵尸进程产生僵尸进程的原因销毁僵尸进…

【服务器】本地安装X11 服务器-Windows

【服务器】本地安装X11 服务器-Windows X11 服务器概述X Window System 简介 本地安装X11 服务器另&#xff1a;采用 MobaXterm (自带 X server) 连接远程服务器简单说明流程&#xff1a; 参考 X11 服务器概述 X11 服务器 是 X Window System&#xff08;简称 X11 或 X&#x…

Unity中HDRP设置抗锯齿

一、以前抗锯齿的设置方式 【Edit】——>【Project Settings】——>【Quality】——>【Anti-aliasing】 二、HDRP项目中抗锯齿的设置方式 在Hierarchy中——>找到Camera对象——>在Inspector面板上——>【Camera组件】——>【Rendering】——>【Pos…

使用热冻结数据层生命周期优化在 Elastic Cloud 中存储日志的成本

作者&#xff1a;来自 Elastic Jonathan Simon 收集数据对于可观察性和安全性至关重要&#xff0c;而确保数据能够快速搜索且获得低延迟结果对于有效管理和保护应用程序和基础设施至关重要。但是&#xff0c;存储所有这些数据会产生持续的存储成本&#xff0c;这为节省成本创造…

基于ssh得网上预约挂号系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【SpringBoot】20 同步调用、异步调用、异步回调

Git仓库 https://gitee.com/Lin_DH/system 介绍 同步调用&#xff1a;指程序在执行时&#xff0c;调用方需要等待函数调用返回结果后&#xff0c;才能继续执行下一步操作&#xff0c;是一种阻塞式调用。 异步调用&#xff1a;指程序在执行时&#xff0c;调用方在调用函数后立…

Leecode刷题C语言之统计好节点的数目

执行结果:通过 执行用时和内存消耗如下&#xff1a; 题目&#xff1a;统计好节点的数目 现有一棵 无向 树&#xff0c;树中包含 n 个节点&#xff0c;按从 0 到 n - 1 标记。树的根节点是节点 0 。给你一个长度为 n - 1 的二维整数数组 edges&#xff0c;其中 edges[i] [ai,…

Cellebrite VS IOS18Rebooting

Cellebrite VS IOS18Rebooting我们想分享一些有关 iOS 18 重启“功能”的信息。在过去一周左右的时间里&#xff0c;人们对 iOS 18 中一项新的未记录功能产生了极大关注&#xff0c;该功能会导致设备在一段时间不活动后重新启动。 这意味着&#xff0c;如果设备在一定时间不活…

mysql每日一题(上升的温度,date数据的计算)

日期之间的运算 日期类型的加法运算 data_add(now_data,interval 1 month) select date_add(now(), interval 1 day); -- 加1天 select date_add(now(), interval 1 hour); -- 加1小时 select date_add(now(), interval 1 minute); -- 加1分钟 select date_add(now(), inter…