天天看點

說一說TS碼流裡面的PCR

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

說一說TS碼流裡面的PCR

直到有一次無意中發現視訊的OSD和這個時間完全對不上,這個PCR對應的實際時間應該是上午10點多的,是以我才去确認了一下到底什麼是PCR,然後解決了如下問題:

1、什麼是PCR?

在标準文檔裡面定義如下:

說一說TS碼流裡面的PCR

翻譯成中文就是:

說一說TS碼流裡面的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了。

說一說TS碼流裡面的PCR

好了,今天就到這裡吧。