音视频开发为什么要学SRS流媒体服务器
1 SRS是什么
官方定義:SRS是一個流媒體集群,支持RTMP/HLS/HTTP-FLV/RTSP/DASH/WebRTC/SRT/GB28181,高效、穩定、易用,簡單而快樂。有將近10k star(包括https://github.com/ossrs/srs鏈接)
官網穩定版:https://github.com/ossrs/srs?(建議大家學習使用該版本)
開發版本:https://github.com/winlinvip/srs?(該版本供開發者使用,不建議小白用該版本)
SRS基本資料:?Wiki地址,里面有上百篇詳細文檔,第一入手資料:https://github.com/ossrs/srs/wiki?Git分支,可以看源碼:https://github.com/winlinvip/srs?官網,有安裝包,客戶端供大家測試體驗:http://www.ossrs.net/srs.release/releases/
2 SRS能夠解決什么問題
2.1 工程案例
SRS支持的特性非常多,傳統的RTMP直播應用不用多說,我們這里說一些新的趨勢。
案例1:傳統的視頻監控客戶端都是Windows pc桌面客戶端,現在較多的公司都需要實現通過web去查看遠程的視頻監控,此時可以通過RTSP/GB28181推流推送到SRS流媒體服務器,然后通過RTMP或者HTTP-FLV協議進行拉流查看遠程的攝像頭。
案例2:傳統的推流端都需要安裝應用軟件才能實現推流,但是目前也是有web化的趨勢,需要通過瀏覽器網頁將音視頻畫面推送給聽眾,此時就可以通過WebRTC推流到SRS流媒體服務器,然后觀眾通過RTMP、HTTP-FLV等方式觀看直播。
2.2 技術儲備
作為一個流媒體人,需要精通RTMP/HLS/HTTP-FLV/RTSP/DASH/WebRTC等協議,怎么精通呢?
- 光看協議手冊是沒有用的,一定要結合代碼
- 光百度找文章也是沒有用的,一定要自己去實踐
建議大家深入分析SRS源碼:
- SRS的源碼邏輯非常清晰
- 官網github也提供了詳細的wiki文檔資料和大量的issue
- 大量的issue都是工程化中遇到的問題,以及如何解決,對于我們面試和工作開發都非常有幫助
- 支持forward模式小規模集群和edge模式大規模集群
大家需要特別注意的一個點是,在學習SRS源碼的時候,百度找SRS文章絕對只是輔助,并不能實際解決我們怎么學習SRS,我是建議大家:(1)閱讀srs官方的wiki;(2)使用gdb等調試工具跟蹤代碼。 具體的學習方法可以參考 4節 SRS如何學習。
3 SRS是否有商業應用
有些朋友擔心SRS能否在商業項目中應用,有沒有商業用,去招聘網站搜一搜,看看大公司在招聘的時候是否需要掌握該服務器就知道了,比如在boss直聘輸入SRS,我這里只列了3家公司的招聘需求。
?
?
從招聘結果可以看出來,當我們如果應聘的是流媒體相關崗位時,掌握SRS流媒體是一個必須項或者加分項目。這也說明SRS流媒體服務器在實際開發中的需求。
4 SRS如何學習
學習SRS流媒體服務器,建議少百度,多看官方wiki和自己動手實踐:
以官方的RTMP部署為例:https://github.com/ossrs/srs/wiki/v1_CN_SampleRTMP
CSDN站內私信我,或文末加入免費領取最新最全C++/音視頻開發學習提升資料,內容包括(C/C++,Linux?服務器開發,FFmpeg?,webRTC?,rtmp?,hls?,rtsp?,ffplay?,srs)以及音視頻學習路線圖等等。
conf/rtmp.conf
listen 1935;
max_connections 1000;
vhost?defaultVhost?{
}
這里涉及到了端口1935,我們從這里也可以推斷出,該配置文件配置了端口1935,那RTMP是要監聽該端口。 要監聽該端口則一定會去讀取listen這個字段。比如我們在source insight 搜索"listen"
從這里我們可以看到SrsConfig這個類,有去讀取"listen"字段,實際上如果我們點開SrsConfig,我們可以很容易的發現所有的配置文件都是由該類去讀取。 我們再進一步,只關注 get("listen")這樣的字段,查找到 vector SrsConfig::get_listens() { std::vector ports; SrsConfDirective* conf =?root->get("listen"); // 從配置文件也可以出來,listen字段是在root if (!conf) { return ports; } for (int i = 0; i < (int)conf->args.size(); i++) { ports.push_back(conf->args.at(i)); } return ports; } 我們在就可以通過gdb在SrsConfig::get_listens打斷點
?
?
然后輸入r重啟程序,按c直到進入rs_app_config.cpp:3983斷點,再按bt可以看到我們讀取配置文件,監聽rtmp port的調用棧。
但此時如果我們去看調用棧,發現它只是檢測配置文件是否正確,我們可以再繼續輸入c,然后輸入bt看調用棧,直到我們看到在調用看到一些listen的字眼。
此時可以根據調用棧分析srs監聽端口的框架流程
可以定位到src/app/srs_app_server.cpp:1246去查看
此時可以找到rtmp的監聽流程。
以上只是小試牛刀,對于srs框架分析我這里還錄制了一些視頻,大家可以下方加入獲取。
?
?
?
?
總結
以上是生活随笔為你收集整理的音视频开发为什么要学SRS流媒体服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: snowboy嵌入式_jetson na
- 下一篇: Azure基础:什么是云计算(2) NI