對於目前市面上各種不同的流媒體平臺,我們很難區分出哪個平臺具體適合哪種項目場景。比如現在比較普遍的國標GB/T2818協議,可以連接公安部的安防平臺,是很多人的選擇。我們的國標流媒體平臺EasyGBS就支持接入國標協議的攝像頭並進行管理。
鑑於目前H.265編碼是大趨勢,加之之前有很多用戶向我們提出EasyGBS支持H.265的訴求,所以我們也研發了EasyGBS的H.265版本(國標GB/T28181流媒體服務器EasyGBS支持H265編碼格式)。
在開發EasyGBS流媒體平臺H.265編碼功能的時候,出現了一個問題:推流庫從ps流中解析視頻編碼格式返回的數據是0。
推流庫推了PS流之後,需要從PS流中解析視頻編碼格式。然後前端頁面點擊播放,發送invite消息的時候將推過來的ps流進行解析隨後返回給前端播放器此時視頻的編碼格式。
但是前端在此時接受到的返回參數一直是0,導致服務器進行下一步操作。
經過排查分析,我們在後臺拿到ps流地址分析的時機,是在給前端返回之後,所以導致設置視頻編碼的方式爲0。
設備編碼賦值代碼:
timestampSec := msess.TimestampSec - msess.FirstTimestampSec
if timestampSec < 0 {
timestampSec = 0 - timestampSec
}
stream.RTPTimestampSec = int64(timestampSec)
stream.RTPInBytes = msess.RTPInBytes
stream.VideoCode = msess.MessTypes
處理方式,是在取值的時候進行循環等待
for {
tempstream := uas.Server.GetStreamFromRedis(stream.StreamID)
if tempstream != nil {
VideoCode = tempstream.VideoCode
}
if VideoCode == 0 {
time.Sleep(time.Second * 1)
continue
}
break
}
然後我們可以來看一下處理後的結果,返回的數據已經恢復正常了。