java MP4解析 第二步 解析moov box

moov box(movie box):包含若干子box,这些子box共同描述了媒体播放必需的元数据。

参考资料:https://blog.csdn.net/u013752202/article/details/80557296

测试文件:

链接:https://pan.baidu.com/s/1lFrIJqI5TzQAhLH1SOGMDQ 
提取码:u98c 

搞了一张结构图  大概看看   每部分数据 都由 head与 data两部分组成

这个图是根据测试文件做的  跟其他文件有点区别是正常的

解析代码:

	public static void main(String[] args) throws Exception {
		
		RandomAccessFile in = new RandomAccessFile("F:/测试文件/video/testKongBu.mp4", "r");//任意流(随机流) 我还是比较喜欢叫任意流
		/**
		 * 跳过ftyp
		 */
		int len = in.readInt();
		in.skipBytes(len-4);
		/**
		 * 解析moov  这是一个很大的box 需要分步去解析  首先看第一层的结构
		 */
		int length;
		byte[] bType = new byte[4];
		
		/*
		 * moov 数据头
		 */
		length = in.readInt();
		in.read(bType);
		System.out.println("moovLength="+length);
		System.out.println("moov="+new String(bType));
		/*
		 * moov数据内容
		 */
		int mvhdLen;
		byte[] mvhd = new byte[4];
		mvhdLen = in.readInt();
		in.read(mvhd);
		System.out.println("mvhdLength="+mvhdLen);
		System.out.println("mvhd="+new String(mvhd));
		
		in.skipBytes(mvhdLen-8);//跳过mvhd的data部分
		
		for(int i=0;i<4;i++) {//测试文件  trak有四个  这里只是演示 
			int trakLen;
			byte[] tType = new byte[4];
			
			trakLen = in.readInt();
			in.read(tType);
			
			System.out.println("trakLen="+trakLen);
			System.out.println("trak="+new String(tType));
			in.skipBytes(trakLen-8);//跳过trak部分
		}
		/*
		 * udta  这部分以下不属于moov box
		 */
		int udtaLen;
		byte[] udta =new byte[4];
		udtaLen = in.readInt();
		in.read(udta);
		System.out.println("---------这以下不属于moov box-----------");
		System.out.println("udta="+udtaLen);
		System.out.println("udta="+new String(udta));
		in.skipBytes(udtaLen-8);
		
		/*
		 * free
		 */
		int freeLen;
		byte[] free = new byte[4];
		freeLen = in.readInt();
		in.read(free);
		System.out.println(freeLen);
		System.out.println(""+new String(free));
		in.skipBytes(freeLen-8);
		/*
		 * mdat
		 */
		int mdatLen;
		byte[] mdat = new byte[4];
		mdatLen = in.readInt();
		in.read(mdat);
		System.out.println("mdat="+mdatLen);
		System.out.println("mdat="+new String(mdat));
		in.skipBytes(mdatLen-8);
		
		in.close();
    }

解析结果:

发布了44 篇原创文章 · 获赞 32 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览