lalserver是純Golang開發的流媒體伺服器。目前已支援RTMP, RTSP(RTP/RTCP), HLS, HTTP[S]/WebSocket[S]-FLV/TS協議。
目前已支援多種鑑權防盜鏈的方式。
▌ 方式一. 固定值的鑑權引數
首先,修改配置檔案,如下:
"conf_version": "v0.2.6",
...
"simple_auth": {
"key": "q191201771", // 私有key,計算鑑權引數時使用
"dangerous_lal_secret": "pengrl", // 後門鑑權引數,所有的流可通過該引數值鑑權
"pub_rtmp_enable": true, // rtmp推流是否開啟鑑權,true為開啟鑑權,false為不開啟鑑權
"sub_rtmp_enable": true, // rtmp拉流是否開啟鑑權
"sub_httpflv_enable": true, // httpflv拉流是否開啟鑑權
"sub_httpts_enable": true, // httpts拉流是否開啟鑑權
"pub_rtsp_enable": true, // rtsp推流是否開啟鑑權
"sub_rtsp_enable": true, // rtsp拉流是否開啟鑑權
"hls_m3u8_enable": true // m3u8拉流是否開啟鑑權
}
...
方式一和方式二的配置都在配置項simple_auth
下管理:
pub
和sub
開頭的欄位決定了各協議是否開啟鑑權dangerous_lal_secret
為鑑權引數的值key
在下面方式二中使用,這裡暫時不關心
舉例,沒開啟鑑權功能時,推rtmp流的url是rtmp://127.0.0.1:8080/live/test110
開啟後,業務方推流url是變為rtmp://127.0.0.1:8080/live/test110?lal_secret=pengrl
其中lal_secret
就是鑑權簽名引數,名字是固定的,值也是固定的,對應配置檔案中dangerous_lal_secret
的值。
該鑑權方式,所有流都使用同一個鑑權引數值。
▌ 方式二. MD5簽名的鑑權引數
首先,依然是修改配置檔案(參見上面方式一中的描述):
pub
和sub
等開頭的欄位決定了各協議是否開啟鑑權key
用來做MD5簽名
舉例,沒開啟鑑權功能時,推rtmp流的url是rtmp://127.0.0.1:8080/live/test110
開啟後,業務方推流url是變為rtmp://127.0.0.1:8080/live/test110?lal_secret=700997e1595a06c9ffa60ebef79105b0
其中lal_secret
就是鑑權簽名引數,名字是固定的,值的計算公式是md5(配置檔案中的simple_auth::key + 流名稱)
上面的例子對應的計算方式是md5("q191201771test110")
Go、c++程式碼以及命令列、網頁工具如何計算MD5見:使用工具或程式碼生成MD5 - 仁亮筆記
該鑑權模式下,不同的流名稱對應不同的鑑權引數。
注意,方式一和方式二可同時使用。lal_secret
的值滿足任意一種計算方式即可鑑權通過。
▌ 方式三. 與業務方服務互動,自由定製鑑權方式
大體的邏輯是,lalserver在接收到推流或者拉流請求時,使用http回撥的方式通知業務方的服務。
業務方的服務根據自身的邏輯,判定這個推流或者拉流請求是否合法。
如果不合法,使用lalserver提供的http api介面將該請求踢掉。
相關文件: