如何解決國標GB28181協議流媒體視頻平台新增ws_flv視頻流無法播放問題?


流媒體服務器最主要的作用就是進行視頻流的轉碼分發,比如EasyGBS視頻平台,可通過國標GB28181協議將視頻流轉化成可播放的視頻。目前EasyGBS可以輸出RTMP、HLS、FLV三種格式的視頻流。

在新版的EasyGBS視頻平台開發過程中,我們新增了ws_flv的視頻流,拓寬了輸出視頻流的格式,但是在測試過程中卻發現ws_flv視頻流播放不了,顯示黑屏

經排查是因為項目本身使用https訪問是加密的(https接入我們國標流媒體服務器視頻無法播放),但此時后端返回給前端的flv地址是ws的,獲取視頻的地址錯誤,這才導致了視頻無法播放

所以我們在訪問websocket請求連接的時候不能用ws,而是要用加密版的wss,后端在初始化流數據的時候定義一個wss的播放地址:

stream = &sip.Stream{
		StreamID:   streamid,
		DeviceID:   sipDev.DeviceID,
		SenderID:   sipChannel.DeviceID,
		SenderName: sipChannel.Name,
		SenderSeq:  subject.SenderSeq,
		MSDeviceID: ms.Serial,
		SSRC:       SSRC,
		Transport:  transport,
		UseForSnap: useForSnap,
 
		StartAt:   time.Now().Format(utils.DateTimeLayout),
		FLV:       ms.GetFLV_URL("hls", sipDev.DeviceID, subject.SenderSeq),
		HTTPS_FLV: ms.GetHTTPS_FLV_URL("hls", sipDev.DeviceID, subject.SenderSeq),
		RTMP:      ms.GetRTMP_URL("hls", sipDev.DeviceID, subject.SenderSeq),
		HLS:       ms.GetHLS_URL("hls", sipDev.DeviceID, subject.SenderSeq),
		HTTPS_HLS: ms.GetHTTPS_HLS_URL("hls", sipDev.DeviceID, subject.SenderSeq),
		WS_FLV:    ms.GetWSFLV_URL("hls", sipDev.DeviceID, subject.SenderSeq),
		WSS_FLV:   ms.GetWSSFLV_URL("hls", sipDev.DeviceID, subject.SenderSeq),
		RTSP:      ms.GetRTSP_URL(sipDev.DeviceID, subject.SenderSeq),
		CDN:       cdn,
		Record:    sipChannel.Record,
	}

  

然后給前端返回播放地址的時候,對項目進行判斷,是否需要加密,如果需要加密則返回wss加密后的地址:

stream.UseForSnap = false
	flvURL := stream.FLV
	ws_flvURL := stream.WS_FLV
	hlsURL := stream.HLS
	rtmpURL := stream.RTMP
	rtspURL := stream.RTSP
	if c.Request.TLS != nil {
		flvURL = stream.HTTPS_FLV
		hlsURL = stream.HTTPS_HLS
		ws_flvURL = stream.WSS_FLV
	}

  

前端再次播放拿到wss的地址時,則播放正常。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM