2015-05-09 46 views
2

我正在寫一個MPEG-TS到MP4轉換器,這主要是因爲我可以播放具有適當尺寸和播放速度的可播放MP4文件等等。從具有損壞的SPS的MPEG-TS流獲取H.264視頻尺寸

但是,我不確定VLC(或者我測試過我的輸出的任何其他視頻播放器)是如何確定視頻的正確尺寸。我通過解析SPS來計算的寬度和高度值是全部垃圾;我最終得到了像16x160或32x1529的東西。

現在,MP4文件中的avcC框包含完整的原始SPS單元,所以我看到兩種可能性: 1.我的SPS解析器實際上被破壞了,MP4播放器重新提取寬度,高度,輪廓和關於他們自己的的正確信息來自完整的SPS。在那種情況下,我可以使用哪些測試用例來驗證我的SPS分析器? 2.我的SPS解析器很好,SPS數據真的很棘手,MP4播放器能夠通過其他方式從視頻數據中檢索正確的參數。在那種情況下,其他手段是什麼?

編輯:作爲參考,我這裏還有一些SPSS軟件我試圖解析,結果我得到的:

SPS:0x674d401feca0c8edff807007088003080031e078c18cb0 pic_width_in_mbs_minus1:0 pic_height_in_map_units_minus1:0 frame_cropping_flag:0 frame_mbs_only_flag:0 寬度:16 高度:32

SPS:0x6742c015d90a07e84003040030f03c58b920 pic_width_in_mbs_minus1:1個 pic_height_in_map_units_minus 1:159 frame_cropping_flag:1(底部偏移爲1,其餘爲0) frame_mbs_only_flag:0 寬度:32 高度:5118

SPS:0x676401eacd940b031a100301003032f162d96

pic_width_in_mbs_minus1:0 pic_height_in_map_units_minus1:4 frame_cropping_flag :0 frame_mbs_only_flag:0 寬度:16 高度:160

我解析器代碼是相當大的,包括在這裏,但是G上itHub在https://github.com/gliese1337/HLS.js/blob/master/SPSParser.js

+0

我會先檢查語法分析器,THI s解釋瞭如何將位流中的值轉換爲像素尺寸:[獲取H264視頻流的尺寸](http://stackoverflow.com/a/6477652/868014) –

+0

@RomanR。我通過直接從規範工作來構建SPS分析器,使用該答案中引用的相同表格。如果解析器出現問題,我不認爲再次看同一個引用會有幫助,因此想知道是否有可能已知的測試用例可以運行它。 –

+0

爲什麼不顯示您的SPS字節(或解析器,或兩者兼而有之),哪些可以獲得垃圾尺寸。 –

回答

3

這仍然應該是與你的SPS解析器一個問題:

SPS:0x674d401feca0c8edff807007088003080031e078c18cb0 pic_width_in_mbs_minus1:0 pic_height_in_map_units_minus1:0 frame_cropping_flag:0 frame_mbs_only_flag:0寬度:16高度:32

Sequence Parameter Set 
profile_idc 77 
constraint_set0_flag 0 
constraint_set1_flag 1 
constraint_set2_flag 0 
constraint_set3_flag 0 
level_idc 31 
seq_parameter_set_id 0 
num_ref_frames 4 
gaps_in_frame_num_value_allowed_flag 0 
pic_width_in_mbs_minus1 24 
pic_height_in_map_units_minus1 13 
frame_mbs_only_flag 1 
direct_8x8_inference_flag 1 
frame_cropping_flag 0 
vui_parameters_present_flag 1 

分辨率:400x224

+1

原來是一個偏離一個字節的錯誤。感謝您將正確答案用作參考。 –