我对M4A文件格式的理解
m4a 格式文件中的内容是有很多的box 组成的,box 格式如下:
box length(4B 大端格式) + box type(4B)+ box content(box length - 8)
例如如下是ftyp这个box 的数据内容,可以看到该box 长度是0x20字节。
从m4a文件中找到moov box是重点,因为找到了这个box ,需要从box 找出来每个采样帧的位置及大小。
一般是需要从m4a中找到如下的结构,重点是知道stsd stts stsc stsz stco这几个box。
moov
--->trak
--->mdia
--->minf
--->stbl
--->stsd
--->mp4a
===》从这里可以得到channel num、sample bits、sample rate;
--->esds
===》从这里可以得到audio type、max bitrate、avg bitrate、decoder config data;
--->stts
===》可以获取该trak下面有多少的samples,如下第一个参数是0x00000001,那么后面四个字节组成的就是 这个trak中的samples count=0x00002c64;
--->stsc
===》会得到一个表格,关于这个表的数据如何去理解,用一个实际例子来说明。第个参数0x00000002,那么
后面的数据有两组:(0x00000001 0x00000015 0x00000001)
(0x0000021e 0x00000003 0x00000001)
可以得出如下信息:
trunk 编号是从0x00000001 ~ 0x0000021e;
编号从0x01~0x21d的trunk,每个trunk都有0x15个sample;
编号从0x21e的trunk,有0x3个sample;
所以计算一下samples=0x21d * 0x15 + 0x3 = 0x2c64,这和上面stts是相匹配的。
--->stsz
===》这个表可以知道每个sample的大小。
两个红色数据分别是0x00000000 0x00002c64(表示后面有0x2c64的四字节记录每个sample 大小)
--->stco
===》可以知道每个trunk的位置
红色数据是0x0000021e,表示后面有0x21e个四字节记录每个trunk的位置;
例如编号1的trunk的位置在文件的0x00000030位置;
例如编号2的trunk的位置在文件的0x000021e3位置;
----》我们可以算一下,根据前面0x21d个trunk每个都是有0x15个sample,sample的大小可以通过stsz 知道,计算下来编号1的trunk中这15个sample的size总共是0x21b3。
由于第一个trunk的位置是0x30;
所以第二个trunk的位置是0x21b3+0x30=0x21e3,这佐证了这里记录的trunk位置。
===》通过编号1的trunk的位置0x30,也就是第一个sample的位置;
那么第二个sample的位置就是0x30+0x173(来自于stsz的数据)=0x1a3
我对M4A文件格式的理解相关推荐
- 对TGA图像文件格式的理解
一.什么是TGA格式 TGA格式的定义 TGA是由美国Truevision公司为其显示卡开发的一种图像文件格式,已被国际上的图形.图像工业所接受.现已成为数字化图像,以及运用光线跟踪算法所产生的高质量 ...
- 对 cplex/gurobi MPS/LP文件格式的理解
文章目录 1. MPS 文件的理解 2. LP 文件的理解 优化求解器如 cplex 或 gurobi,都支持直接读取线性规划建模文件 MPS 格式或 LP 格式,因此,有必要研究一下,这样就可以编写 ...
- 电脑下载的M4A格式文件怎么转换为MP3格式
M4A文件格式并不是一个家喻户晓的名字,与MP3格式相比,知名度远远落后.但是,这并不意味着它无关紧要,有时候我们下载的音乐可能就是M4A格式的,如果换一个设备播放可能就会出现格式不兼容无法播放的情况 ...
- 对Multi-bin 技术的理解
[bin文件的格式]: Bin文件格式比较简单.结构如下: struct BinFile { BYTE signature[7]; //前面7个字节是标志, 固定的{'B','0','0',' ...
- 电脑下载的M4A格式文件怎么转换为MP3格式 1
M4A文件格式并不是一个家喻户晓的名字,与MP3格式相比,知名度远远落后.但是,这并不意味着它无关紧要,有时候我们下载的音乐可能就是M4A格式的,如果换一个设备播放可能就会出现格式不兼容无法播放的情况 ...
- Class文件格式实战:使用ASM动态生成class文件
https://blog.csdn.net/zhangjg_blog/article/details/22976929 概述 本专栏前面的文章,主要详细讲解了Class文件的格式,并且在上一篇文章中做 ...
- 殊途同归的CVE-2012-0774 TrueType字体整数溢出漏洞分析
1. 前言 官方的漏洞通报中,关于这个漏洞的信息其实很少: Integer overflow in Adobe Reader and Acrobat 9.x before 9.5.1 and 10.x ...
- 每个大数据工程师都应该知道的OLAP 核心知识点
转载:https://mp.weixin.qq.com/s/I2WqQoGwK7LRrpB4R2pobw 很值得学习的一篇文章,不适用于初学者,适用于中级或者进阶高级的大数据工程师 OLAP 系统广泛 ...
- Hemberg-lab单细胞转录组数据分析(三)
Hemberg-lab单细胞转录组数据分析(一) Hemberg-lab单细胞转录组数据分析(二) 收藏|北大生信平台"单细胞分析.染色质分析"视频和PPT分享 生信老司机以中心法 ...
最新文章
- Java生成html为pdf
- 区块链开发公司能做什么?对企业未来市场有何帮助?
- Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name 解决
- 关于GAN的灵魂七问
- 只读变量(常量)和位置变量
- this static 面向对象三大特点
- 年度大战即将拉开!iPhone 11系列后,轮到华为Mate30系列表演了
- 【python】python的环境搭建
- ROS2 Galactic Depth to World coordinate RGBD相机的深度数据转换到世界坐标系
- 画图软件Microsoft visio下载安装及使用
- PS2019工具介绍笔记(一)
- 任正非:华为云不能简单模仿阿里、亚马逊,要有所为有所不为|CEO说
- 图像工作回顾之七:人脸姿态估计
- Android——支持图片加视频无限轮播的banner
- 快速新建多个文件夹,而且是指定名称的!
- Windows中的环境变量一览
- 华为 日志服务器 配置文件,华为设置日志服务器配置
- 【鸿蒙】鸿蒙App应用-《记账软件》登录,注册,找回密码功能
- 批处理文件语法大全(怎么写Bat文件)
- 盒模型和开发中常用的布局
热门文章
- 用jquery获取tbody下的第一个tr的最后一个td里面的第一个a标签
- 【杂谈】 Listary自带的字典功能失效?没关系,让我们自己来改造它
- 安装tensorflow报错---CondaHTTPError: HTTP 000 CONNECTION FAILED for url
- 新手真无线蓝牙耳机怎么选?大神推荐高颜值时尚主流蓝牙耳机推荐
- Java设计模式(03) -- 里氏替换原则
- linux 汇编 push rbp,无法从汇编(yasm)代码调用64位Linux上的C标准库函数
- 英语单词词性顺口溜_巧记英语单词的顺口溜 这样记忆不枯燥
- 点云数据生成DEM,并导出三维模型
- 车载冰箱E-mark认证要多长时间?
- 示波器测量的波形一直抖动怎么办