ID3V2 中 APIC 帧标识 专辑封面。前几天 百度 谷歌 都没有找到具体的说明。有点小伤人。

最好参考  Android 中的 id3.cpp 以及一个java 开源 id3 库。找到这里的规格了。记录一下分享给需要的童鞋

数据帧头(固定 10个字节)

标签名                      4  个字节  APIC

数据帧长度              4 个字节   XX XX XX XX

Flag标签                  2 个字节

帧数据

描述信息的编码格式                      1 个字节

MIME Type                                  (可变字节)ANSIC 字符串  strlen 计算长度就可以了。(image/jpg)

图片类型                                        1 个字节

数据描述段                                    下面专门写

数据描述段    

如果 描述信息的编码格式 0x00    好吧,这里的长度你可以用  strlen 来计算了

如果 描述信息的编码格式 0x01   好吧,按照 UNICODE  进行计算(这里之计算长度,每次加2 知道 遇见2个0 就OK了)

参考 Android 的代码实现:

 

static size_t StringSize(const uint8_t *start, uint8_t encoding) {

if (encoding == 0x00 || encoding == 0x03) {
        // ISO 8859-1 or UTF-8
        return strlen((const char *)start) + 1;
    }

// UCS-2
    size_t n = 0;
    while (start[n] != '\0' || start[n + 1] != '\0') {
        n += 2;
    }

return n;
}

给一段实际数据:

-------------- 帧头区 ---------------

第一个红框   APIC

第二个绿框   数据长度

第三个红框   00 00 标识

------------------ 数据区-----------------

第一个蓝框    01  标识描述字段是 unicode

一串ANSIC 字符 image/jpeg  描述 MIME

第二个蓝框    03  标识 图片类型

FF FE 65 00 00 00 // 描述字段 (FF FE 标识大小端, 最后两个00 00 标识 Unicode 描述信息结束 )ANSIC 不列举了

FF  D8  ........  实际封面图片数据, JPEG 图片 一定是 FF D8 开始哦!

小结一下:

描述信息的编码  1个字节

MIME 字符串    N 个字节  strlen 计算

IMAGE 类型    1个字节

描述信息

实际图片数据

音乐ID3 中 专辑封面解析(APIC帧)的更多相关文章

  1. Python爬虫小白入门(六)爬取披头士乐队历年专辑封面-网易云音乐

    一.前言 前文说过我的设计师小伙伴的设计需求,他想做一个披头士乐队历年专辑的瀑布图. 通过搜索,发现网易云音乐上有比较全的历年专辑信息加配图,图片质量还可以,虽然有大有小. 我的例子怎么都是爬取图片? ...

  2. flac文件提取专辑封面手记

    博客迁移后整理发型这篇文章当时没写完,不补了,不过还是得说明一些东西 下面这部分代码可用之处为从flac文件头开始然后各种形式的大跳,最后到达专辑封面的数据块,之后解析. 当时写的时候不会写图片解析部 ...

  3. Use GraceNote SDK in iOS(一)通过序列化GDO查询专辑封面

    于Use MusicBrainz in iOS之后,因为MusicBrainz找出专辑封面,它只能转移到其他网站提供的音乐信息搜索服务,领导给出GraceNote.(有压力.. .) 需求类似:通过一 ...

  4. iOS开发系列--扩展--播放音乐库中的音乐

    众所周知音乐是iOS的重要组成播放,无论是iPod.iTouch.iPhone还是iPad都可以在iTunes购买音乐或添加本地音乐到音乐 库中同步到你的iOS设备.在MediaPlayer.fram ...

  5. NS3网络仿真(10): 解析以太网帧

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载.但请保留作者信息 解析以太网帧的过程是构建以太网帧的逆过程,当我们接收到一个以太网帧时,仍然以上一节中的ARP帧为例 ...

  6. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  7. 转:在java中使用dom4j解析xml

    JAVA 使用Dom4j 解析XML Java DOM4J Parser - Parse XML Document Dom4j下载及使用Dom4j读写XML简介 在java中使用dom4j解析xml ...

  8. Android中的XML解析

    在安卓中主要有三种XML文档解析方式:DOM(Document Object Model), SAX(Simple API for XML), PULL 他们的主要特点如下表:   特点 主要类 DO ...

  9. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

随机推荐

  1. Visual Studio Code和Docker开发asp.net core和mysql应用

    Visual Studio Code和Docker开发asp.net core和mysql应用 .net猿遇到了小鲸鱼,觉得越来越兴奋.本来.net猿只是在透过家里那田子窗看外面的世界,但是看着海峡对 ...

  2. jQuery事件对象的属性

    注:摘自<锋利的jQuery(第二版)> JQuery在遵循W3C规范的情况下,对事件对象的常用属性进行了封装,使得事件处理在各大浏览器下都可以正常运行而不需要进行浏览器类型判断. 1. ...

  3. Hadoop4Win

    Hadoop4Win + Eclipse 运行 WordCount 程序 http://software.intel.com/zh-cn/blogs/2013/10/16/hadoop4win-ecl ...

  4. C语言的本质(2)——二进制、八进制、十六进制与十进制

    二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.它的基数为2,进位规则是"逢二进一",借位规则是"借一当二",由18世纪德国数理哲 ...

  5. linux学习(二)-目录的操作命令

    Linux命令大全:http://www.jb51.net/linux/ 目录分绝对路径和相对路径 : 绝对路径,在路径前会加  / 相对路径就是相对于当前的路径,直接 路径名即可. 查看目录: cd ...

  6. #include <string.h>

    1 _memccpy 2 _memicmp 3 _strlwr 4 _strrev 5 _strset 6 _strupr 7 memccpy 8 memchr 9 memcpy 10 memicmp ...

  7. 字符串查找--B中是否有元素不在A中

    #include <stdio.h> int main(int argc, char const *argv[]) { char str[26]="AFDKJASD"; ...

  8. POJ2186 Popular Cows 【强连通分量】+【Kosaraju】+【Tarjan】+【Garbow】

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 23445   Accepted: 9605 Des ...

  9. T-SQL变量

    T-SQL中变量分为全局变量和局部变量,分别使用@@和@前缀. 全局变量 常用的全局变量有@@VERSION .@@IDENTITY.@@ERROR.@@ROWCOUNT 用法 select @@VE ...

  10. node.js(八) 有趣的东西才开始哦

    ### Express介绍 npm提供了大量的第三方模块,其中不乏许多Web框架,比如我们本章节要讲述的一个轻量级的Web框架 ——— Express. Express是一个简洁.灵活的node.js ...