天天看點

SRS4.0源碼分析-main

本文采用的 SRS 版本是 4.0-b8 , 下載下傳位址:github

本文開始講解 SRS 的入口檔案。SRS 源碼裡 其實有 3 個 

main()

 函數,分别在 

srs_main_ingest_hls.cpp

 ,

srs_main_mp4_parser.cpp

srs_main_server.cpp

 3 個檔案裡面,如圖:

SRS4.0源碼分析-main

不過 

srs

 可執行檔案,是

srs_main_server.cpp

 生成的,是以先分析 

srs_main_server.cpp

,其他兩個檔案不管。

main()

 函數的流程圖如下:

SRS4.0源碼分析-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等技術内容,立即學習