以page為單元的Ogg格式比特流,其中間經過了segment的劃分和重組環節,但方便了對媒體流的存儲與傳輸(TCP)。對源緩衝區媒體數據(packet)的操作,需建立幾個中間環節的數據結構,隻需將切割的媒體數據在內存移動一次,操作指向媒體數據的指針便能達到媒體數據遷移到目的緩衝區(page)的意圖,其過程可用兩個函數轉換來表述
Ogg文件結構
Ogg文件結構:ogg_stream_packetin()aogg_stream_pageout()。將Ogg格式比特流
逆映射還原為packets媒體流,以備播放解碼或以RTP封裝進行UDP傳輸。其中間環節是把page中的segment單元數據按順序重組為packet,同樣媒體數據在內存中的複製隻有一次,其過程可用三個函數轉換來表述:ogg_sync_pageout()aogg_stream_pagein()aogg_stream_packetout(),媒體數據複製發生在第一個函數ogg_sync_pageout()。Ogg映射與逆映射的功能都體現在ogg函數庫中。
Ogg格式是在吸收其它流媒體文件格式優點的基礎上針對具有“packet”包邊界形式的媒體流而製定的利於其存儲和傳輸的開源流媒體文件格式,在icecast流服務器的傳輸中得到了很好的應用;根據icecast官方網站公布其測試結果,在GB主乾網的條件下對Oggvorbis音頻傳輸的客戶端並發流可達14000個。
OGG文件每個頁之間相互獨立,都包含了各自應有的信息,頁的大小是可變的,通常為4K-8KB,最大值不能超過65307bytes(27+255+255*255=65307)。
capture_pattern:模式捕獲域,4個字節,表示頁的開始,其作用是分離Ogg封裝格式還原媒體編碼時識別新頁的作用,它包含了四個幻數(ASCII字符集):
0x4f'O'0x67'g'0x67'g'0x53'S'
stream_structure_version:1個字節,表示當前Ogg文件格式的版本,目前為0。
header_type_flag:頭部類型標識,1個字節。標識當前頁具體類型。其設置分三種情況:
bit0x01若已設置,頁包含的媒體編碼數據於前一頁同屬於一個邏輯流的同一packet。若未設置,本頁是一個新的packet。
bit0x02設置,表示邏輯流的第一個頁bos。未設,不是第一個頁。
bit0x04設置,表示邏輯流的最後一頁eos。未設,不是最後一頁。
granule_position:8個字節(字節6-字節13),包含了媒體編碼相關參數信息。對於音頻流,包含了到頁為止邏輯流在PCM中采樣編碼的總次數。對於視頻流,包含了邏輯流到本頁為止視頻幀編碼的總次數。其值若為-1,則說明到此頁為止,邏輯流的packet還未結束。
bitstream_serial_number:流序列號,4字節,表示本頁所屬邏輯流與其他邏輯流相區別的序號。
page_sequence_number:表明了本頁在邏輯流中的序列號,Ogg解碼器能據此識別有無頁丟失。
CRC_checksum:循環冗餘校驗碼校驗和,4字節域,包含頁的32bitCRC校驗和(包括頁頭部零CRC校驗和頁數據校驗),它的產生多項式為:0x04c11db7。
number_page_segments:1字節,給定了在本頁的segment_tabale域中所出現的segement個數,其最大值為255segments(每片255個字節),即頁頭部第26個字節的取值範圍為:0x00-0xff(0-255)。頁最大物理尺寸為65307bytes,小於64KB。
segment_table:邏輯流中的每個packet每個segment長度的取值(lacingvalues,除了每個packet的最後一個segment小於255外,其它segment都為255),這些值以segment出現的先後順序依次排列。此域的字節數為number_page_segments域所表示的數字(即在0-255之間)。
bytevalue
270xff(255)
[.................]
)552(ffx01-n
】節章錯無 𝘄𝘁.𝗽𝗼𝗼【
)62+stnemges_mun=n,452-0(efx0-00x0n
:數節字的度長部頭頁
]etyB[stnemges_egap_rebmun+72=ezis_redaeh
。和之數節字的據占述表所名域個9述上為度長部頭頁即
:度長總的頁
]etyB[)stnemges_egap_rebmun...1:seulav_gnical(mus+ezis_redaeh=ezis_egap
。)度長荷載淨(和之度長stnemges乾若的後其隨緊上加度長部頭頁為度長總的頁即
。定決來器碼編體媒的體具由,度長意任是以可小大的tekcap為因。節字552於小常通tnemges個一後最的包但,etyB552為定固小大片每,noitatnemges片分行進包個各的流輯邏將式格碼編的體具於賴依界邊包,的現呈式形”stekcaP“的界邊包有具以是前之裝封ggO給供提在碼編頻視音在構結件文程過理處裝封ggO
ekcap個一理處次一。)552於小或,0為以可(度長的tnemges個一後最中頁即,小大的值”eulav_gnical“了知告域elbat_tnemges部頭頁。定確而況情體具由,等不可度長的頁每,頭頁上加被都頁每,裝封頁行進