MATROSKA檔案格式之Segments學習

2021-07-10 06:17:43 字數 2248 閱讀 7941



matroska(mkv)格式僅僅包含兩種top level elements,即ebml  header和segment。

ebml header用來描述乙個ebml檔案,而且乙個檔案只包含乙個ebml header。更多的ebml header將會被讀取它的應用程式忽略掉。mkv合成器在合成多個檔案時可能會出現這樣的情況,即包含多個ebml header。ebml header包含的內容包括:編碼器版本、解析器版本、檔案型別等。

segment包含多**資料和各個必要的header資訊。乙個mkv檔案可以包含多個segment,但不提倡這樣做,因為並不是所有的工具都能夠正確的處理多segment。

1、element inside segment

包含在segment中的element被稱為level 1 element。segment包含的element如表1所示。

表1 segment包含的elements

seekhead包含了乙個關於segment中的element的位置的列表,列表的每個元素被稱為seek element。每個seek element由element id和position組成,如表2所示。

表2 seek element包含的元素

在seekhead中,沒有明確的說明在該別表中包含了多少個seek element,因此需要乙個乙個進行解析並獲得seek element的個數。比如, 標識seek element的ebml-id為0x4dbb,因此,到解析出0x4dbb時,就說明出現了乙個seek element。

3、cluster

cluster包括多**資料和時間跨度。雖然不強制堅持elements的順序,但是最好不要在第乙個blockgroup/******block之後出現非blockgroup/******block。

cluster中的block有兩種型別:

(2)******block,這種block不帶有附加資訊,而且開銷比較小。

block的格式如下所示:

block el se i f (lacing == xiph lacing )

}int8 [ ] data

}其中,lacing有三種型別:xiph lacing、ebml lacing和fixed lacing。lacing 是一種技術,這種技術允許在乙個block中包含多個frame資料,這樣可以降低開銷,而且在後面對lacing的處理過程中可以很容易的將frame分開。通常,在lacing中的最後乙個frame的大小是不儲存的,因為它可以通過block的大小、block header的大小以及其他的frame的大小推算出來。

size =

改lacing包含四個frame,它們的大小分別為:187、255 + 255 + 120 = 630,、255 + 0 = 255、60。

(2)ebml lacing:lace中的第乙個frame的大小為size[0],第i個frame的大小為size[i] - size[i - 1]。

(3)fixed lacing:lace中的所有frame具有相同的大小,因此不需要知道lace中frame的個數就足夠了。

4、cues

cues包含了有助於seek操作的有用資訊。每個cue包含乙個cuepoint element,裡面包含了時間戳和乙個列表,類表的每個元素由track號和cluster position[,cluster的block號]。通常情況下,cuepoint應該僅僅只指向關鍵幀。每個cuepoint包含乙個指向乙個timecode的entry或者乙個entry列表,該entry列表中有乙個entry指向track。

每個cuepoint element包含兩個重要的element:cuetime和cuetrackpositions。

其中,cuetrackpositions包含的element如表3所示:

表3 cuetrackpositions包含的element

表4 editionentry包含的element

Oracle 控制檔案格式ctl檔案格式

options skip 1,errors 10 load data characterset zhs16gbk infile into table table name truncate fields terminated by optionally enclosed by trailing nu...

Windows Unix 檔案格式之迷

1 問題提出 我們可能會遇到過這樣一些困惑 a,如何檢視乙個檔案或資料流的二進位制格式 以十六進製制格式顯示 b,為什麼在 windows下編輯的 shell 指令碼在 unix下不能執行?為什麼在 windows下編輯的 c 原始檔在有些 gcc 編譯器下不能編譯?c,為什麼我在 vi 等編輯器下...

檔案格式 gff格式

gff檔案格式 gff格式是 sanger 研究所定義,是一種簡單的 方便的對於 dna rna以及蛋白質序列的特徵進行描述的一種資料格式,已經成為序列注釋的通用格式,比如基因組的基因 許多軟體都支援輸入或者輸出gff格式。前格式定義的最新版本是版本3。原始定義見 song websitegff是存...