前言
前面寫了一篇文章,利用Nginx和nginx-rtmp-module 快速搭建視頻直播服務的,并沒有實現多人多頻道輸入輸出和權限控制。
本文是在之前文章的基礎上繼續的
原文地址:不會搭建視頻直播服務?教你十分鐘實現視頻推流拉流服務
開發環境
intellij idea JDK1.8 spring boot 2.1.5.RELEASE nginx 視頻推流拉流服務 (ps接上篇文章)
配置nginx-rtmp-module 模塊
1、參數publish_notify
涉及publish_notify默認是off的,主要涉及推送的過程中一些事件。
開啟publish_notify即可進行Notify的配置操作。
publish_notify on;
2、Notify的配置
Notify的配置相關是涉及直播的事件并執行回調代碼。
比如:推流鏈接、直播開啟、直播結束狀態,然后異步調用http的鏈接,進行一些邏輯的處理。
主要的配置參數有下面這些:
on_connect on_play on_publish on_done on_play_done on_publish_done on_record_done on_update ......
從上面的參數可以看出,能夠觸發連接、直播、輸出、結束等等
比如,當觸發推流的時候,通過配置
on_publish http://www.example.com/uri
進行權限控制,接收相關參數并進行控制,如果用戶不存在,則不允許推流。
3、多頻道輸入輸出
多個人有不同的推流和直播地址,就涉及了直播參數,而實際上,各大平臺直播的時候,除了地址,都有一個直播密鑰或者是直播碼。
以OBS舉例,串流類型選擇自定義流媒體服務器,然后會出現一個URL和流密鑰。

而流密鑰就是實現多頻道輸入輸出的重點。
4、配置rtmp Publish
在 rtmp -server -live 下添加如下配置
publish_notify on; on_publish http://127.0.0.1:8080/video/auth; #授權驗證地址 on_publish_done http://127.0.0.1:8080/video/done;
在之前文章的配置基礎上,添加上述配置,如下圖

現在nginx 的相關配置已經完成了,輸入如下命令啟動nginx服務
nginx.exe -c conf/nginx-win-rtmp.conf
接下來配置鑒權服務
鑒權服務
基于spring boot 簡單實現了鑒權功能,核心代碼如下,

上述代碼只是做了簡單的密碼校驗和主播下線功能,并未從數據庫查詢相關用戶信息,只要大家弄懂原理,基于此還可以實現很多有趣的功能,項目已上傳至git,有興趣的小伙伴,可以關注后私信關鍵字“視頻鑒權服務”獲取
git獲取代碼后啟動Spring boot項目

打開obs推流軟件,設置服務器地址和串流密鑰,如下圖

流密鑰的格式是:8888?password=123456,可以看出這個非常像url的get參數配置,8888就是房間的名稱,而passWord就是密碼。
為什么沒有name=8888
- 因為name是rtmp on_publish的默認參數,name是不能更改的。
自定義參數
- 除了name不能更改之外,其他的都是可以自定義參數的
- 比如passWord=123456&check=123456&userId=1001這樣的

點擊開始推流,控制臺打印鑒權信息
點擊停止推流,控制臺打印信息,如下圖

推流和停止推流均正常進入相應方法,基于以上的知識點,后續可以開發直播房間列表,主播開播提醒等功能,感興趣的小伙伴,趕緊自己動手實踐吧