擴展ps流增加“視頻幀錄像時刻絕對時間戳”方法

緣起:使用GB28181對接下級平臺/NVR等時,做錄像回放想將錄像流的時間軸精確到秒,就是實現類似下面的效果:

然而ps流中PES包攜帶的PTS/DTS無法轉換成 【2020-06-16 00:16:43】 這樣的絕對時間,因此就無法通過國標PS流進行精準定位。因此,作爲上級國標平臺欲想實現上圖的效果,要麼使用存儲設備私有SDK來請流,要麼就要擴展PS流增加時間戳。我們採用了以擴展PS爲首選、調用SDK爲輔助的思路。

 

實現:實現擴展PS流,增加私有數據或自定義數據,標準的辦法包括兩種:其一是增加一種PES來承載視音頻流的非標準信息;其二是在PES包中通過增加特定數據來實現。如下所示:

(方法1)增加一種ES和相應的PES,簡稱時間戳PES。
    這種ES表示視頻幀錄像時刻絕對時間戳。
    單位爲秒或毫秒。在PSM中協商使用哪種單位。
    以32位整型的秒數或64位整型的毫秒數表示時間。
    每個視頻幀PES必須後面跟着一個時間戳PES。對音頻幀不做要求。
(方法2)使用PES保留的extend字段。
    在每個視頻幀PES的extend字段上攜帶像時刻絕對時間戳。
    單位爲秒或毫秒。在PES的extend字段中協商使用哪種單位。
    以32位整型的秒數或64位整型的毫秒數表示時間。
    錄像的音頻PES可不必攜帶此字段。
(方法3)使用 stream_id=private_stream_1時的PES_packet_data_byte 承載專用數據。
(方法4)使用 stream_id=private_stream_2時的PES_packet_data_byte 承載專用數據。
 

具體的,可以參考ISO/IEC 13818-1的附錄H來獲得更多詳細實現細節。經過評估,我選擇了(方法2)作爲最終實現方法。實現細節如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章