日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

音视频开发为什么要学SRS流媒体服务器

發(fā)布時間:2024/3/12 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 音视频开发为什么要学SRS流媒体服务器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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í)踐:

  • 看wiki
  • 通過gdb跟蹤代碼
  • 結(jié)合gdb分析srs框架
  • 結(jié)合流媒體協(xié)議分析RTMP/HLS/HTTP-FLV/RTSP/WebRTC等的具體實(shí)現(xiàn)
  • 以官方的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)

  • 使用gdb啟動:gdb ./objs/srs
  • 設(shè)置參數(shù):set args -c ./conf/rtmp.conf
  • 打斷點(diǎn):建議先在main函數(shù)打斷點(diǎn),然后run到main函數(shù)等so加載后再在SrsConfig::get_listens打斷點(diǎn),否則出現(xiàn)下面紅色框的問題
  • ?

  • 在main打斷點(diǎn)后,run起來停在main函數(shù)
  • 然后停在了main函數(shù),此時可以斷點(diǎn)
  • 還是報(bào)出來紅色框的問題,那我們可以按代碼位置下斷點(diǎn),在srs_app_config.cpp:3983下斷點(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。