手把手教你做投屏AAC的详细介绍-千里马带你学framework

面试题目--MPEG4与H.264的区别 一、音频压缩编码标准。1、  MPEG1标准MPEG1音频压缩算法特点:1)        编码器的输入信号为线性PCM信号,采样频率是32KHz,44.1kHz或者48kHz,输出码率为32-384Kbit/s2)        压缩后的比特流支持单声道和双声道3)        MPEG1音频压缩标准提供三个独立的压缩层次:层1(Layer1)、层2(Layer2)、层 阅读详情

背景:

在学习投屏专题开发相关课程时候,不可以避免的就是需要了解音视频相关的知识点,前面已经分享过了音视频的相关基础知识,也详细介绍了h264相关,本节来详细介绍一下aac,这个也是在音视频里很重要的基础知识。
在这里插入图片描述

AAC 简介

AAC(Advanced Audio Coding)是一种现代的音频编码技术,用于数字音频的传输和存储领域。AAC是MPEG-2和MPEG-4标准中的一部分,可提供更高质量的音频数据。

AAC被认为是MP3的继任者。AAC比MP3的压缩率更高,压缩后的文件越小,二是保真性比MP3强。ACC最开始是基于MPEG-2的音频编码技术,MPEG-4标准出现后,AAC重新集成了其特性,加入了SBR技术和PS技术。

特点:
更好的声音质量和更低的压缩比,减少了由于压缩而引入的失真和噪音。
支持多种采样率、声道数和比特率。
具有很好的灵活性和可扩展性。

AAC是一种现代的音频编码技术,具有高质量的音频数据、较低的比特率、灵活性和可扩展性等优点。由于其广泛应用于数字音频传输和存储领域,它已经成为音频压缩领域的标准之一。

AAC音频文件格式

AAC的音频文件格式有ADIF & ADTS:

ADIF:

Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。

ADTS:

Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

总结:

ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。且这两种的header的格式也是不同的,目前一般编码后的和抽取出的都是ADTS格式的音频流。

ADTS

在ADTS文件中,每个AAC音频帧都以一个长度为7或9个字节的ADTS帧头开始,其中包含了同步标记、帧大小、采样率、声道数和其他元数据。接下来是AAC编码的原始音频数据,这些数据会被添加到ADTS帧中,以形成完整的音频帧。
具体流描述如下网图所示:
在这里插入图片描述

ADTS的头信息分为:

ADTS的头信息为两部分组成,其一为固定头信息,紧接着是可变头信息。固定头信息中的数据每一帧都相同,而可变头信息则在帧与帧之间可变。(注意这里可变头不是说头的字节占位可变,是指的头的里面内容值可变)
固定头信息(adts_fixed_header,28bits)和可变头信息(adts_variable_header,28bits)两部分。

固定头:

在这里插入图片描述

syncword :同步头代表着1个ADTS帧的开始,所有bit置1,即 0xFFF
ID:MPEG标识符,0标识MPEG-4,1标识MPEG-2
Layer: 直接置00,解码时忽略这个参数
protection_absent:表示是否误码校验。1 no CRC , 0 has CRC
profile:AAC 编码级别, 0: Main Profile, 1:LC(最常用), 2: SSR, 3: reserved.
在这里插入图片描述
sampling_frequency_index:采样率标识,重要!
在这里插入图片描述

Private bit:直接置0,解码时忽略这个参数
channel_configuration: 声道数标识,重要
在这里插入图片描述

original_copy: 直接置0,解码时忽略这个参数
home:直接置0,解码时忽略这个参数

重点关注常见两个字段,一个采样率一个声道数:

  1. sample_freq_index : 4代表44100hz
  2. channel_configuration: 2表示双声道

可变头:

在这里插入图片描述

copyright_identification_bit: 直接置0,解码时忽略这个参数
copyright_identification_start: 直接置0,解码时忽略这个参数
aac_frame_lenght: ADTS帧长度包括ADTS长度和AAC声音数据长度的和。即 aac_frame_length = (protection_absent == 0 ? 9 : 7) + audio_data_length非常重要
adts_buffer_fullness: 当设置为0x7FF时表示时可变码率
number_of_raw_data_blocks_in_frames: 当前音频包里面包含的音频编码帧数,为0代表1frame.

在这里插入图片描述

AAC ES 详解

Elementary Stream
Elementary Stream是一种仅包含单一媒体类型(音频或视频)数据的格式。在音频ES中,不包含任何额外的元数据或者是多媒体容器封装信息,仅仅是纯粹的音频数据。对于AAC而言,ES通常指裸的AAC码流。

AAC ES的处理

要处理AAC ES,开发者需要使用各种编解码库,如FFmpeg的库来解码或编码AAC流。流程大概分为这几步:

编码:将原始音频信号(PCM数据)通过AAC编码器转换成AAC ES。
解码:将AAC ES通过AAC解码器转换回原始音频信号(PCM数据)用于播放。

实战:AAC解析

1、直接16进制手动查表解析
16进制方式查看aac文件
在这里插入图片描述固定头信息 16进制

ff f9 50 8

变成二进制

1111 1111 1111 1001 0101 0000 1000
查询上面的表获取对应两个关键值:
在这里插入图片描述
固定头信息得到aac中采样率44100 双声道

可变头信息 16进制
0 2e 7f fc
0000 0010 1110 0111 1111 1111 1100
在这里插入图片描述

得出有效信息:
adts这个frame大小为0x173=371,只有一个aac的帧

2、代码解析
这个部分可以参考雷神blog
https://blog.youkuaiyun.com/leixiaohua1020/article/details/50535042

刚好代码验证一下手动查表是否正确:
在这里插入图片描述

同时也可以使用官方ffmpeg ,ffprop工具看看:

ffmpeg -i nocturne.aac
Input #0, aac, from 'nocturne.aac':
  Duration: 00:00:30.04, bitrate: 127 kb/s
    Stream #0:0: Audio: aac (LC), 44100 Hz, stereo, fltp, 127 kb/s

ffprobe -i nocturne.aac -show_frames
在这里插入图片描述
具体详情试看方式:
投屏专题部分:
https://mp.weixin.qq.com/s/IGm6VHMiAOPejC_H3N_SNg
在这里插入图片描述

更多framework技术干货,请关注下面“千里马学框架”

在PyCharm中配置使用Anaconda环境 在PyCharm中配置使用Anaconda环境一、步骤1.Anaconda2.PyCharm总结 一、步骤 1.Anaconda 如未安装Anaconda可至其官网下载,学习使用个人版就可以了。 下载地址:https://www.anaconda.com/products/individual 1、打开Anaconda Navigator,点击Environments可以看到anaconda中已经有了默认的“base”环境,其中包含了大多数我们会用到的包,在PyCharm中可以直接使用该环境,而无需自行下载 阅读详情

相关推荐

基于大模型的急性重症胰腺炎全流程预测与诊疗方案研究

本研究构建了基于大模型的急性重症胰腺炎(SAP)全流程预测与诊疗系统,实现了从术前风险评估到术后康复管理的精准诊疗闭环。通过整合临床信息、实验室检查和影像学等多源数据,模型在测试集上预测准确率达X%,AUC为X,显著优于传统评分系统。研究创新性地将预测结果应用于手术方案制定、麻醉决策、并发症防控及个性化护理,形成智能化诊疗方案。验证结果显示模型具有良好的稳定性和临床适用性,同时配套的健康教育体系提升了患者自我管理能力。尽管存在样本局限性和模型可解释性等不足,该研究为SAP的精准诊疗提供了新范式,未来可通过扩

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1116

深入Android Framework开发(入门篇)

广大的Android应用开发者是不是对Android系统充满着好奇,是不是很想学习Android系统开发,可惜自己学习难度又太大,本课程将手把手教你学Android Framework开发,带你走进Android系统开发的殿堂,全课程以实战为主,让你自己动手可以定制自己喜欢的Android系统,让你的Android职业道路越走越顺。 学完本课程能让你学会如下知识点: -学习Framework背景及它的巨大作用-Android源码环境搭建及让自己系统第一次跑起来-学习Frameowork开发的一些必要基础知识-学习怎么进行Android源码定位分析,实例:Activity启动流程源码分析-实战开发Frameowork项目--去除第三方应用入口广告页

三极管开关电路在脉冲应用中的性能瓶颈分析

深入探讨三极管开关电路在高频脉冲场景下的响应延迟与功耗问题,揭示其性能限制的关键因素。结合实际应用,分析开关速度与信号完整性之间的矛盾,为优化三极管开关电路设计提供实用参考。

weixin_42602368的博客 588

aosp11/12/13 壁纸高斯模糊,毛玻璃SurfaceFlinger层面原理-第二节千里马framework实战

hi,粉丝朋友们!上一个blog已经详细讲解了系统中自带相关接口实现窗口的高斯模糊相关效果,具体点击这里。

learnframework的博客 1421

基于STM32F103与AD8232的便携式心电监测系统设计与实现

本文详细介绍基于STM32F103微控制器与AD8232心电传感器模块的便携式心电监测系统设计与实现。系统通过ADC采集心电信号,结合软件滤波算法处理基线漂移和工频干扰,并利用OLED屏幕实时显示波形,具有低成本、高实用性的特点,适用于健康监测与嵌入式学习。

m5n6o7的博客 737

Mplus—交叉滞后面板模型(Cross-Lagged Panel Model, CLPM)

本文介绍交叉滞后模型相关知识,以及显变量模型与潜变量模型在Mplus中的语法。

m0_54401011的博客 1万+

android 车载widget小部件部分详细源码实战开发-千里马车载车机framework开发实战课程

通俗解释:一个能够定期刷新并且加到其他应用上的微型视图。

learnframework的博客 1423

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-差分信号

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的差分拓扑进行说明,以下图为例,准备好发送接收端的IBIS模型, (ibis_se.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 440

跟千里马学框架 遇到的坑

加一个临时的环境变量 : export ANDROID_PRODUCT_OUT=你自己的源码路径/out/target/product/generic_x86_64。在编译 aosp 的 所有的东西都是和他一样的, 但是出现了这个问题。首先你的 ubuntu 要开启虚拟机。明明所有的都是一样的但是出现了这个问题 , 啥情况。这里我们选择:6 –-- > aosp_x86_64。然后在进行 : emulator。

qq_26500807的博客 618

AI Agent Harness实时监控大屏搭建实战

本文将以目前主流的AI Agent管控框架Harness为基础,结合React、ECharts、WebSocket技术,手把手带你搭建一套完整的实时监控大屏,覆盖全局概览、状态分布、工具调用统计、异常告警、实时日志等核心功能,不需要复杂的底层开发,复制代码就能快速跑通。本文我们从需求出发,先梳理了AI Agent的核心监控指标,然后搭建了监控大屏的静态布局,逐个实现了各个图表,对接了Harness的实时数据源,最后加了交互和告警功能,完整走了一遍监控大屏从设计到落地的全流程。

大数据洞察的博客 174

ollama使用CPU安装qwen-coder模型_并在eclipse中使用ai coder插件_配置本地qwen-coder模型_ollama常用操作记录---AI大模型应用探索0002

文章摘要:作者分享了在Windows 10上安装和使用Ollama模型的过程。尝试了不同规模的qwen-coder模型(7b、1.5b和0.5b),发现7b模型响应极慢(需35分钟),而1.5b模型表现较好(3秒响应)。最终选择1.5b版本用于代码开发辅助,支持多语言自动补全。同时提到在最新版Eclipse中的AIcoder配置问题。文章重点比较了不同模型规模在CPU环境下的实际使用体验和响应速度差异。

添柴程序猿的专栏 683

从零开始学习Android Framework

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

逸寒 2341

opencode : 无法将“opencode”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

本文主要介绍了opencode : 无法将“opencode”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案,希望能对使用opencode的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

投屏音视频基础知识-千里马安卓framework手把手带你做投屏

所以每一张图像的裸数据都是很大的。国际上主流制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准 有 H.261、H.263、H.263+、H.264 等,另一个是“国际标准化组织(ISO)”它制定的标准有 MPEG-1、MPEG-2、 MPEG-4 等。采集解决了数据从哪里来的问题,渲染解决的是数据怎么崭新的问题,处理解决的是数据怎么加工的问题,传输解决的是数据怎么共享的问题。描述一段 PCM 数据需要几个量化指标,常用的量化指标是采样率,位深度,字节序,声道数。

learnframework的博客 1059

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android studio调试debug 系统framework、systemserver方法-千里马带你学framework

hi,粉丝朋友们大家好! 近来很多学员在说想要在android系统里面用android studio进行直接调试,针对这个需求其实我以前是确实有尝试的,包括前期破解鸿蒙系统和android关系时候也是有用到的。 下面我来给大家介绍一下怎么在android studio调试我们的framework代码: 1、首先肯定得搭建好源码的导入android studio,并且可以达到正常跳转的地步,这个部分可以看我之前的blog,或者看我的android framework入门课(可以加我qq:2102309716

liaosongmao1的专栏 1166

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

千里马framework学习跨进程实战课程学员疑问解答:ClassNotFoundException when unmarshalling

hi,粉丝朋友们!

liaosongmao1的专栏 345

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

重大消息:手机车机互联投屏专题发布-千里马带你学框架

android投屏的使用场景以前在新能源车机还没火爆时候,大部分停留在手机小屏幕投屏到大屏幕的情况及整个多端设备的互动,整体需求和技术发展其实也就是比较有限,但是新能源车机火爆后,那么这种手机和车机互联互动的需求出现了爆发性增长,车机上各种创新类的交互都和这个手机车机之间的投屏有关系,因为手机的app生态和更新换代肯定比车机频繁,这样做好了手机车机互动投屏,可以让车机复用手机的强大功能。手机–>车机 --复用丰富的手机生态,和手机互动互联,弥补车机生态不足短板。├── 6-ByteBuffer的详细讲解。

learnframework的博客 1486

Android源码环境搭建(aosp Ubuntu 16.04 20.04)

Android源码环境搭建(aosp Ubuntu 16.04) 作者:千里马 课程要求: 电脑配置:双核,内存最少 16G,硬盘 200G 以上,独立安装 Ubuntu16.4 系统 学员要求:最少 1 年以上应用开发经验,推荐在 3 年左右 Android 应用开发经验, 熟悉 Java 语言,可以看懂 C/C++ 1、安装 ubuntu16.04(因为这个版本可以直接安装 openjdk-8,如果其他版本自行找方法) 2、openjdk 8 的安装 sudo apt-get install openj

learnframework的博客 2万+

千里马带你学framework:android 13 WM_SHELL_STARTING_WINDOW相关记录笔记

这里是为啥阿,因为高版本StartingWindow已经移殖到了Systemui进程,让Systemui来负责窗口创建相关,所以自然就wms端处理不了,要跨进程让systemui处理。这里注意,明显用wm开启时候,和正常wm相关的打印输出也是不一样的,明显显示是No IProtoLogGroup named WM_SHELL_STARTING_WINDOW。这个时候logcat -s WindowManager是没有这个shell相关打印,必须要。才可以打印出相关的Proto日志。

learnframework的博客 2307

clearCallingIdentity与restoreCallingIdentity-千里马framework系统源码实战详解

hi,粉丝朋友大家好:今天带大家来学习一个系统开发过程中大家即“熟悉”又陌生的两个方法,分别是clearCallingIdentity和restoreCallingIdentity,一般他们是成对出现在我们的framework代码中,但大家平时分析源码时候好像并没有在意他的真正作用是什么?为啥在框架代码分析时候可以看到他的大量出现?

learnframework的博客 1308

android framework系统源码分析之dumpsys原理分析-千里马带你学framework

adb shell dumpsys activity activities源码详细讲解

learnframework的博客 4045

千里马Android Framework实战开发-native程序之间binder通信实战案例分析

csdn在线学习课程,课程咨询答疑和新课信息:QQ交流群:422901085进行课程讨论 android跨进程通信实战视频课程(加群获取优惠) 千里马Android Framework实战开发-native程序之间binder通信实战案例分析 1、需求背景 在android系统开发中,不仅仅我们都停留在java层面,很可能也会遇到比如一些native的可执行程序,比如surfaceflinger,bootanimation等他们都是native的执行程序,这些程序之间也经常会有要进行binder跨进程通信的

liaosongmao1的专栏 633

AAC音视频编码详解

一、AAC编码概述 AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术,目的是取代MP3格式。2000年,MPEG-4标准出台,AAC重新集成了其它技术(PS,SBR),为区别于传统的MPEG-2 AAC,故含有SBR或PS特性的AAC又称为MPEG-4 AAC。 AAC是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS,SBR等),衍生出了LC-AAC,HE-AAC,HE-AACv2三种主要的编码。其中LC-AA

爱片闲串,爱钓鱼,爱中医,爱分享 1万+

Android系统Input专题源码分析视频课程/千里马Framework/InputDispatcher/InputReader/模拟触摸事件

hi,亲爱粉丝朋友们: 在粉丝朋友们强烈的支持下,千里马的Android Framework实战专题系列的-- Input专题课程已经杀青,千里马依旧坚持着,基础与实战结合的宗旨,让大家切身在实战中学习framework相关知识,配合案例实战训练,来进一步巩固相关知识,减低大家学习framework的难度,也提供给大家真正的企业级别开发的framework实战案例。程序员也唯有脚踏实地去跟着千里马老师课程一步步一节节的学习,跟着课程走一遍,每一步自己也去做了,深刻理解了,有问题问老师了,自己才可以算是真正意

liaosongmao1的专栏 436

千里马Android Framework-Binder通信总结流程图

csdn在线学习课程,课程咨询答疑和新课信息:QQ交流群:422901085进行课程讨论 [android跨进程通信实战视频课程(加群获取优惠)](https://edu.youkuaiyun.com/course/detail/35911)

learnframework的博客 1058
上一篇: 投屏开发音视频基础知识--h264相关介绍部分
下一篇: 安卓Framework wms/ams实战作业布置-千里马学框架
千里马学框架
博客等级 码龄6年 1万+粉丝 650原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值