Atitit 解析m4a文件的元数据标签音乐名,歌手 专辑 年代等信息 java版本
目录
1.3. /bookmarksHtmlEverythingIndexPrj/src/apkg/audioM4aParser.java 2
当然最好的方法是使用cli类库ffmpeg获取了,自己写麻烦。。但更加的底层。。
使用图形化分析工具MP4Reader分析其ATOM/BOX结构
可以看到标签路径是 moov/udta/meta/ilst
二、MP4文件结构
MP4是由Atom嵌套来存放媒体信息。Atom的基本结构是:
[4bytes atom length] [4bytes atom name] [8bytes largesize, if size ==1] [contents of the atom, if any]
{"offset":0,"atomBox":"ftyp","atomBoxSize":28}
{"offset":28,"atomBox":"moov","atomBoxSize":39289}
{"offset":36,"atomBox":"mvhd","atomBoxSize":108}
{"offset":144,"atomBox":"trak","atomBoxSize":38801}
{"offset":38945,"atomBox":"udta","atomBoxSize":372}
{"offset":38953,"atomBox":"meta","atomBoxSize":356}
{"offset":38965,"atomBox":"hdlr","atomBoxSize":34}
{"offset":38999,"atomBox":"ilst","atomBoxSize":310}
{"offset":39007,"atomBox":"----","atomBoxSize":188}
{"offset":39195,"atomBox":"�ART","atomBoxSize":29}
{"offset":39195,"atomBox":"�ART","atomBoxSize":29,"ati�ART":"volin"}
{"offset":39237,"atomBox":"�day","atomBoxSize":28}
{"offset":39237,"atomBox":"�day","atomBoxSize":28,"ati�day":"2018"}
{"offset":39278,"atomBox":"�alb","atomBoxSize":30}
{"offset":39278,"atomBox":"�alb","atomBoxSize":30,"ati�alb":"homyao"}
{"offset":39321,"atomBox":"�gen","atomBoxSize":27}
{"offset":39321,"atomBox":"�gen","atomBoxSize":27,"ati�gen":"das"}
{"offset":39361,"atomBox":"Xtra","atomBoxSize":8}
{"offset":39369,"atomBox":"free","atomBoxSize":18141}
{"offset":57510,"atomBox":"mdat","atomBoxSize":3347320}
package apkg;
import java.io.EOFException;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
public class audioM4aParser {
private static final int CMP4TAGATOM_ERROR = 0; // 初始化值