備忘
528 tpc-b-nt 19a tpc-b
Z:\03-公共資料\02-docs
VLC 網絡串流 rtsp://192.168.1.120:554/live?channel=1&subtype=1
onvif
https://www.onvif.org/ch/profiles/whitepapers/
H.265是和H.26x/MPEG-x AVC一樣是一種編碼壓縮的技術,其具體高效率的編碼方式,設備支持H.264和H.265。
MJPEG是網絡攝像機的壓縮格式。也是現在主流壓縮格式。幾乎所有的視頻監控設備廠商都以這兩種產品為主。想讓圖像像素更高,畫質更清晰,那就必須依靠壓縮技術來優化。
MPEG4編碼標准,mp4和avi
SVAC《安全防范監控數字視音頻編解碼技術標准》是國家規范化的編碼方式,安全防范監控行業獨特要求的技術標准協議,也是一種編碼技術。
GB/T28181是《安全防范視頻監控聯網系統信息傳輸、交換、控制技術要求》一部國家標准。
ONVIF和PSIA是國際的通用接口協議、標准
攝像頭相當於一個服務器,監控平台相當於客戶端
infray:艾睿攝像頭 海康、大華
Profiles A、C、D和M 適用於門禁控制,Profiles G、Q、M、S與T 適用於視頻系統。
*視頻流* RTSP/RTP協議
Profile S
用於基本視頻流
- 視頻流和配置
Profile S專為基於IP的視頻系統而設計。 Profile S設備(例如,IP網絡攝像機或視頻編碼器)是可以通過IP網絡將視頻數據發送到Profile S客戶端的設備。 Profile S客戶端(例如,視頻管理軟件)是可以從Profile S設備配置,請求和控制IP網絡上的視頻流的設備。 Profile S還涵蓋了用於PTZ控制,音頻輸入,多播和繼電器輸出的ONVIF規范,適用於符合此類功能的設備和客戶端。
PTZ 在安防監控是 Pan/Tilt/Zoom 簡寫,代表雲台全方位(上下、左右)移動及鏡頭變倍、變焦控制。
RTMP(實時消息傳輸協議),Adobe的私有協議,協議基於TCP,是一個協議族。是一種設計用來進行實時數據通信的網絡協議,支持RTMP協議的流媒體、交互服務器之間進行音視頻和數據通信。RTMP與HTTP一樣,都屬於TCP/IP四層魔性的應用層。
直播Nginx-rmtp-module:音視頻(或桌面)采集---》OBS推流---》視頻服務器(美顏、鑒黃等處理)---》拉流
元數據:描述數據屬性的信息,人物特征性格,電影演員信息。
RTSP實時流傳輸協議
(1)是流媒體協議。
(2)RTSP協議是公有協議,並有專門機構做維護。.
(3)RTSP協議一般傳輸的是 ts、mp4 格式的流。
(4)RTSP傳輸一般需要 2-3 個通道,命令和數據通道分離。
RTSP,拉的模式
RTMP 可以用在雙端,但 HLS 只能用在拉流端,記住這層關系。
國標28181
\192.168.1.200\public\01-技術文檔\04-協議文檔\國標文檔
國標28181,應用層協議,解決平台與平台對接(通信)問題,推的模式,可以實現視頻流出外網。基於SIP協議,視頻流出外網。
SIP:會話發起協議,基於文件的應用層控制協議,用於創建、修改和釋放一個或多個參與者的會話。
RTP:網絡傳輸協議,在互聯網上傳遞音頻和視頻的標准數據包格式,多播協議用於單播;RTP協議和RTP控制協議RECP一起使用,船艦在UDP協議上。
SIP服務器和媒體服務器可以是同一個設備
媒體流接受者:攝像機推給媒體服務器,媒體服務器再推給媒體設備接受者,媒體服務器相當於分發,中轉(也可以直接推給媒體流接受者)然后提供RTSP、RTMP、FLV、HLS多種格式進行分發,實現web瀏覽器、手機瀏覽器、微信、PC客戶端等各終端無插件播放。
常見的GB28181報文,包括注冊(REGISTER)、注銷(REGISTER)、心跳(Keepalive)、INVITE、雲台控制(PTZ);並且針對海康、大華品牌的IPC分別在同網和跨網(跨路由器)的情況下進行分析。
get請求比較多。
NVR
NVR,全稱Network Video Recorder,即網絡視頻錄像機,是網絡視頻監控系統的存儲轉發部分,NVR與視頻編碼器或網絡攝像機協同工作,完成視頻的錄像、存儲及轉發功能。
VSR
XX-VSR-AS1608AP-V100
192.168.1.145 智能分析平台,
AI預覽,多通道預覽,回放管理,智能檢索
智能管理(智能預案配置、算法配置、授權)
相機管理,儲存管理,流量統計
預警布防,預警查詢
系統設置、日志、重啟、對講、關機
1.添加布控告警相關接口
SVR
提升畫質,可以讓1080p的顯示器呈現4K分辨率的畫質。
onvifserver
鑒權 Authentication 獲取unvif鑒權、設置鑒權方式、crud用戶
blp業務邏輯處理
http.HandleFunc 函數類型(用這個) 這個第二個參數是一個方法,參數是ResponseWriter, 和 *Request 所以使用的時候需要傳方法。
http.Handle 第二個參數是Handler這個接口, 這個接口有一個ServeHTTP()的方法,所以這個方法使用的時候需要自己去定義struct實現這個Handler接口。
ListenAndServe使用指定的監聽地址和處理器啟動一個HTTP服務端。處理器參數通常是nil,這表示采用包變量
SOAP(簡答對象訪問協議)
使用XML作為序列化編碼格式的RPC調用
xml.Marshal Marshal函數返回v的XML編碼。
Unmarshal解析XML編碼的數據並將結果存入v指向的值。v只能指向結構體、切片或者和字符串。良好格式化的數據如果不能存入v,會被丟棄。
message... 不定長切片
log
log.Info("RequestName:", requestName)
log.Warn("Write response error:", err)
log.Errorf("Message marshal error:", err)
uuid序列化?
BuildDiscoverMessage 設備發現
NTP網絡時間協議,同步時間
SDP
SDP全稱是Session Description Protocol,翻譯過來就是描述會話的協議。主要用於兩個會話實體之間的媒體協商。
什么叫會話呢,比如一次網絡電話、一次電話會議、一次視頻聊天,這些都可以稱之為一次會話。
那為什么要去發這個描述文本呢,主要是為了解決參與會話的各成員之間能力不對等的問題,如果參加本次通話的成員都支持高質量的通話,但是我們沒有去進行協議,為了兼容性,使用的都是普通質量的通話格式,這樣就很浪費資源了。所以SDP的作用還是很有必要的。
19A
1.功能
登錄
go.mod go.sum 依賴管理
golang的time.Format方法一定要用2006-01-02 15:04:05作參數
dev mgr文件:數據方法寫到dev里面,mgr調用dev
dev DevTemp //測溫分析設備
圖片存在哪里,存在sdk卡里面
thermaltemp
arch
開爾文(K)=273.15+攝適度(T)
arch:硬件差異層,屏蔽硬件體系結構差異,實現業務組件跨平台運行
arch_amd64.go 空實現 return true
blp
temp_data 獲取溫度數據
獲取點線面框架溫度,存到切片
兩個全局變量 result TempResult mtx sync.RWMutex
router
restful API規范,get獲取數據,post提交數據,put修改數據,delete刪除數據
beego.GlobalControllerRouter["neuron/function/thermal/thermaltemp/http:Controller"] =
append(beego.GlobalControllerRouter["neuron/function/thermal/thermaltemp/http:Controller"],
beego.ControllerComments{
Method: "GetTempDifference",//方法名
Router: "/difference",
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Filters: nil,
Params: nil})
cmd.go 啟動和停止,獲取配置,初始化數據,開始執行。
rune
rune
是int32
的別名,在所有方面都等同於int32
- 按慣例,它用於區分字符值和整數值。
http://192.168.1.140/v1/thermal/temp/tempFrame/temp GetTempFace 每秒獲取人臉溫度
感興趣區域報警聯動事件
設置-相機設置 視頻 感興趣區域 物體溫度超過80攝氏度,聲音報警
目前已實現的功能:使能、圖像質量、可見光和測溫兩個通道、繪制區域(四個區域)、刪除繪制區域。
-
前端獲取繪制區域xy軸坐標(對角線),傳給后端,500毫秒獲取一次溫度;
攝氏度 = (華氏度 - 32) * 5/9℃
華氏度 = 攝氏度 * 9/5 + 32℉
開爾文 = 攝氏度+273.15KtempRegion [arch.MaxTempAreas]dsd.TempData //當前區域測溫數據
cfgRegion conf.TempRegionConfigs //當前區域測溫配置
-
溫度異常報警:最高溫(TempRangeMax float32
description:"溫寬:最高溫,用於整幀測溫"
)、最低溫,調溫度和區域接口 -
溫度超過80觸發 channel 01拍照,拍照存在SD卡里面
代碼
http.go
// @Title 獲取測溫區域配置
// @Summary 獲取測溫區域配置
// @Description 獲取測溫區域配置
// @Param default query bool false "默認配置"
// @Success 200 {object} []conf.TempRegionConfig
// @Failure 400300 獲取配置失敗
// @router /tempRegion [get]
func (c *Controller) GetTempRegion() {
var err error
rsp := apis.Response{}
c.Data["json"] = &rsp
defer c.ServeJSON()
dft, _ := c.GetBool("default", false)
cfg := conf.TempRegionConfigs{}
if dft {
err = config.GetDefault(&cfg)
} else {
err = config.GetConfig(&cfg)
}
if err != nil {
rsp.Error(errors.ErrGetCfgFailed, err.Error())
return
}
cfg.ConvTemp2Std()
rsp.Success(cfg)
}
// @Title 設置測溫區域配置
// @Summary 設置測溫區域配置
// @Description 設置測溫區域配置
// @Param cfg body []conf.TempRegionConfig true "測溫區域配置"
// @Success 200
// @Failure 400000 操作失敗
// @router /tempRegion [put]
func (c *Controller) SetTempRegion() {
rsp := apis.Response{}
c.Data["json"] = &rsp
defer c.ServeJSON()
tmpcfg := conf.TempRegionConfigs{}
//將數據解碼 Marshal將數據編碼成json字符串
err := json.Unmarshal(c.Ctx.Input.RequestBody, &tmpcfg)
if err != nil {
rsp.Error(errors.ErrBadRequest, err.Error())
return
}
tmpcfg.ConvTemp2K()
//非使能項需要恢復到默認值,使能項判斷是否是區域
if !tmpcfg.Verify() {
rsp.Error(errors.ErrBadRequest, "Param verification failed")
return
}
err = config.SetConfig(tmpcfg)
if err != nil {
rsp.Error(errors.ErrOprFailed, err.Error())
return
}
rsp.Success()
}
// @Title 獲取測溫區域溫度值
// @Summary 獲取測溫區域溫度值
// @Description 獲取測溫區域溫度值,當id>0時獲取指定規則ID的溫度值
// @Param id query uint32 false "區域測溫序號ID"
// @Success 200 {object} []dsd.TempData
// @Failure 400300 獲取配置失敗
// @router /tempRegion/temp [get]
func (c *Controller) GetTempRegionTemp() {
rsp := apis.Response{}
c.Data["json"] = &rsp
defer c.ServeJSON()
data := blp.GetIns().GetRegionTempData()
id, _ := c.GetUint32("id", 0)
if id > 0 {
tmpdata := data[id-1]
tmpdata.ConvTemp2Std()
rsp.Success(tmpdata)
} else {
data.ConvTemp2Std()
rsp.Success(data)
}
}
I幀,P幀,B幀
I幀是關鍵幀,屬於幀內壓縮,和AVI的壓縮是一樣的。P是向前搜索,B是雙向搜索,它們都是基於I幀來壓縮數據。
I幀表示關鍵幀,你可以理解為這一幀畫面的完整保留;解碼時只需要本幀數據就可以完成(因為包含完整畫面)
P幀表示的是這一幀跟之前的一個關鍵幀(或P幀)的差別,解碼時需要用之前緩存的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,P幀沒有完整畫面數據,只有與前一幀的畫面差別的數據)
B幀是雙向差別幀,也就是B幀記錄的是本幀與前后幀的差別(具體比較復雜,有4種情況),換言之,要解碼B幀,不僅要取得之前的緩存畫面,還要解碼之后的畫面,通過前后畫面的與本幀數據的疊加取得最終的畫面。B幀壓縮率高,但是解碼時CPU會比較累~。
從上面的解釋看,我們知道I和P的解碼算法比較簡單,資源占用也比較少,I只要自己完成就行了,P呢,也只需要解碼器把前一個畫面緩存一下,遇到P時就使用之前緩存的畫面就好了,如果視頻流只有I和P,解碼器可以不管后面的數據,邊讀邊解碼,線性前進,大家很舒服。
但網絡上的電影很多都采用了B幀,因為B幀記錄的是前后幀的差別,比P幀能節約更多的空間,但這樣一來,文件小了,解碼器就麻煩了,因為在解碼時,不僅要用之前緩存的畫面,還要知道下一個I或者P的畫面(也就是說要預讀預解碼),而且,B幀不能簡單地丟掉,因為B幀其實也包含了畫面信息,如果簡單丟掉,並用之前的畫面簡單重復,就會造成畫面卡(其實就是丟幀了),並且由於網絡上的電影為了節約空間,往往使用相當多的B幀,B幀用的多,對不支持B幀的播放器就造成更大的困擾,畫面也就越卡。
一般平均來說,I的壓縮率是7(跟JPG差不多),P是20,B可以達到50,可見使用B幀能節省大量空間,節省出來的空間可以用來保存多一些I幀,這樣在相同碼率下,可以提供更好的畫質。
————————————————
版權聲明:本文為CSDN博主「Rachel-Zhang」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/abcjennifer/article/details/6577934