問題的起因是這樣的:在我剛開始學習的碼流的時候,就有人告訴我TS裡面的有一個絕對時間叫做PCR,但是我們因為代碼原因,都基本不怎麼用。後面分析碼流的時候基本都是使用EasyICE,然後看到的資料就是下面這樣的。我也一直以為這個就是碼流的絕對時間22:30:01.733秒。

直到有一次無意中發現視訊的OSD和這個時間完全對不上,這個PCR對應的實際時間應該是上午10點多的,是以我才去确認了一下到底什麼是PCR,然後解決了如下問題:
1、什麼是PCR?
在标準文檔裡面定義如下:
翻譯成中文就是:
翻譯成人話就是:
相對于解碼器的一個時刻。我這邊從一部分相機上抓取資料發現,本質上就是相對于相機上一次重新開機的時間。這個相對于哪個值不重要,記得就是相對于一個時刻過了多久。和C++上的time()函數有點像,就會開機時間。
2、PCR的作用?
音視訊同步。
3、PCR怎麼計算?
把得到的PCR /27000000 然後就得到了多少秒,這個就是相對于時刻的多少秒。至于除以27000000的原因是因為時鐘的采樣頻率固定是27M。
4、PCR和PTS以及DTS的關系?
可以參考這篇文章:https://www.easyice.cn/archives/264
5、PCR最大表示多長時間?
PCR_base 33 位,最大值:0x1FFFFFFFF
PCR_ext 9 位,根據定義,取值 0-299
是以PCR最大值為:0x1FFFFFFFF*300 + 299
可表示的小時數:(0x1FFFFFFFF*300 + 299) / 27000000 / 3600 約為 26.5 小時
6、發一張相機重新開機之後的PCR的樣子。
PCR确實已經重新指派為0了。
好了,今天就到這裡吧。