MP4之sample信息
時間戳
sample的時間戳信息分散在moov/trak/mdia/minf/stbl/stts和moov/trak/mdia/minf/stbl/ctts中。
decode time(DT)可以通過stts計算得到,DT(n)=sample_delta(0)+sample_delta(1)+...+sample_delta(n-1)
ctts中保存DT和CT(composition time)之間的offset,CT(n)=DT(n)+ctts(n),ctts可以沒有,沒有ctts時,DT和CT相同。
offset
sample offset的計算比較復雜,需要綜合moov/trak/mdia/minf/stbl/stco,moov/trak/mdia/minf/stbl/stsc和moov/trak/mdia/minf/stbl/stsz才能得到。
stco是chunk offset box,從中可以知道chunk的數量以及每一個chunk在整個文件的offset。
entry_count就是文件中chunk的總量。
stsc是sample to chunk box,從中可以知道sample對應的chunk是哪個。
這個數據代表的意思是從first_chunk開始的每個chunk包含smples_per_chunk個sample,這樣的chunk總共有多少個呢?用下一個entry的first_chunk減去當前entry的first_chunk就得到chunk的數量。最后一個entry表示從first_chunk到最后一個chunk,這里就需要用到上面從stco得到的chunk的總量。
stsz是sample size box,從中可以知道每個sample的size。
sample_size是默認的sample大小,如果sample_size不等于0,表示所有的sample有相同的大小,都是sample_size。否則需要從后面的entry table讀取每一個sample的大小。
這樣我們就知道了所有chunk的offset,每一個chunk包含多少sample,以及所有sample的size,就可以計算sample的offset了。用sample所在的chunk的offset,加上該chunk內該sample之前的所有sample的size之和,就可以得到sample的offset。
轉載于:https://blog.51cto.com/readingcoding/2388596
總結
以上是生活随笔為你收集整理的MP4之sample信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VOIP技术发展综述与外呼系统
- 下一篇: Failed to initialize