📺

mp4 format

📢
MP4文件的格式主要由 MPEG-4 Part 12、MPEG-4 Part 14 两部分进行定义。其中,MPEG-4 Part 12 定义了ISO基础媒体文件格式,用来存储基于时间的媒体内容。MPEG-4 Part 14 实际定义了MP4文件格式,在MPEG-4 Part 12的基础上进行扩展。
mp4拆解
 
 
 
 

mp4解析数据流顺序

wqyuwss的专栏
(2007/5/1 04:47) 当播放一部电影或者一个 track的时候,对应的media handler必须能够正确的解析数据流,对一定的时间获取对应的媒体数据。如果是视频媒体, media handler可能会解析多个atom,才能找到给定时间的sample的大小和位置。具体步骤如下: 5楼 wqyuwss 发表于 2007/11/29 15:45 回复 对不起,最近很忙,不知道你解决这个问题没有 很有可能你处理的track不对 4楼 fishpixie(游客) 发表于 2007/11/15 18:51 回复 麻烦你,有空帮忙回复一下吧。 目前遇到的问题很奇怪,图像数据肯定是取进来了,但是似乎定位又不够准确,有偏差。而且我市自己把sequence头部加到我取得文件最前边去留的,解第一个宏块就有问题了。 3楼 fishpixie(游客) 发表于 2007/11/15 10:15 回复 下面是我的做法:首先找到stco 取出 每个chunk的偏移量;然后查找出samples_per_chunk,以及sample_size,这样直接把每个chunk中的sample取出来顺序存放,应该得到的就是正确的数据吧。 可是现在有一个问题,就是虽然这里边存放的事编码之后的数据,但是只有每一帧的头部,第一帧之前的序列头部以及其他用户信息我却找不到,这样的话解码器仍然是不能正确解码的。 我目前给我的解码器设置了一些默认的序列头部信息,解码时依然会跳出,不知道是解码数据取得不对还是头部设置的部队。帧头部都有一些特殊的标记位,所以我认为我取得数据应该是对的。 你怎么看呢,多谢你的解答 2楼 wqyuwss 发表于 2007/11/14 22:36 回复 Q:如果我不是想查找某一个sample而是把所有的sample按照解码顺序提取出来排放好,有没有什么比较简便的方法? A: 所有的sample就是按照解码顺序排列的,只是存放在chunk中,可以看http://www.52rd.com/Blog/Detail_RD.Blog_wqyuwss_7922.html里面最后一幅图,里面说明了一个chunk会存放几个sample Q:难道必须用 time-to-sample来确定sample的序号么?其他地方没有存放着sample的序号么? A:据我了解应该是这样。其他方法暂不知道。:-) Q:最后一个问题,sample里边是视频数据的row data,还是编码之后的数据,就是有没有编码信息的? A:是编码之后的数据。video sample都是包含在一个video track之内的,audio sample包含在一个audio track之内。每个track都有描述信息的,Audio / Video Media Information Atoms及其包含的children atom描述了这些信息,请看http://www.52rd.com/Blog/Detail_RD.Blog_wqyuwss_7911.html,...
【可能是】最全的mp4文件基础
本文目的: 了解播放&录制视频这个过程处于哪个阶段 了解容器这个概念 了解如何通过某个时间戳找到对应sample的offset和size 一张图了解下MP4这种封装格式在解码播放流程中的位置: 封装格式的 主要作用是把 视频码流(H.264)和 音频码流(AAC)按照一定的格式存储在一个文件中。现如今流行的封装格式如下表所示: 如果某容器支持流媒体,则可以实现"边下边播" 。 MP4文件封装格式,对应的标准为ISO/IEC 14496-12,即 :信息技术视听对象编码的第12部分:ISO 基本媒体文件格式。 Information technology Coding of audio-visual objects Part 12: ISO base media file format ISO/IEC 组织制定的标准一般用数字表示,ISO/IEC 14496即MPEG-4标准;该 标准的第12部分,描述了MP4封装格式 。 MP4视频文件封装格式不是突然产生的,它是基于QuickTime容器 格式定义演化来的,因此参考QuickTime的格式定义对理解MP4文件格式很有帮助。 MP4文件格式是一个十分开放的容器,它几乎可以用来描述所有的媒体结构,MP4文件中的媒体描述与媒体数据是分开的,并且媒体数据的组织也很自由,不一定要按照时间顺序排列,甚至媒体数据可以直接引用其他文件。 同时,MP4也 支持流媒体 。MP4目前被广泛用于封装h.264视频和AAC音频,是高清视频的代表。 如下图是使用 mediaInfo 工具 查看xxx.mp4所能得到的信息: 如果把ISO/IEC 14496即MPEG-4标准的第12部分所述的标准,比作快餐界套餐的业内制作标准的话,那么一个mp4容器可以比作一份肥宅快乐套餐,内含汉堡*1 + 鸡肉卷*1 + 饮料*1。这样上图中的格式为AVC,是视频编码标准之一(还有VP9和HEVC),可比作是碳酸饮料的作标准之一。图中的avc1是编解码器,也即h264标准的一种实现,相当于可乐或更具体的百事/可口可乐 在熟知业内协议后,剩下的就是用代码按部就班的实现即可。所以本文用较多的篇幅描述相关的概念以及容器内部是如何组织的。
【可能是】最全的mp4文件基础