??博客主頁(yè)??:??https://blog.csdn.net/wkd_007??
??博客內(nèi)容??:??嵌入式開發(fā)、Linux、C語(yǔ)言、C++、數(shù)據(jù)結(jié)構(gòu)、音視頻??
??本文內(nèi)容??:??介紹Ogg封裝格式??
??金句分享??:??子曰:君子坦蕩蕩,小人長(zhǎng)戚戚?!墩撜Z(yǔ)·述而篇》。意思是,君子心胸開闊,神定氣安;小人斤斤計(jì)較,患得患失。??
??一、介紹
Ogg比特流格式是作為一個(gè)更大項(xiàng)目的一部分開發(fā)的,該項(xiàng)目旨在創(chuàng)建一組用于多媒體內(nèi)容(編解碼器)編碼和解碼的組件,這些組件將在軟件和硬件方面免費(fèi)提供并可免費(fèi)重新實(shí)現(xiàn),以供包括互聯(lián)網(wǎng)社區(qū)在內(nèi)的廣大計(jì)算社區(qū)使用。以Xiph.Org為代表的Ogg開發(fā)人員的意圖是,它可以在沒(méi)有知識(shí)產(chǎn)權(quán)問(wèn)題的情況下使用。
本文檔描述了Ogg比特流格式,以及如何使用它來(lái)封裝由一個(gè)或多個(gè)編碼器創(chuàng)建的一個(gè)或幾個(gè)媒體比特流。Ogg傳輸比特流旨在為由原始、未封裝數(shù)據(jù)包組成的高級(jí)編解碼器流提供成幀、錯(cuò)誤保護(hù)和查找結(jié)構(gòu),例如Vorbis音頻編解碼器或即將推出的Tarkin和Theora視頻編解碼器。它能夠交織不同的二進(jìn)制媒體和其他時(shí)間連續(xù)的數(shù)據(jù)流,這些數(shù)據(jù)流由編碼器準(zhǔn)備為數(shù)據(jù)包序列。Ogg提供了足夠的信息來(lái)在原始分包邊界處將數(shù)據(jù)適當(dāng)?shù)胤蛛x回這樣的編碼器創(chuàng)建的數(shù)據(jù)分包,而不依賴于解碼來(lái)找到分包邊界(packet boundaries)。
請(qǐng)注意,MIME類型應(yīng)用程序/ogg已在IANA注冊(cè)。
??二、定義
為了描述Ogg封裝過(guò)程,將使用一組術(shù)語(yǔ),其含義需要充分理解。因此,在我們開始描述通用媒體流封裝格式的要求、封裝過(guò)程和Ogg比特流的具體格式之前,現(xiàn)在已經(jīng)定義了一些最基本的術(shù)語(yǔ)。有關(guān)更完整的詞匯表,請(qǐng)參閱附錄。
Ogg封裝的結(jié)果被稱為“物理(Ogg)比特流”。它封裝了一個(gè)或多個(gè)編碼器創(chuàng)建的比特流,稱為“邏輯比特流”。提供給Ogg封裝過(guò)程的邏輯比特流具有一種結(jié)構(gòu),即它被拆分為一系列所謂的“數(shù)據(jù)包”。分包由該邏輯比特流的編碼器創(chuàng)建,并且僅代表該編碼器的有意義的實(shí)體(例如,未壓縮流可以使用視頻幀作為分包)。它們不包含邊界信息——串在一起,看起來(lái)像是沒(méi)有地標(biāo)的隨機(jī)字節(jié)流。
請(qǐng)注意,本文件中“數(shù)據(jù)包”(packet)一詞并非用于表示通過(guò)網(wǎng)絡(luò)傳輸?shù)膶?shí)體。
??三、通用封裝格式的要求
Ogg背后的設(shè)計(jì)思想是提供一種通用的線性媒體傳輸格式,以實(shí)現(xiàn)獨(dú)立于媒體數(shù)據(jù)的編碼格式的一個(gè)或多個(gè)交織媒體流的基于文件的存儲(chǔ)和基于流的傳輸。這種封裝格式需要提供:
- 邏輯比特流的成幀。
- 不同邏輯比特流的交錯(cuò)。
- 腐敗檢測(cè)。( detection of corruption. )
- 解析錯(cuò)誤后重新捕獲
- 用于直接隨機(jī)訪問(wèn)比特流中任意位置的標(biāo)志.
- 流傳輸能力(即不需要尋找來(lái)構(gòu)建100%完整的比特流)。
- 小開銷(即,使用不超過(guò)比特流帶寬的大約1-2%用于分包邊界標(biāo)記、高級(jí)成幀、同步和查找)。
- 實(shí)現(xiàn)快速解析的簡(jiǎn)單性。
- 幾個(gè)物理比特流的簡(jiǎn)單連接機(jī)制。
Ogg考慮了所有這些設(shè)計(jì)因素。Ogg支持邏輯比特流的成幀和交織、尋找地標(biāo)、檢測(cè)損壞以及在解析錯(cuò)誤后重新同步流,開銷不超過(guò)1-2%。它是一個(gè)通用框架,用于對(duì)時(shí)間連續(xù)的比特流進(jìn)行封裝。它不知道它封裝的編解碼器數(shù)據(jù)的任何細(xì)節(jié),因此獨(dú)立于任何媒體編解碼器。
??四、Ogg比特流格式
物理Ogg比特流由多個(gè)邏輯比特流組成,這些邏輯比特流交錯(cuò)在所謂的“頁(yè)面”中。從在頁(yè)面級(jí)別復(fù)用的多個(gè)邏輯比特流中按順序獲取整個(gè)頁(yè)面。邏輯比特流由物理比特流的每個(gè)頁(yè)面的報(bào)頭中的唯一序列號(hào)來(lái)標(biāo)識(shí)。這個(gè)唯一的序列號(hào)是隨機(jī)創(chuàng)建的,與它所代表的邏輯比特流的內(nèi)容或編碼器沒(méi)有任何連接。所有邏輯比特流的頁(yè)面都是并發(fā)交錯(cuò)的,但它們不需要按規(guī)則順序排列——它們只需要在邏輯比特流中是連續(xù)的。Ogg多路分解通過(guò)從物理比特流按順序獲取頁(yè)面并將其重定向到適當(dāng)?shù)倪壿嫿獯a實(shí)體來(lái)從物理比特串流重構(gòu)原始邏輯比特流。
每個(gè)Ogg頁(yè)面(page)只包含一種類型的數(shù)據(jù),因?yàn)樗粚儆谝粋€(gè)邏輯位流。頁(yè)面大小可變,并且具有包含封裝和錯(cuò)誤恢復(fù)信息的頁(yè)頭。物理Ogg比特流中的每個(gè)邏輯比特流都以一個(gè)特殊的起始頁(yè)(bos=beginning of stream)開始,并以一個(gè)特定的頁(yè)(eos=end of stream)結(jié)束。
bos頁(yè)面包含唯一標(biāo)識(shí)編解碼器類型的信息,并且可能包含設(shè)置解碼過(guò)程的信息。bos頁(yè)面還應(yīng)該包含有關(guān)編碼媒體的信息——例如,對(duì)于音頻,它應(yīng)該包含采樣率和通道數(shù)量。按照慣例,bos頁(yè)面的第一個(gè)字節(jié)包含唯一標(biāo)識(shí)所需編解碼器的神奇數(shù)據(jù)(magic data)。任何部署新編解碼器的人都有責(zé)任確保能夠可靠地將他/她的編解碼器與使用中的所有其他編解碼器區(qū)分開來(lái)。沒(méi)有固定的方法來(lái)檢測(cè)編解碼器識(shí)別標(biāo)記的結(jié)束。bos頁(yè)面的格式取決于編解碼器,因此必須在該邏輯比特流類型的封裝規(guī)范中給出。Ogg還允許但不要求邏輯比特流的bos頁(yè)之后的輔助報(bào)頭分包,并且這些報(bào)頭分包還必須在任何邏輯比特流中的任何數(shù)據(jù)分包(data packets)之前。這些隨后的報(bào)頭分包(header packets)被添加到完整個(gè)數(shù)的頁(yè)面(page)中,這些頁(yè)面(page)將不包含任何數(shù)據(jù)分包。因此,物理比特流從所有邏輯比特流的每個(gè)頁(yè)面包含一個(gè)初始報(bào)頭分包的bos頁(yè)面開始,然后是所有流的子報(bào)頭分包,然后是包含數(shù)據(jù)分包的頁(yè)面。
一個(gè)或多個(gè)邏輯比特流的封裝規(guī)范稱為“媒體映射”。媒體映射的一個(gè)例子是“Ogg Vorbis”,它使用Ogg框架來(lái)封裝Vorbis編碼的音頻數(shù)據(jù),用于基于流的存儲(chǔ)(如文件)和傳輸(如TCP流或管道)。Ogg Vorbis提供了Vorbis編解碼器的名稱和版本,音頻速率和音頻質(zhì)量在Ogg Vorpis的bos頁(yè)面上。它還為每個(gè)邏輯位流使用兩個(gè)額外的頭頁(yè)。Ogg Vorbis-bos頁(yè)面以字節(jié)0x01開頭,后跟“Vorbis”(標(biāo)識(shí)符共7個(gè)字節(jié))。
Ogg知道兩種類型的多路復(fù)用:并發(fā)多路復(fù)用(所謂的“分組”(Grouping))和順序多路復(fù)用(稱為“鏈接”(Chaining))。分組(Grouping)定義了如何在同一物理比特流中逐頁(yè)交錯(cuò)多個(gè)邏輯比特流。例如,使用不同邏輯比特流中的不同編解碼器來(lái)將視頻流與幾個(gè)同步的音軌交織需要分組。另一方面,鏈接(Chaining)被定義為提供一種簡(jiǎn)單的機(jī)制來(lái)連接物理Ogg比特流,這是流應(yīng)用程序經(jīng)常需要的。
在分組(Grouping)中,所有邏輯位流的所有bos頁(yè)必須一起出現(xiàn)在Ogg位流的開頭。媒體映射指定初始頁(yè)面的順序。例如,特定Ogg視頻和Ogg音頻比特流的分組(grouping)可以指定物理比特流必須以邏輯視頻比特流的bos頁(yè)開始,然后是音頻比特流。與bos頁(yè)面不同,邏輯位流的eos頁(yè)面不需要全部連續(xù)出現(xiàn)。eos頁(yè)面可以是“nil”頁(yè)面,也就是說(shuō),不包含任何內(nèi)容,只包含一個(gè)具有位置信息的頁(yè)頭和在頁(yè)頭中設(shè)置的eos標(biāo)志的頁(yè)面。每個(gè)分組的邏輯比特流必須在物理比特流的范圍內(nèi)具有唯一的序列號(hào)(unique serial number)。
在鏈接(Chaining)中,完整的邏輯比特流被連接在一起。比特流不重疊,即給定邏輯比特流的eos頁(yè)緊接著是下一個(gè)邏輯比特流。每個(gè)鏈接的邏輯比特流必須在物理比特流的范圍內(nèi)具有唯一的序列號(hào)(unique serial number)。
可以連續(xù)地將并行復(fù)用的比特流的組串接。當(dāng)未綁定時(shí),這些組必須作為有效的并發(fā)多路復(fù)用比特流獨(dú)立存在。下圖顯示了這種物理比特流的示意性示例,該物理比特流遵守分組和鏈?zhǔn)綇?fù)用比特流的所有規(guī)則。
physical bitstream with pages of
different logical bitstreams grouped and chained
-------------------------------------------------------------
|*A*|*B*|*C*|A|A|C|B|A|B|#A#|C|...|B|C|#B#|#C#|*D*|D|...|#D#|
-------------------------------------------------------------
bos bos bos eos eos eos bos eos
在這個(gè)例子中,有兩個(gè)鏈接的物理比特流,第一個(gè)是由三個(gè)邏輯比特流A、B和C組成的分組流。第二個(gè)物理比特流D鏈接在分組比特流的末尾之后,分組比特流在其所有分組邏輯比特流的最后一個(gè)eos頁(yè)之后結(jié)束??梢钥闯?,分組的比特流從一起開始——所有的bos頁(yè)面都必須出現(xiàn)在任何數(shù)據(jù)頁(yè)面之前。還可以看出,并行復(fù)用的比特流的頁(yè)面不需要符合規(guī)則的順序??梢钥闯?,一個(gè)分組的比特流可以在該組中的其他比特流結(jié)束之前很久結(jié)束。
Ogg不知道關(guān)于編解碼器數(shù)據(jù)的任何細(xì)節(jié),只是每個(gè)邏輯比特流都屬于不同的編解碼器,來(lái)自編解碼器的數(shù)據(jù)按順序排列,并有位置標(biāo)記(所謂的“顆粒位置”)。Ogg沒(méi)有“時(shí)間”的概念:它只知道順序增加的、無(wú)單位的位置標(biāo)記。應(yīng)用程序只能通過(guò)更高層獲得時(shí)間信息,這些高層可以訪問(wèn)編解碼器API來(lái)分配和轉(zhuǎn)換顆粒位置或時(shí)間。
使用Ogg的媒體映射的特定定義可以對(duì)其對(duì)Ogg比特流格式的特定使用施加進(jìn)一步的約束。例如,特定的媒體映射可能要求所有分組比特流的所有eos頁(yè)面都需要以直接順序出現(xiàn)。介質(zhì)映射的一個(gè)例子是“Ogg Vorbis”的規(guī)范。另一個(gè)例子是即將推出的“Ogg Theora”規(guī)范,該規(guī)范封裝了Theora編碼的視頻數(shù)據(jù),通常與包含同步音頻和視頻的Ogg的Vorbis流多路復(fù)用。由于Ogg沒(méi)有指定封裝的并發(fā)復(fù)用比特流之間的時(shí)間關(guān)系,因此音頻和視頻流之間的臨時(shí)同步將在該媒體映射中指定。為了啟用流式傳輸,來(lái)自各種邏輯位流的頁(yè)面通常將按時(shí)間順序交錯(cuò)。
??五、封裝過(guò)程
多路復(fù)用不同邏輯比特流的過(guò)程發(fā)生在如上所述的頁(yè)面級(jí)別。然而,編碼器提供的比特流作為所謂的“分包”(Packets)移交給Ogg,分包邊界(packet boundaries)取決于編碼格式?,F(xiàn)在將描述將數(shù)據(jù)包封裝到頁(yè)面中的過(guò)程。
從Ogg的角度來(lái)看,數(shù)據(jù)包(packet )可以是任意大小的。特定媒體映射將定義如何對(duì)來(lái)自特定媒體編碼器的數(shù)據(jù)包進(jìn)行分組或分解。由于Ogg頁(yè)面(Ogg pages)的最大大小約為64kBytes,有時(shí)一個(gè)數(shù)據(jù)包必須分布在幾個(gè)頁(yè)面上。為了簡(jiǎn)化這個(gè)過(guò)程,Ogg將每個(gè)數(shù)據(jù)包劃分為255字節(jié)長(zhǎng)的塊和最后一個(gè)較短的塊。這些塊被稱為“Ogg分段”(Ogg Segments)。它們只是一個(gè)邏輯結(jié)構(gòu),本身沒(méi)有分段的頭部(header)。
一組連續(xù)的段(segments )被包裝成一個(gè)可變長(zhǎng)度的頁(yè)面,頁(yè)面前面有一個(gè)頁(yè)頭部(page)。頁(yè)面頭部(page header)中的分段表(segment table)告訴頁(yè)面中包含的各個(gè)分段(segments)的“Lacing Value”(大小)。頁(yè)面頭部(page header)中的標(biāo)志告訴一個(gè)頁(yè)是否包含從前一頁(yè)繼續(xù)的數(shù)據(jù)包。注意,lacing value 值位255意味著第二個(gè)lacing value 跟隨其后在同一數(shù)據(jù)包中,并且lacing value 值小于255標(biāo)記在許多附加字節(jié)之后的數(shù)據(jù)包的結(jié)束。255個(gè)字節(jié)(或255個(gè)字節(jié)的倍數(shù))的數(shù)據(jù)包以 lacing value 值為 0 終止。還要注意,“nil”(零長(zhǎng)度)數(shù)據(jù)包不是錯(cuò)誤;它只包括頁(yè)頭部中的一個(gè)值為零的lacing value。
編碼針對(duì)速度和大多數(shù)數(shù)據(jù)包在50到200字節(jié)之間的預(yù)期情況進(jìn)行了優(yōu)化。這是一個(gè)設(shè)計(jì)理由,而不是一個(gè)建議。這種編碼既避免了對(duì)小分包施加最大分包大小,又避免了對(duì)其施加最小開銷。相反,例如,簡(jiǎn)單地在每個(gè)數(shù)據(jù)包的開頭使用兩個(gè)字節(jié),并且具有32kBytes的最大數(shù)據(jù)包大小,將總是以兩倍的分段開銷懲罰小數(shù)據(jù)包(典型情況下<255字節(jié))。使用建議的lacing value,小數(shù)據(jù)包可以看到最小可能的字節(jié)對(duì)齊開銷(1字節(jié)),而大數(shù)據(jù)包(>512字節(jié))在編碼空間上看到相當(dāng)恒定的~0.5%的開銷。
The following diagram shows a schematic example of a media mapping
using Ogg and grouped logical bitstreams:
logical bitstream with packet boundaries
-----------------------------------------------------------------
> | packet_1 | packet_2 | packet_3 | <
-----------------------------------------------------------------
|segmentation (logically only)
v
packet_1 (5 segments) packet_2 (4 segs) p_3 (2 segs)
------------------------------ -------------------- ------------
.. |seg_1|seg_2|seg_3|seg_4|s_5 | |seg_1|seg_2|seg_3|| |seg_1|s_2 | ..
------------------------------ -------------------- ------------
| page encapsulation
v
page_1 (packet_1 data) page_2 (pket_1 data) page_3 (packet_2 data)
------------------------ ---------------- ------------------------
|H|------------------- | |H|----------- | |H|------------------- |
|D||seg_1|seg_2|seg_3| | |D|seg_4|s_5 | | |D||seg_1|seg_2|seg_3| | ...
|R|------------------- | |R|----------- | |R|------------------- |
------------------------ ---------------- ------------------------
|
pages of |
other --------| |
logical -------
bitstreams | MUX |
-------
|
v
page_1 page_2 page_3
------ ------ ------- ----- -------
... || | || | || | || | || | ...
------ ------ ------- ----- -------
physical Ogg bitstream
在本例中,我們對(duì)一個(gè)邏輯比特流的封裝過(guò)程進(jìn)行了快照。我們可以看到編解碼器提供的部分比特流細(xì)分為數(shù)據(jù)包。Ogg封裝過(guò)程將數(shù)據(jù)包分割成若干段。本例中的數(shù)據(jù)包相當(dāng)大,因此數(shù)據(jù)包1被分為5個(gè)段,其中4個(gè)段有255個(gè)字節(jié),最后一個(gè)較小。數(shù)據(jù)包2分為4個(gè)段,其中3個(gè)段有255個(gè)字節(jié),最后一個(gè)非常小。數(shù)據(jù)包3分為兩個(gè)段。然后,封裝過(guò)程會(huì)創(chuàng)建頁(yè)面,在本例中頁(yè)面非常小。頁(yè)面1由數(shù)據(jù)包1的前三個(gè)段組成,頁(yè)面2包含數(shù)據(jù)包1中剩余的兩個(gè)段,頁(yè)面3包含數(shù)據(jù)包2的前三頁(yè)。最后,該邏輯比特流的頁(yè)面和其他邏輯比特流頁(yè)面被混合組成一個(gè)物理Ogg比特流。
??六、Ogg頁(yè)面格式
物理Ogg比特流由一系列連接的頁(yè)面組成。頁(yè)面大小可變,通常為4-8 kB,最大65307字節(jié)。頁(yè)頭包含將邏輯比特流從物理比特流中解復(fù)用出來(lái)以及執(zhí)行基本錯(cuò)誤恢復(fù)和用于查找的地標(biāo)所需的所有信息。每個(gè)頁(yè)面都是一個(gè)自包含的實(shí)體,因此頁(yè)面解碼機(jī)制可以一次識(shí)別、驗(yàn)證和處理單個(gè)頁(yè)面,而不需要整個(gè)比特流。
The Ogg page header has the following format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1| Byte
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| capture_pattern: Magic number for page start "OggS" | 0-3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| version | header_type | granule_position | 4-7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | 8-11
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | bitstream_serial_number | 12-15
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | page_sequence_number | 16-19
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | CRC_checksum | 20-23
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |page_segments | segment_table | 24-27
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... | 28-
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The LSb (least significant bit) comes first in the Bytes. Fields
with more than one byte length are encoded LSB (least significant
byte) first.
LSb(最低有效位)位于字節(jié)中的第一位。長(zhǎng)度超過(guò)一個(gè)字節(jié)的字段首先編碼LSB(最低有效字節(jié))。
頁(yè)面頭部(page header)中的字段具有以下含義:
1、capture_pattern:表示頁(yè)面開始的4字節(jié)字段。它包含4個(gè)字符:O
、g
、g
、S
。它可以幫助解碼器找到頁(yè)面邊界,并在解析損壞的流后重新獲得同步。一旦發(fā)現(xiàn)捕獲模式,解碼器就通過(guò)計(jì)算和比較校驗(yàn)和來(lái)驗(yàn)證頁(yè)面同步和完整性。
2、stream_structure_version:1字節(jié),表示該流中使用的Ogg文件格式的版本號(hào)(本文檔指定版本0)。
3、header_type_flag:這1字節(jié)字段中的位標(biāo)識(shí)該頁(yè)面的特定類型。
bit 0x01
被設(shè)置:頁(yè)面包含從上一頁(yè)繼續(xù)的數(shù)據(jù)包的數(shù)據(jù)。
沒(méi)設(shè)置: 頁(yè)面包含新的數(shù)據(jù)包
bit 0x02
被設(shè)置:這是邏輯比特流(bos)的第一頁(yè)
沒(méi)設(shè)置:此頁(yè)面不是首頁(yè)
bit 0x04
被設(shè)置:這是邏輯比特流(eos)的最后一頁(yè)
沒(méi)設(shè)置:這一頁(yè)不是最后一頁(yè)
4、granule_position:包含位置信息的8字節(jié)字段。例如,對(duì)于音頻流,它可能包含在包括此頁(yè)面上完成的所有幀之后編碼的PCM樣本的總數(shù)。對(duì)于視頻流,它可能包含在此頁(yè)面之后編碼的視頻幀的總數(shù)。這是對(duì)解碼器的提示,并給它一些定時(shí)和位置信息。其含義取決于該邏輯比特流的編解碼器,并在特定媒體映射中指定。特殊值-1(以2的補(bǔ)碼表示)表示此頁(yè)上沒(méi)有數(shù)據(jù)包結(jié)束。
5、bitstream_serial_number:包含唯一序列號(hào)的4字節(jié)字段,通過(guò)該唯一序列號(hào)來(lái)識(shí)別邏輯比特流。
6、page_sequence_number:包含頁(yè)面序列號(hào)的4字節(jié)字段,使得解碼器可以識(shí)別頁(yè)面丟失。該序列號(hào)在每個(gè)邏輯比特流上分別增加。
7、CRC_checksum:包含頁(yè)面的32位CRC校驗(yàn)和的4字節(jié)字段(包括具有零CRC字段的報(bào)頭和頁(yè)面內(nèi)容)。生成多項(xiàng)式為0x04c11db7。
8、number_page_segments:1字節(jié),給出分段表(segment table.)中編碼的分段條目的數(shù)量。
9、segment_table:大小為 number_page_segments 個(gè)字節(jié)。包含此頁(yè)中所有段的lacing value。每個(gè)字節(jié)包含一個(gè) lacing value。
以字節(jié)為單位的頁(yè)面頭部大小(total header size)由下式給出:
header_size = number_page_segments + 27 [Byte]
以字節(jié)為單位的總頁(yè)面大小由下式給出:頁(yè)面頭部大小
+ 所有l(wèi)acing_values值之和
page_size = header_size + sum(lacing_values: 1..number_page_segments)[Byte]
如果文章有幫助的話,點(diǎn)贊??、收藏?,支持一波,謝謝 ??????文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-741317.html
參考資料:
The Ogg Encapsulation Format Version 0文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-741317.html
到了這里,關(guān)于【音視頻 | Ogg】RFC3533 :Ogg封裝格式版本 0(The Ogg Encapsulation Format Version 0)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!