最近由于某些原因剛好研究了下GB28181中的音視頻封裝苛蒲,秉著事情無論具細都記錄下的原則笋颤,記錄下勤篮。
GB28181是公共安全視頻監(jiān)控聯(lián)網(wǎng)系統(tǒng)信息傳輸知允、交換、控制技術(shù)要求叙谨,最近幾年才出來的安防新標準,旨在統(tǒng)一各種攝像頭監(jiān)控設備的各種協(xié)議保屯,實現(xiàn)全網(wǎng)接入手负,既然是公安部出的標準,肯定是非常重要啦姑尺,想接入政府部門可能都得實現(xiàn)這個協(xié)議竟终。
其音視頻封裝部分,分為兩種:1切蟋、對講類型统捶,2、廣播類型柄粹;
下面聊聊對講類型的一些音視頻封裝喘鸟,文檔中的說明有時給我的感覺并不是很全面。
媒體流:采用PS流的格式驻右,按照ISO/IEC 13818-1標準什黑,先將ES流(也就是原始的編碼后的H264或者音頻G711格式的數(shù)據(jù))都打包成PES。然后將PES打包成PS堪夭;這里分為兩種愕把,一種是I幀的PS,需要在PS頭部添加System header森爽,然后再PES前面添加一個特殊的PES恨豁,叫PSM(program stream map),這也是一種PES爬迟,比較特殊橘蜜;
所以對于包含I幀的視頻格式就是(注意,這里PESA可以多個雕旨,原來的文檔寫得模棱兩可扮匠,只有一個PESA)
PS包頭 | System header | PSM | PESV | PESA | PESA... |
---|
另外一種是P幀的視頻,這種視頻不需要添加Sytem header及PSM格式為:
PS包頭 | PESV | PESA | PESA... |
---|
將音視頻數(shù)據(jù)打包成上面的格式后凡涩,使用RTP封包棒搜,封成多個RTP包發(fā)送,最后一個包marker位為1活箕。
另外注意音頻采樣率及通道數(shù)要求力麸。
最后通過網(wǎng)絡io發(fā)送給服務端。
這里還有個問題吐槽,PS流按照這種封裝格式克蚂,PS流按照文檔上的說法主要是在存儲比如CD存儲中使用闺鲸,而傳輸一般使用TS;
這里就需要看MPEG-TS文檔中的說明埃叭,TS和PS是對PES處理的兩個相反的過程摸恍,PS將若干個PES打包為一個PS包,而TS將一個PES拆分成多個TS包赤屋,每個包大小固定188字節(jié)立镶,最后如果不夠就填充。PS其實是不利于網(wǎng)絡傳輸?shù)睦嘣纾瑢τ诨赨DP的RTP而言媚媒,丟包是很正常的,按到里應該采用TS更加合理涩僻,但是不明白為什么GB28181采用PS來傳輸缭召,如果中間丟了一個包,整個PS流都無法還原逆日,而TS丟包只影響一個PES而已嵌巷。