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