本文采用的 SRS 版本是 4.0-b8 , 下載下傳位址:github
本文開始講解 SRS 的入口檔案。SRS 源碼裡 其實有 3 個
main()
函數,分别在
srs_main_ingest_hls.cpp
,
srs_main_mp4_parser.cpp
,
srs_main_server.cpp
3 個檔案裡面,如圖:
不過
srs
可執行檔案,是
srs_main_server.cpp
生成的,是以先分析
srs_main_server.cpp
,其他兩個檔案不管。
main()
函數的流程圖如下:
main()
函數的内部邏輯實際上比較簡單,因為所有的操作都封裝在其他函數裡面。特别是
srs_thread_initialize()
跟
run_directly_or_daemon()
函數。
是以 main() 函數本文隻會提及一些重點,重點如下:
1,
srs_thread_initialize()
裡面有非常多的初始化操作,日志操作,配置檔案,等等,請看《SRS4.0源碼分析-srs_thread_initialize》。
2,
srs_assert(srs_is_little_endian());
,srs 隻支援小端序機器,大端序機器不支援。
3,用了大量的
GPERF
來檢測記憶體洩漏,具體請看 《SRS4.0源碼分析-記憶體洩漏檢測》。
3,
show_macro_features()
,這個函數列印 srs 支援哪些功能,例如 srt,dvr 是否支援。
4,
run_directly_or_daemon()
,此函數開始運作 SRS,可能在前台運作,也可能以守護程序運作。
相關閱讀:
1,《SRS流媒體伺服器基本流程》
TODO:
1,寫一篇文章講解
gperftools
的使用。
由于筆者的水準有限, 加之編寫的同時還要參與開發工作,文中難免會出現一些錯誤或者不準确的地方,懇請讀者批評指正。如果讀者有任何寶貴意見,可以加我微信 Loken1。QQ:2338195090。
推薦一個零聲學院免費公開課程,個人覺得老師講得不錯,分享給大家:
Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒體,CDN,P2P,K8S,Docker,TCP/IP,協程,DPDK等技術内容,立即學習