码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基于AVDTP信令分析蓝牙音频启动流程


    前言

    公司项目edifier那边需要在原来音频SBC,AAC基础上增加LHDC5.0编码,在打通lhdc协议栈之前,学习记录一番AVDTP音频服务流程。


    一、AVDTP音频流基础知识

    分析音频流程首先应具备的最简单基础概念知识:AVDTP信令signal,流端点sep

    二、流程分析

    先上我打通的SBC+LHDC5.0协议在手机主动连接耳机情况下的爱丽丝截图:

    从图中可以看到,AVDTP的音频流程其实并不复杂,主要有5个步骤: 手机发现耳机(Discover)、分别获取耳机各个配置包(get capability)、设置手机和耳机所使用的配置、打开(开始)流端点和手机发送数据流。如下图红色框框部分:


    AVDTP启动音频流流程做以上6个步骤分析:

    1、AVDTP_DISCOVER:

    该步骤ellisys数据如下:


     首先sink接收到src的AVDTP_DISCOVER信令之后,会返回当前sink的avdtp所有的流端点ID包,包的内容只是简单的告诉src该类型的端点使用的流端点ID,流媒体数据类型,端点状态等信息。上面所使用的流端点结构avdtp_sep_info_t 如下:

    1. typedef struct seid_info {
    2. uint32_t rfa0:1;
    3. uint32_t inuse:1;
    4. uint32_t seid:6;
    5. uint32_t rfa2:3;
    6. uint32_t type:1;
    7. uint32_t media_type:4;
    8. }__attribute__ ((__packed__)) seid_info_t;
    9. typedef struct avdtp_sep_info {
    10. uint8_t state;
    11. seid_info_t info;
    12. }__attribute__ ((__packed__)) avdtp_sep_info_t;

    由此可见每个端点占用3个byte的payload,上图抓包显示的6个bytes数据,获取到的是sbc+lhdc  2个端点信息。

    2、AVDTP_GET_CAPABILITIES

     AVDTP_GET_CAPABILITIES信令需要返回具体流端点的配置信息,如上图返回的是sbc流端点的配置,其配置内容根据标准sbc数据配置包属性确定,内容包括媒体类型,音频类型,采样率等等信息。

    3、AVDTP_SET_CONFIGURATION

        AVDTP_SET_CONFIGURATION信令用来设置耳机端使用的配置,用来告诉耳机你该用哪种音频的配置来进行解析、解码我的数据包。在上一步耳机上传了配置包之后,手机会拿耳机所支持的数据类型(AAC 、 SBC or LHDC)跟手机本身支持的数据类型对比,然后选择恰当的数据类型进行音频传输,同时耳机端也会根据该信令的配置配置好本地的解码器,准备接收手机端数据进行解码播放。耳机端确认好配置包之后,回传accept命令包给手机。

    4,AVDTP_START

    该信令告诉耳机端,数据流开始,并且返回accept包。

    5,media stream

    媒体流传输并非avdtp信令内容,其内容主要是传输音频数据包!至此,耳机和手机启动音频传输过程完成。

  • 相关阅读:
    Vue中的常用指令v-html / v-show / v-if / v-else / v-on / v-bind / v-for / v-model
    Lodash常用方法介绍
    json-server搭建mock服务
    MybatisPlus【SpringBoot】 7 通用枚举
    关于#java#的问题:3)连接MySQL数据库,包含增删改查操作,完成浏览储户信息、查询储户信息、添加储户信息、删除储户信息、修改储户信息的操作
    AI一点通: OpenAI whisper 在线怎么调用,怎么同时输出时间信息?
    阿里云linux centos系统jdk版本始终换不了OpenJDK害人
    2.ElasticSearch 高级查询语法Query DSL实战
    机器学习和数据挖掘02-Gaussian Naive Bayes
    庚顿新一代实时数据库太快了,得用对数坐标轴放大看
  • 原文地址:https://blog.csdn.net/louis_bao/article/details/128204380
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号