對於pts_dts_flags的重設
這是因為忽略了乙個問題,在pts語法中,前4個bit要求與 pts_dts_flags 取值相同。因此,在修改 pts_dts_flags 的之後,pts語法前4bit也要做相應的修改。這樣目前已知的解碼器就可以正常工作
h264碼流生成快進檔案關鍵技術
抽幀只是第一步,總結來說,需要以下舉措:
1.抽取關鍵幀
這個過程中,需要抽取完整的關鍵幀,在264碼流中,碼流層次沒有幀的概念,幀由若干slice組成,如果編碼器編碼過程採用了分片,
那麼你需要將屬於同一幀的slice都拿出來。一般來說,應用與廣電行業的264編碼器不採取分片,乙個幀就是乙個片。
他們具有相同的frame_num,這時你需要將p片也拿出來,否則i幀是不完整的
2.pts, dts pcr時間戳調整
最好的效果是調整到沒有pcr精度錯誤,間隔錯誤,以及pts錯誤,不過若做簡單一些,保證pcr精度正確就可以。
3.frame_num調整
僅當碼流中關鍵幀為i幀時需要調整,idr幀則不必。frame_num被解碼器用於控制解碼順序,我不清楚為什麼idr幀的frame_num總為0而i幀卻不是,
以維持幀率恆定
對時間戳迴圈到頭的處理:
ts流中的三個時間戳,pts(33bit),dts(33bit),pcr(42bit)
當時間戳增加到語法無法容納時,產生時間戳迴圈,時間線開始變小,迴圈點計算方式是:將要設定的值減去時間戳最大值,將差值寫入語法結構。
編碼器設定時鐘,以及解碼器自己的系統時鐘在達到最大值後,都根據此方式計算,不會產生時鐘的不連續。
pcr能表示多長時間
pcr最大值是多少,多長時間會迴圈一次,這是個非常簡單的問題,但一直以來我們對他的認識是錯誤的,我們認為是兩天多
先說正確的應該是多少,根據:
pcr(i) = pcr_base(i)*300 + pcr_ext(i)
pcr_base 33 位,最大值:0x1ffffffff
pcr_ext 9 位,根據定義,取值 0-299
因此pcr最大值為:0x1ffffffff*300 + 299
可表示的小時數:(0x1ffffffff*300 + 299) / 27000000 / 3600 約為 26.5 小時
以前認為是兩天多,大概是這樣算的,pcr一共42位,把2的42次方作為pcr最大值,算出來大約是1.8天
TS中的pcr dts pts問題
對於pts dts flags的重設 這是因為忽略了乙個問題,在pts語法中,前4個bit要求與 pts dts flags 取值相同。因此,在修改 pts dts flags 的之後,pts語法前4bit也要做相應的修改。這樣目前已知的解碼器就可以正常工作 h264碼流生成快進檔案關鍵技術 抽幀只...
ts型別總結
1.ts保留了js語法的全部型別 8種 number string boolean null undefind symbol array object 例 let str string zhangsan let nul null null let num number 123 注 陣列的書寫方式有所...
TS中的介面
介面也是定義標準,他比抽象類更加全面 1.屬性介面function printlabel labelinfo void printlabel aaa 錯誤寫法 printlabel 傳入引數必須是以label為屬性名的物件對批量方法進行約束 可選屬性介面firstname?string 定義標準 i...