MP4中的sample_delta是怎么计算,然后写道MP4文件中的
时间: 2024-05-24 07:12:23 浏览: 110
sample_delta是指两个相邻sample之间的时间间隔,通常以时间戳表示。
在MP4文件中,每个sample的时间戳都会被存储在Sample Table Box(stbl)中的Sample Description Box(stsd)和Time to Sample Box(stts)中。stsd中包含了每个sample的编码参数信息,stts中包含了每个sample的时间戳和时间间隔信息。
具体地,stts中的entry记录了每个sample的时间戳和时间间隔。每个entry有两个字段,分别为sample_count和sample_delta。sample_count表示当前时间间隔值对应的连续sample的个数,sample_delta则表示这些sample之间的时间间隔。因此,如果想要计算某个sample的时间戳,需要先确定它在stts中的entry位置,然后根据前面的entry计算出前面所有sample的时间戳,再加上当前entry中的时间间隔值,即可得到当前sample的时间戳。
例如,假设一个MP4文件中有10个sample,它们的时间戳和时间间隔如下:
| sample编号 | 时间戳(单位:毫秒) | 时间间隔(单位:毫秒) |
|------------|----------------------|------------------------|
| 1 | 0 | 100 |
| 2 | 100 | 100 |
| 3 | 200 | 50 |
| 4 | 250 | 75 |
| 5 | 325 | 25 |
| 6 | 350 | 50 |
| 7 | 400 | 100 |
| 8 | 500 | 150 |
| 9 | 650 | 50 |
| 10 | 700 | 100 |
那么在stts中,就有5个entry,对应的值为:
| entry编号 | sample_count | sample_delta |
|-----------|--------------|--------------|
| 1 | 2 | 100 |
| 2 | 2 | 75 |
| 3 | 2 | 25 |
| 4 | 2 | 50 |
| 5 | 2 | 100 |
例如,如果想要计算第4个sample的时间戳,那么它对应的entry应该是第3个entry,因为它是从第3个entry的最后一个sample开始的。根据前面的entry,可以计算出前3个sample的时间戳分别为0、100、200毫秒。因此,第4个sample的时间戳应该为200+50=250毫秒。
阅读全文