有些亂,先存著,留著看
如何結合H.264標準看JM代碼》這個web文件,大家都應該有了吧。不過,那個web文檔是“H.264樂園”群中聊天的內容
1、一個sps后,有若干個pps嗎?
????? 這主要又編碼器決定,但JM代碼中只有一個
?
2、標準中第二欄的C是什么意思?
????請看標準7.2--分類(在表中以C標記)表明了片數據被劃分為三類片數據分割的情況。片數據A類分割包含所有的2類語法元素。片數據B類分割包含所有的3 類語法元素。片數據C類分割包含所有的4類語法元素。其他類語法元素取值的含義未做規定。對于某些語法元素,使用一個垂直豎線表示其包含兩類語法元素。在這種情況下,該語法元素將使用的分類值將在文本中進一步確定。
3、一個NALU對應一個片嗎?
????這種說法不太準確,NALU 包括一個片、SPS、PPS、SEI等等
?
4、decode_one_frame()包括I、P、B
?
5、 case NALU_TYPE_SLICE:
???? ?case NALU_TYPE_IDR:
???? ?case NALU_TYPE_DPA
????? case NALU_TYPE_DPB:
????? case NALU_TYPE_DPC
????? case NALU_TYPE_SEI:
??????case NALU_TYPE_PPS
????? case NALU_TYPE_SPS
???? ?case NALU_TYPE_AUD:
???? ?case NALU_TYPE_EOSEQ:
???? ?case NALU_TYPE_EOSTREAM:
???? ?case NALU_TYPE_FILL
???? 問題:什么時候進入哪個,有什么說明的文章或書么?
???????答?:進入哪個 case 是由從 NALU 頭里解碼出來的 nalu_type 決定的
?
6、解碼器中的誤碼隱藏只對丟包有用,丟包之后,包的序號不連續,解碼器一旦檢測到包序號不連續就會將不連續地方的 ei_flag ?置 1
?
7、字節流格式和RTP格式碼流,具體的不同點有哪些?相關的資料哪里有?
?? ?? 字節流格式主要用于文件存儲,因此在該格式碼流中 NALU 前面只有一個開始前綴,RTP格式碼流因為需要進行網絡傳輸,?因此 NALU 前面還有很多輔助信息
?
8、rtp格式就是在字節流前加包頭嗎?
????? 不是,字節流=開始前綴+NALU,而 RTP 中沒有 開始前綴
?
9、RTP中沒有開始前綴,為什么還是要插03?
????? ?防止偽起始碼、、RTP完全可以不用起始碼,或許是為了與字節流格式統一吧
?
10、NALU是對RBSP的封裝。而RTP之類的是對NALU的封裝。
?
11、為什么要分ABC片?
??????? ——分ABC片主要目的是為了對重要程度不同的數據進行不同程度的保護
?
12、baseline沒有數據分割吧?
??????baseline只是如何產生RBSP,如何封裝NALU。具體如何傳輸,RTP之類只是一種方式,文件copy也是一種方式,那一般?baseline最多有多少參考幀?任意個。
?
13、解碼profile_idc之后解碼器要做什么工作?比如baseline不支持CABAC那么后面相應的位entropy_coding_mode_flag是不是就不存在了,如果存在,相抵觸怎么辦?
??????當然不會執行 CABAC 的代碼,編碼器如果是編碼 baseline ,那么碼流中自然就不存在與 CABAC 相關的語法元素,例如 ?entropy_coding_mode_flag ,解碼器解碼 SPS ,得知碼流是 baseline 后,自然也就不會去調用與 CABAC 相關的解碼程?序,也就不會出錯了。profile_idc 為 baseline ,active_pps->entropy_coding_mode_flag 就不會為 CABAC,,碼流是?否是 baseline 并不是由多少個參考幀決定的
?
14、JM 進行 CAVLC 編碼時候,對于 level = 8 的情況是采用 escape suffix 處理的,我修改代碼將 level = 8 的情況采用無符號數表示,結果編碼出來的碼流與未修改完全一樣
附:RBSP、SODB、EBSP三者的區別和聯系!
??????? SODB:最原始的編碼數據,沒有任何附加數據
??????? RBSP:在 SODB 的基礎上加了rbsp_stop_ont_bit(bit 值為 1)并用 0 按字節補位對齊
??????? EBSP:在 RBSP 的基礎上增加了防止偽起始碼字節(0X03)
?????? 1、1 frame的數據可以分為多個slice.
?????? 2、每個slice中的數據,在幀內預測只用到自己slice的數據, 與其他slice 數據沒有依賴關系。
????? ?3、NAL 是用來將編碼的數據進行大包的。 比如,每一個slice 數據可以放在NAL 包中。
????? ?4、I frame. 是自己獨立編碼,不依賴于其他frame. 數據。
?????? ???? P frame. 依賴 I frame. 數據。
?????? ??? ?B frame. 依賴 I frame, P frame. 或其他 B frame. 數據。
??? ?一個frame是可以分割成多個Slice來編碼的,而一個Slice編碼之后被打包進一個NAL單元,不過NAL單元除了容納Slice編碼的碼流外,還可以容納其他數據,比如序列參數集SPS。
?
15、NAL、Slice與frame意思及相互關系
NAL指網絡提取層,里面放一些與網絡相關的信息
Slice是片的意思,264中把圖像分成一幀(frame)或兩場(field),而幀又可以分成一個或幾個片(Slilce);片由宏塊(MB)組成。宏塊是編碼處理的基本單元。
?
16、NAL nal_unit_type中的1(非IDR圖像的編碼條帶)、2(編碼條帶數據分割塊A)、3(編碼條帶數據分割塊B)、4(編碼條帶數據分割塊C)、 5(IDR圖像的編碼條帶)種類型與 Slice種的三種編碼模式:I_slice、P_slice、B_slice NAL nal_unit_type 里的五種類型,代表接下來數據是表示啥信息的和具體如何分塊。I_slice、P_slice、B_slice 表示I類型的片、P類型的片,B類型的片.其中I_slice為幀內預測模式編碼;P_slice為單向預測編碼或幀內模式;B_slice 中為雙向預測或幀內模式。
?
17、還有frame的3種類型:I frame、P frame、 B frame之間有什么映射關系么?
I frame、P frame、 B frame關系同 I_slice、P_slice、B_slice,slice和frame區別在問題1中已經講明白。
?
18、最后,NAL nal_unit_type中的6(SEI)、7(SPS)、8(PPS)屬于什么幀呢?
NAL nal_unit_type 為序列參數集(SPS)、圖像參數集(PPS)、增強信息(SEI)不屬于啥幀的概念。表示后面的數據信息為序列參數集(SPS)、圖像參數集(PPS)、增強信息(SEI)。