如何實現真正安全的RTMP防盜播整體加解密方案
- 2019 年 10 月 6 日
- 筆記
好多企業或開發者聯繫大牛直播SDK,希望我們能夠提供一套整體的音視頻加密、解密方案,能通過公網標準服務器,高效、安全可靠的實現加密數據的傳輸、播放。
首先介紹下常規的解決方案:
1. rtmp防盜播當前常用做法是給rtmp url增加相關參數,rtmp server根據參數做驗證,缺陷是沒有對傳輸的音視頻數據包做加密,只要截取到rtmp包解析後就可以播放;
2. rtmps和rtmpe:有些服務器支持的不好,rtmps需要證書,rtmpe也不好擴展使用國密sm4。
為了解決上述這些問題,可以在音頻視頻編碼數據上進行一些擴展,rtmp server實現者只要實現rtmp協議就好, 不需要進一步去了解音視頻編碼的細節,我們可以在具體編碼數據上擴展。
為此,我們發佈了基於AES音視頻逐幀數據加密整體解決方案,第三方即便是破解了URL,也沒法播放,通過抓包工具抓取到數據,也沒法正常顯示。
此方案的難點是需要了解音視頻編碼相關的細節,才能進行適當的擴展。優點是常用的rtmp server可以直接支持,通用性很強。只需要改推送端和播放端就好。
接下來我們實際測試下這個方案加、解密效果:
首先下載可以做rtmp加密的推送端和播放端( github ), 打開windows推送端SmartPublisherDemo.exe:

選擇好音視頻採集源等配置(按圖上紅線標的方式配置),然後點擊"配置加密"按鈕:

可以選擇只加密視頻,只加密音頻和音視頻都加密,然後輸入密鑰(由於是測試輸入一個很簡單的密鑰,實際使用請輸入128位,192位或者256位密鑰). 輸入完成後點擊"確定"按鈕.

再點擊推送按鈕,就會生成播放地址,拷貝播放地址,打開"SmartPlayer.exe":

輸入播放地址,點擊播放就會彈出密鑰輸入框,輸入密鑰,點擊"確定"按鈕就可看到圖像:

至此一個完整的rtmp加密方案測試完畢。
上述demo目前使用安全性和通用性都比較好的aes對稱加密算法,支持aes 128, 192, 256. 也可很方便擴展增加國密sm4等更多加密算法。 目前也支持安卓和ios平台. 上述demo支持rtmp h264, rtmp h265, rtmp aac, rtmp speex, rtmp pcma, rtmp pcmu加密。也支持拉rtsp視頻轉rtmp加密推送。