• 音乐ID3 中 专辑封面解析(APIC帧)


    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] != '' || start[n + 1] != '') {
            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个字节

    描述信息

    实际图片数据

  • 相关阅读:
    Linux IPC udp/ip socket 编程
    Linux IPC tcp/ip socket 编程
    Linux IPC BSD socket编程基础
    Linux IPC POSIX 信号量
    Linux IPC POSIX 消息队列
    Linux IPC POSIX 共享内存
    Linux IPC System V 信号量
    Linux IPC System V 消息队列
    Linux IPC System V 共享内存
    ipcs, ipcrm
  • 原文地址:https://www.cnblogs.com/pangblog/p/3327548.html
Copyright © 2020-2023  润新知