3. Dynamic Layer Extraction
3.3. Layer Extraction Algorithm
3.3.2. Video Layer Extraction
second SVC sub-bitstream H.264/AVC SVC
bitstream file spatial or CGS layer
Insert IDR picture with GOP size NAL Unit Header, Sequence Parameter Set, Picture Parameter Sets, Slice Header 的相關 syntax elements 來說明此提取技術演算法相關的訊號控制及流向。
Picture Parameter Set Sequence
Parameter Set Slice Header
NAL
Reconstruct new IDR (when segment end)
圖 3-5 分層視訊串流提取技術內部訊號圖
在壓縮出初步的視訊影片後,首先決定要擷取的可調性組合,包含空間、時間、
訊噪比等;此部份在串流服務系統中可以配合用戶端網路頻寬偵測模組回傳之資 訊,調整其可調性組合。
2) 修改 SCALABLE_SEI (stream header):
配合先前決定之可調性組合,調整 SEI stream header 的內容,這部份僅供分析視 訊串流,或進一步由此分段擷取出更少之可調性組合才會參照其資訊。
3) 擷取 SPS, PPS:
因為 sequence parameter sets 和 picture parameter sets 的資訊會影響到後面各張 影片可否正確被解壓縮,所以必須擷取出和 spatial or CGS 相對應的 SPS, PPS,
該分段之影片才能被獨立解壓縮。
4) 修改 SEI SUB_SEQ_INFO:
在 H.264/AVC SVC 的標準中,SEI SUB_SEQ_INFO 僅會出現在各 key frame 之前,僅供分析視訊串流,或需要由此次擷取出之分段,進一步擷取出更少之可 調性組合才會參照其資訊。
5) 擷取分層視訊串流:
依據先前決定的可調性組合,以 GOP 為單位,僅擷取出符合條件的 H.264/AVC SVC 可調性分層視訊串流 (可由該 NAL unit 之 syntax element 判別)。為避免 各 GOP 單位因更動可調性組合,而造成無法解壓縮或解壓縮不完全之情況發 生,視需要加入原本需參照的 IDR picture,並更改其 slice header syntax element 資訊。
在此一流程中,關於擷取視訊串流分層的部份,有幾點需要多加留意:1) 因為各 影像之播放順序,和其壓縮順序並不相同,詳情見圖 3-7,在判斷各張影像何時已不 再需要被其它影像參照,難以迅速切出可邊接收邊播放的獨立可解碼單元。為了符合 隨選視訊之要求,本系統乃以 GOP 作為分段的單位,即可清楚明瞭的切出各可獨立 解壓縮的分段。
2) 由於 JSVM 解碼器在開始解壓縮各分段影片,會優先檢查第一張影片是否為 IDR picture,因此當本系統以 GOP 為單位時,除了需設定 intra period 的間隔和 GOP 的大小相同外,還必須在該分段的第一張影片前安置原本需參照的前一分段最後一張 影像 (I picture),並調整該影片之 slice header,除去不屬於 IDR picture 的 syntax
elements,並填入如 idr_pic_id, no_output_of_prior_pics_flag, long_term_reference_flag 等,將該參照的 I picture 轉型成為 IDR picture。
Scalable
ParaSet GOP 1
ParaSet GOP 2 GOP 3 GOP 4
IDR picture GOP key frame
pic_order_cnt_lsb 時,將原有之 key frame 替換為 IDR picture,使 decoder 端能順利解壓縮具有不同 可調性組成的隨選視訊分段;
另外由於 SEI 資訊僅作為輔助分析之用,因此在網路上傳送視訊資料時,可選 擇不傳送 SEI 的資訊,在圖中以淡灰色表示。本演算法之主要程式模組如下所述,
包 含 有 Extractor 、 H264AVCPacketAnalyzer 、 ParameterSetMng 、 SliceReader 、 PocCalculator 等。
模組名稱 Extractor
模組功能
圖 3-4 即為結合 SliceReader、PocCalculator、ParameterSetMng、
H264AVCPacketAnalyzer 等模組之功能,分析 H.264/AVC-SVC 視訊串流之內容。由 NAL unit header 之 nal_unit_type 得知該 NAL unit payload 所包含之資料為 parameter sets、coded slices 或 只是輔助用的 SEI 資訊;由 PocCalculator 配合 slice header 中 之 pic_order_cnt_lsb 及 frame_num 計算出 coded slices 的影片
播放順序;可由該 coded slices 之 NAL unit extension 得知其可調 性組成,並依此擷取出其所對應的 parameter sets 資訊等。此一 分層提取技術演算法模組,未來可配合接收端之使用者資訊,使 其在網路上傳輸時,能夠依據當時網路頻寬狀況動態分離出所需 要的影片品質,Extractor 所包含的相關模組功能將逐項說明之.
模組名稱 H264AVCPacketAnalyzer
模組功能
利用 nal unit header 之 nal_unit_type 資訊,對於 SPS, PPS, SEI, coded slice 等不同型能的 NAL unit 資料作相對應之分析與資料 維護;當處理到 coded slice 時利用 SliceReader 模組讀出該 coded slice 的 slice header 資訊,例如其屬於那一個 GOP 分段 等,提供 Extractor 模組進行隨選視訊影片分段時,所需要的重 要訊息.
模組名稱 ParameterSetMng
模組功能
記錄並維護 sequence parameter sets 及 picture parameter sets 之 資訊,其中 picture parameter sets 的 syntax element 有記錄其 pic_parameter_set_id 與 seq_parameter_set_id 的對應關係,執行 隨選視訊影片分段時,所需要的 SPS, PPS 資訊可以由此擷取,
其中決定 coded slice 播放順序計算方法的 pic_order_cnt_type 也是 SPS 的資訊之一.
模組名稱 SliceReader
模組功能
分析 coded slice nal unit,將其 nal unit payload 中屬於 slice header 的資訊讀出,並儲存於 slice header 資料結構當中;其中 slice_type 可 知 道 其 是 否 為 FGS frame, I frame 等 ; 可 依 據 pic_parameter_set_id 找到相對應之 picture parameter set 資訊;若 為 IDR picture,則會有獨一無二的 idr_pic_id;要計算該 coded slice 之 播 放 順 序 picture order 時 則 需 要 frame_num 、 pic_order_cnt_lsb 等資訊,其它重要資訊如下:
first_mb_in_slice、
slice_type、
pic_parameter_set_id、
frame_num、
idr_pic_id、
pic_order_cnt_lsb、
delta_pic_order_cnt、
…
模組名稱 PocCalculator
模組功能
用 於 計 算 各 張 影 片 之 播 放 順 序 , 需 配 合 下 列 參 數 , 並 依 據 pic_order_cnt_type,而主要分為三種運算模式,再配合其配合其 reference frame 的選擇得出,詳情請見 [6] 8.2.1 decoding process for picture order count.
(1) sequence parameter sets 中的 syntax elements pic_order_cnt_type、
offset_for_ref_frame、
offset_for_non_ref_pic、
log2_max_frame_num_minus4、
log2_max_pic_order_cnt_lsb_minus4 、 num_ref_frames_in_pic_order_cnt_cycle
(2) slice header 中的 syntax elements pic_parameter_set_id、
pic_order_cnt_lsb、
delta_pic_order_cnt、
frame_num
(3) nal unit header 中的 syntax elements nal_ref_idc、
nal_unit_type