【Android】【Bluetooth Stack】蓝牙电话协议分析(超详细)

1. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论

2. 欢迎大家关注和订阅,【蓝牙协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待!

目录

1. 协议架构

1.1 Profile Dependencies

1.2 HFP Protocol Stack

2. HFP功能支持情况

3. AT 指令集

3.1 GSM 07.07 & 3GPP 27.077 重用的 AT 功能

3.2 蓝牙定义的 AT 功能

3.3 AT+CIND 相关 indicators及范围

3.4 AT+CLCC


1. 协议架构

1.1 Profile Dependencies

在蓝牙电话的数据传输中使用的是SCO协议(同步定向链接)。支持对时延敏感的信息如语音。

使用保留带宽进行同步通信,即两台设备在LMP层利用保留时隙在物理信道上周期传送数据包,这种类型的链接主要用于传送SCO包(语音数据)。SCO不包括CRC码,且不进行重传,主要支持传输有时间限制的信息,例如声音。

仅仅在ACL链接已经建立之后,才可以建立SCO链接;

  • AT CMD:AT指令是应用于终端设备和PC应用之间的连接与通信的指令;

  • SPP:蓝牙串口协议,在蓝牙设备之间建立虚拟的串口进行数据通信,简单的说就是两个蓝牙设备对端发送自定义数据;iPhone不支持SPP协议;

  • GAP:通用访问配置文件,该Profile保证不同的Bluetooth产品可以互相发现对方并建立连接;GAP定义了蓝牙设备如何发现和建立与其他设备的安全/不安全连接,它处理一些一般模式的业务(询问、命名和搜索)和一些安全性问题;GAP一般有4个作用:

    • Profile Role
    • 可发现模式和过程
    • 连接模式和过程
    • 安全模式和过程
  • eSCO:可以简单的理解为和SCO不同点:支持数据包的重传;

  • incoming call:由Phone Network到AG的通话,即称为来电;

  • outgoing call:由AG到Phone Network的通话,即称为拨号,去电;

1.2 HFP Protocol Stack

针对蓝牙电话,涉及到的协议有:HFP、RFCOMM;

目前HFP的使用场景常见的有车载蓝牙、耳机、PDA(Personal Digital Assistant - 掌上电脑,类似于智能手机、平板电脑、手持游戏机等),其中HFP协议中定义了AG和HFP两种角色:

  • AG(Audio Gate):音频网关 - 音频设备输入输出网关;
  • HF(Hands Free):免提 - 该设备作为音频网关的远程音频输入 / 输出机制,并可提供若干遥控功能;

在车载领域,手机侧为AG,车载侧为HF,在Android源码定义中,通常将AG称为HFP/AG,将HF称为HFPClient/HF;

2. HFP功能支持情况

(M代表强制支持,O代表可选)

NumfunctionHFAGNumfunctionHFAG
1连接管理MM14噪声抑制回声消除OO
2电话状态信息MM15语音识别OO
3音频连接处理MM16号码绑定语音标签OO
4接收语音来电MM17传输多音频能力OM
5拒绝语音来电MO18远程音量控制OO
6中断电话MM19回复和保持OO
7通话中音频链路切换MM20描述号码信息OM
8免提设备拨号OM21a扩展电话状态OM
9历史列表拨号OM21b扩展电话控制OO
10拨打最后一个电话OM22特有指示OM
11拨号等待通知OM23宽频语音OO
12三方通话OO24编解码器协商OO
13CLI(呼叫线路识别)OM25手持设备指示器OO

3. AT 指令集

3.1 GSM 07.07 & 3GPP 27.077 重用的 AT 功能

CMD发送方SyntaxResponseNameDescription
ATAOK标准呼叫应答命令
ATDdd...dd车机OK标准AT命令,用于拨打电话号码本规范仅包括语音通话
ATD>nnn...车机OK标准ATD命令的扩展,用于内存拨号本规范仅涉及语音通话
ERROR标准错误指示代码
OK对命令执行的标准确认
NO CARRIER, BUSY, NO ANSWER, DELAYED, BLACKLISTEDAT命令的扩展响应指示代码这些指令由AG向HF发送,作为对HF向AG发出的AT命令的响应,或从AG发出,作为未经请求的结果代码
RING标准来电指示
AT+CCWA车机AT+CCWA=[[,[,]]]+CCWA标准的呼叫等待通知AT命令在该规范中,仅适用参数启动/禁用呼叫等待通知主动结果代码
+CCWA手机标准“呼叫等待通知”主动结果代码该规范中仅包含两个属性:number和type number:文本字符串,并应始终包含在双引号内 type:字段指定提供的电话号码的格式
AT+CHLD车机AT+CHLD=标准呼叫保持和多方处理AT命令的取值范围: 0:释放所有保持的呼叫或将用户确定的用于忙(UDUB)设置为等待呼叫 1:释放所有活动呼叫(如果存在),并接收其他呼叫(保持或等待) 1:释放具有指定索引(索引值为值)的调用 2:保持所有活动呼叫(如果存在)并接受另一个(保持或等待)呼叫 2:使用指定呼叫()请求私人咨询模式。(将所有呼叫置于保持状态,指示的呼叫除外) 3:将保持的呼叫添加到对话中 4:连接两个呼叫并断开用于与两个呼叫的连接(显式呼叫转移)。
AT+CHUP车机标准挂起AT命令执行命令使AG终止当前活动的调用
AT+CIND车机AT+CIND=?:获取对方特性支持情况 AT+CIND?:获取对方特性值+CIND标准指示更新AT命令
+CIND手机当前电话指示器的标准列表
AT+CLCC车机OK标准列表当前呼叫命令
+CLCC手机OK标准列表当前调用结果代码
AT+COPS车机+COPS:,,用于读取网络运营商信息:包含当前模式并且不提供有关操作员名称的信息 :指定参数字符串的格式,在本规范中应始终为0 :以字母数据格式指定带引号的字符串,表示网络运营商的名称。该字符串不得超过16个字符
AT+CMEE车机标准AT命令用于启用
+CME ERROR+CME ERROR:扩展音频网关错误结果代码响应使用结果代码+CME ERROR:作为与AG功能相关的错误的指示
AT+CLIP车机AT+CLIP=+CLIP标准呼叫线路识别通知激活AT命令它启用/禁用呼叫线路识别通知主动结果代码 +CLIP
+CLIP手机+CLIP: , type> [,, [,[] [,]]]标准呼叫线路识别通知主动结果代码:参数应为文本字符串,并应始终包含在双引号内 :字段指定提供的电话号码的格式
AT+CMER车机AT+CMER=[[,[,[, [,]]]]]OK标准事件报告激活/停用AT命令:该参数一般情况下value = 3 :分为两种情况:0代表禁用,1代表激活
+CIEV手机+CIEV: ,标准的指标事件报告主动结果代码:AT+CIND=?命令。列表的第一个元素应具有=1 :指标的当前状态
AT+VTS车机AT+VTS=标准DTMF生成AT命令
AT+CNUM车机AT+CNUM AT+CNUM=?+CNUM检索用户号码信息 测试用户号码信息 - 未实施HF为AG中的“用户号码信息”功能发出的命令。仅使用AT+CNUM格式的动作命令
+CNUM手机+CNUM: [],, ,[ ,]将“订户号码信息”从AG发送到HF的标准响应:不支持此可选字段,应留空 :包含电话号码的引用字符串,格式由指定 :字段指定提供的电话号码的格式 :不支持此可选字段,应留空 :表示此电话号码与哪个服务相关,4代表语音,5代表传真

3.2 蓝牙定义的 AT 功能

CMD发送方SyntaxResponseDesc
AT+BIA车机AT+BIA=[<indrep 1>[,…[,[]]]]]]蓝牙指示激活,单独激活或停用指示器:代表了指标x的状态,1代表激活,0代表禁用
AT+BINP车机AT+BINP=+BINP: …蓝牙输入,用于从AG请求某些特定数据输入的命令收到此命令后,AG应执行适当的操作,以便使用+BINP响应将请求的信息发送回HF :数据请求,其中value = 1对应于HF中记录的最后一个语音标签的电话号码 :AG返回的数据参数。该参数内容取决于,一般情况下为Phone number
AT+BLDN车机AT+BLDN蓝牙最后拨打的号码用于呼叫最后拨打的电话号码。收到此命令后,AG应建立对最后拨打的电话号码的语音呼叫。
AT+BVRA车机AT+BVRA=+BVRA蓝牙语音识别激活启用/禁用AG中的语音识别功能,如果支持增强语音识别状态功能,则此命令用于向AG指示HF已准备号呈现音频输出 :0代表了在AG中禁用语音识别,1代表在AG中启用语音识别,2代表仅当AG和HF都支持增强语音识别状态功能时才应使用该值
+BVRA手机+BVRA: ,蓝牙语音识别激活当AG中的语音识别功能由AG自主激活/停用时,用于通知HF的非请求结果代码 :0代表了在AG中禁用语音识别,1代表在AG中启用语音识别 :反映AG上语音识别引擎当前状态的位掩码 :仅当AG和HF都支持语音识别文本功能,才会出现
AT+BRSF车机AT+BRSF=+BRSF蓝牙检索支持的功能通知AG HF中可用的支持功能,并请求有关AG中支持的功能的信息。支持的特性应以十进制值表示 0:EC / NR 功能 1:三方通话 2:CLI演示功能 3:语音识别激活 4:远程音量控制 5:增强的通话状态 6:增强的呼叫控制 7:编解码器协商 8:HF 指标 9:支持的eSCO S4 设置 10:增强的语音识别状态 11:语音识别文本 12-31:留作将来使用
+BRSF手机+BRSF:蓝牙检索支持的功能AG响应AT+BRSF命令发送的结果码,用于通知HF AG支持哪些功能。支持的特性应以十进制值表示 0:三方通话 1:EC / NR 功能 2:语音识别功能 3:带内铃声功能 4:将号码附加到语音标签 5:拒绝来电的功能 6:增强的通话状态 7:增强的呼叫控制 8:扩展错误结果代码 9:编解码器协商 10:HF 指标 11:支持的 eSCO S4 设置 12:增强的语音识别状态 13:语音识别文本 14-31:留作将来使用
AT+NREC车机AT+NREC=降噪和回声消除发出命令以禁用嵌入AG中的任何回声消除和降噪功能 :0代表了在AG中禁用 EC / NR
AT+VGM车机AT+VGM=+VGM=麦克风增益HF发出的命令,用于向AG报告其当前的麦克风增益级别设置 :是一个十进制数字,与由HF控制的特定(取决于实现)音量级别有关。该命令不会改变AG的麦克风增益,它仅指示HF中麦克风增益的当前值,取值范围:0~15
AT+VGS车机AT+VGS=+VGS=扬声器增益HF发出的命令,用于向AG报告其当前的扬声器增益水平设置 :是一个十进制数字,与由HF控制的特定(取决于实现)音量级别有关。该命令不会改变AG的扬声器增益,它仅指示HF中麦克风增益的当前值,取值范围:0~15
+VGM手机+VGM=麦克风增益由AG主动发出的结果代码,用于设置HF的麦克风增益。
+VGS手机+VGS=扬声器增益由AG主动发出的结果代码,用于设置HF的扬声器增益
+BSIR手机+BSIR:带内铃声的蓝牙设置由AG发出的主动结果代码,用于向HF指示带内铃声设置已在本地更改。HF可以通过改变自己的警报方法作出响应的反应 :0代表了AG不提供带内铃声,1代表AG提供带内铃声
AT+BTRH车机AT+BTRH=:设置指令 AT+BTRH?:读取当前状态+BTRH蓝牙响应和保持功能HF为AG中的“响应和保持”功能发出的命令。本规范定义了set和read命令的使用,AT+BTRH ? HF应使用命令来查询 AG 的当前“响应和保持”状态 :0代表保留来电,1代表接受保持的来电,2代表拒绝保持的来电
+BTRH手机+BTRH=蓝牙响应和保持功能每当来电被搁置或接受或拒绝时,用于通知HF的结果代码。对于AT+BTRH,AG是否也应回复此响应 ? 来自 HF 的命令 :0代表了来电在 AG中保持,1代表了在AG中接受保持的来电,2代表了在AG中拒绝保持的来电
AT+BCC车机AT+BCC蓝牙编解码连接HF使用该命令请求AG启动编解码器连接过程
AT+BCS车机AT+BCS=蓝牙编解码器选择此命令向远程设备(AG)确认编解码器,并隐含地确认将在同步连接上使用哪个同步协议,如果不包含任何值,则该命令无效 :所有可能的Codec ID,将AT+BAC的定义
+BCS手机+BCS:蓝牙编解码器选择该命令将编解码器通知给远程设备(HF),并隐含地通知将在同步连接上使用哪种同步协议 :所有可能的Codec ID,将AT+BAC的定义
AT+BAC车机AT+BAC= [[,[,...[,]]]] (u1,u2, ..., un are a codec IDs)OK蓝牙可用编解码器此命令通知远程设备(AG)HF支持哪些编解码器 :所有可能的Codec ID,将AT+BAC的定义
AT+BIND车机AT+BIND= ,,,...,:列出HF支持的指标 AT+BIND=?:阅读AG支持的指标 AT+BIND?:读取指示的AG启用/禁用状态+BIND蓝牙HF指示功能该命令使HF能够通知AG支持哪些HF到AG指示符。指示器可以启用或禁用。除非“HF 指示器”功能的 AG 和 HF BRSF 位都设置为1,否则不应使用AT+BIND命令 ...:0-65535,作为十进制无符号整数值输入,不带前导零,引用 HF 指示器分配的编号。
+BIND手机+BIND: (,,,...,):响应AT+BIND=? +BIND: ,:主动或响应AT+BIND?蓝牙HF指示功能该响应使AG能够通知HF支持哪些HF指示器及其状态,启用或禁用。 除非“HF 指示器”功能的AG和HF BRSF为都设置为1,否则不应使用+BIND响应 ...:0-65535,作为十进制无符号整数值输入,不带前导零,引用 HF 指示器分配的编号。 :0 - 1,其中0代表了指示器被禁用,不应为此指示器发送值更改,1代表了指示器已启用,可以为该指示器发送值更改
AT+BIEV车机AT+BIEV= ,蓝牙HF指示功能此命令使HF能够将启用的HF指示器的更新值发送到AG

3.3 AT+CIND 相关 indicators及范围

indicatorindexindex 范围Desc
call:Call Status indicator10 1there are no calls in progress — 没有电话在进行中 at least one call is in progress — 至少有一个电话在进行中
callsetup:Call set up status indicator20 1 2 3not currently in call set up — 当前没在呼叫中设置 an incoming call process ongoing — 来电进行中 an outgoing call set up is ongoing — 正在设置一个传出呼叫 remote party being alerted in an outgoing call — 呼叫的对方正在响铃
service:Service availability indication30 1No Home/Roam network available — 没有信号 Home/Roam network available — 有信号服务
signal:Signal Strength indicator40~5电话信号质量
roam:Roaming Status indicator50 1roaming is not active — 没有漫游 a roaming is active — 漫游中
battchg:Battery Charge indicator of AG60~5AG侧的电量值
callheld:Call hold status indicator70 1 2No calls held Call is placed on hold or active/held calls swapped(The AG has both an active AND a held call) — 电话被设置为保持或者电话切换中 Call on hold, no active call — 电话保持中,没有电话处于通话中

3.4 AT+CLCC

HF请求当前的电话信息列表,构造格式:+CLCC: < idx >,< dir >,< status >,< mode >,< mpty >,< number >,< type >,AG侧回复当前的电话信息列表。如果当前没有电话,AG侧也需回复OK指令,不然将电话信息以列表形式发送给HF;

  • < idx >:当前电话是第几路,从 1 开始计数

  • < dir >:电话方向,0代表往外拨打的电话outgoing;1代表来电incoming;

  • < status >:电话状态

    • 0:Active
    • 1:Held
    • 2:Dialing(outgoing calls only)
    • 3:Alerting(outgoing calls only)
    • 4:Incoming(incoming calls only)
    • 5:Waiting(incoming calls only)
    • 6:Call held by Response and Hold
  • < mode >:电话模式

    • 0:voice
    • 1:data
    • 2:FAX
  • < mpty >:是否为多方通话的电话

    • 0:this call is NOT a member of a multi-party(conference)call
    • 1:this call is a member of a multi-party(conference)call
  • < number >:可选项,电话号码

  • < type >:可选项,电话类型

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linux -- I2C设备驱动 -- MS32006(低压5V多通道电机驱动器)

产品简述 MS32006 是一款多通道电机驱动芯片, 其中包含两路步进电机驱动, 一路直流电机驱动; 每个通道的电流最高电流1.0A; 支持两相四线与四相五线步进电机。芯片采用 I2C 的通信接口控制模式, 兼容 3.3V/5V 的标准工业接口。 MS32006 总共集成了两路步进电机驱动器与一…

mysql置事务隔离级

隔离级别脏读&#xff08;Dirty Read&#xff09;不可重复读&#xff08;Non-Repeatable Read&#xff09;幻读&#xff08;Phantom Read&#xff09;读未提交是是是读已提交否是是可重复读否否是序列化否否否 这个表格以可读性的方式总结了四种隔离级别下可能发生的并发问题。…

【数据结构】——栈与队列(附加oj题详解)深度理解

栈 1.栈的定义 栈&#xff1a;栈是仅限与在表尾进行插入或者删除的线性表 我们把允许一端插入和删除的一端叫做栈顶&#xff0c;另一端叫栈底&#xff0c;不含任何元素的栈叫做空栈&#xff0c;栈又叫做后进先出的线性表&#xff0c;简称LIFO结构 2.栈的理解 对于定义里面…

Medium 级别反射型 XSS 攻击演示(附链接)

环境准备 如何搭建 DVWA 靶场保姆级教程&#xff08;附链接&#xff09;https://eclecticism.blog.csdn.net/article/details/135834194?spm1001.2014.3001.5502 测试 打开靶场找到该漏洞页面 先右键检查输入框属性 跟 Low 级别是一样的&#xff0c;所以咱们直接输入带 HTM…

不要看这些影视作品

这些电影/电视剧很不好看&#xff0c;虽然它评分很高&#xff0c;但是很容易误导人。我帮大家挑出来&#xff0c;以免浪费大家时间。 1. 假如我是真的 导演&#xff1a;王童 主演&#xff1a;谭咏麟、胡冠珍 不推荐理由&#xff1a;情节夸张&#xff0c;毒害青少年 2. 桃源…

JDBC综合练习

文章目录 1.需求2.环境搭建3.查询所有数据4.添加5.修改6.删除 1.需求 完成商品品牌数据的增删改查操作。 • 查询&#xff1a;查询所有数据 • 添加&#xff1a;添加品牌 • 修改&#xff1a;根据 id修改 • 删除&#xff1a;根据 id删除 2.环境搭建 •准备环境&#xf…

CISP 4.2备考之《物理与网络通信安全》知识点总结

文章目录 第 1 节 物理与环境安全第 2 节 网络安全基础第 3 节 网络安全技术与设备第 1 部分 防火墙第 2 部分 入侵检测系统第 3 部分 其他安全产品 第 4 节 网络安全设计规划 第 1 节 物理与环境安全 1.场地选择 1.1 场地选择:自然条件、社会条件、其他条件。1.2 抗震和承重&…

Set系列集合:Hashset、LinkedHashset、TreeSet --java学习笔记

Set系列集合 Set系列集合特点:无序、不重复、无索引添加数据的顺序和获取出的数据顺序不一致;Hashset:无序、不重复、无索引LinkedHashset:有序、不重复、无索引TreeSet:排序、不重复、无索引 代码演示&#xff1a; import java.util.*;public class ListTest5 {public stati…

c语言食堂就餐排队问题290行

定制魏&#xff1a;QTWZPW&#xff0c;获取更多源码等 目录 题目 数据结构 函数设计 结构设计 总结 效果截图 ​ 主函数代码 题目 设计一个程序来模拟食堂就餐排队问题&#xff0c;通过输入学生人数和面包数量&#xff0c;计算有多少学生能够吃到午餐。 数据结构 该…

【链表】Leetcode 2. 两数相加【中等】

两数相加 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c; 并且每个节点只能存储 一位 数字。请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外&#xff0c;这两个数都不…

Python核心编程 --- 高级数据类型

Python核心编程 — 高级数据类型 字符串 列表 元组 字典 1.序列 序列&#xff1a;一组按顺序排列的数据集合。 在Python中存在三种内置的序列类型&#xff1a;字符串、列表、元组 优点&#xff1a;可支持索引和切片操作 特点&#xff1a;第一个正索引为0&#xff0c;指…

web学习笔记(四十三)ajax

目录 1.相关基础概念 1.1客户端与服务器 1.2URL地址 1.3 客户端和服务器端通信的过程 1.4 一个URL地址放入浏览器&#xff0c;到页面渲染发生了什么事情 1.5 数据 1.6资源的请求方式 2.Ajax 2.1什么是Ajax 2.2 jQuery 中的Ajax 2.2.1 $.get()的语法 2.2.2$.post()…

Spring Cloud Alibaba Sentinel 使用详解

一、Sentinel 介绍 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征: 丰富的应用场景&#xff1a; Sentinel 承接了阿里巴…

Linux-Arm环境下配置编译qt-everywhere及交叉编译环境

前言 最近在搞交叉编译的事&#xff0c;手上拿了个同事的香橙派玩交叉编译&#xff0c;现在来到了第一步&#xff0c;就是先在arm上配置qt的开发环境。当然了Qt没有直接提供qt on arm&#xff0c;而是需要自行在arm环境下编译一个qt环境出来&#xff0c;所以这里需要使用到qt提…

集简云新增“文本语音转换”功能,实现智能语音交互

为丰富人工智能领域的应用集成&#xff0c;为用户提供更便捷和智能化的信息获取和视觉创作方式&#xff0c;本周集简云上线了内置应用—文本语音转换。目前支持OpenAI TTS和TTS HD模型&#xff0c;实现文本语音高效智能转换&#xff0c;也可根据你的产品或品牌创建独特的神经网…

lvgl 窗口 windows lv_port_win_visual_studio 版本 已解决

不知道的东西&#xff0c;不知道lvgl窗口。一切从未知开始 lv_port_win_visual_studio 主分支 对应的分支 v7版本更新git submodule update --init --recursive同步 lvgl代码随后打开 visualSudio 打开.sln 文件 编译 release模式 允许 一切正常代码部分

Windows Insiders WSLg Linux GUI App 支持尝鲜

2021 年 4 月 21 日&#xff0c;微软在 Developer Blogs 发布了 Windows 预览版 WSL&#xff08;Windows Linux 子系统&#xff09; 对 Linux GUI App 的支持的公告&#x1f517;&#xff0c;碰巧&#x1f600;我最近重装了波电脑&#xff0c;系统换成了 Windows Insiders&…

【数据结构刷题专题】——二分查找

二分查找 二分查找模板题&#xff1a;704. 二分查找 二分查找前提&#xff1a; 有序数组数组中无重复元素 左闭右闭&#xff1a; class Solution { public:int search(vector<int>& nums, int target) {int left 0;int right nums.size() - 1;while (left <…

​CC-EasyCommonInput: 基于uni-app原生input组件封装的增强实用输入框组件

CC-EasyCommonInput&#xff1a;基于uni-app原生input组件封装的增强实用输入框组件 摘要&#xff1a; 在前端开发中&#xff0c;输入框&#xff08;Input&#xff09;是一个常见的UI组件&#xff0c;用于获取用户输入的数据。然而&#xff0c;为了满足不同的业务需求和用户体验…

LED显示屏视频播放器的8大功能

随着中国LED显示屏企业的规模发展和产品技术的不断创新&#xff0c;LED显示屏在各个领域中的应用得到了广泛推广。然而&#xff0c;LED显示屏的出色表现离不开LED视频播放器这一关键设备的支持。下面将介绍LED视频播放器的8大功能&#xff0c;以及它们如何提升LED显示屏的显像效…