生活随笔
收集整理的這篇文章主要介紹了
                                
SRS流媒体服务器——单机环境搭建和源码目录介绍
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
 
                                
                            
                            
                            SRS流媒體服務(wù)器——單機(jī)環(huán)境搭建和源碼目錄介紹
 
 
1. 目錄
 
環(huán)境搭建源碼目錄介紹 
 
1. 環(huán)境搭建
 
srs官?:https://github.com/ossrs/srs碼云的源速度快:https://gitee.com/winlinvip/srs.oschina.gitgithub的源速度慢:https://github.com/ossrs/srs.git 
1. 獲取SRS
 
git clone https://gitee.com/winlinvip/srs.oschina.git srs.3.0-20200720
cd srs.3.0-20200720
#使?當(dāng)前最新的3.0版本
git checkout 3.0release
cd trunk
 
2. 編譯SRS
 
./configure && make
 
3. 編寫(xiě)SRS配置?件
 
詳細(xì)參考RTMP分發(fā),Delivery HLS,Delivery HTTP FLV。編輯 conf/srs.conf ,服務(wù)器啟動(dòng)時(shí)指定該配置?件(srs的conf?件夾有該?件)。 
listen              1935;
max_connections     1000;
srs_log_tank        file;
srs_log_file        ./objs/srs.log;
daemon              on;
http_api {enabled         on;listen          1985;
}
http_server {enabled         on;listen          8080;dir             ./objs/nginx/html;
}
stats {network         0;disk            sda sdb xvda xvdb;
}
vhost __defaultVhost__ {hls {enabled         on;hls_path ./objs/nginx/html;hls_fragment 10;hls_window 60;}http_remux {enabled     on;mount       [vhost]/[app]/[stream].flv;hstrs       on;}
}
 
4. 啟動(dòng)SRS
 
啟動(dòng)srs 
./objs/srs -c conf/srs.conf
 
顯示日志信息 
[2022-01-17 19:39:34.135][Trace][25751][0] XCORE-SRS/3.0.170(OuXuli)
[2022-01-17 19:39:34.135][Trace][25751][0] config parse complete
[2022-01-17 19:39:34.135][Trace][25751][0] you can check log by: tail -f ./objs/srs.log (@see https://github.com/ossrs/srs/wiki/v1_CN_SrsLog)
[2022-01-17 19:39:34.135][Trace][25751][0] please check SRS by: ./etc/init.d/srs status
 
確認(rèn)是否已經(jīng)正常啟動(dòng) 
root@iZj40xj4xmw74sZ:~/srs/srs.3.0-20200720/trunk# ps -ef | grep srs
root     25753     1  0 19:39 pts/0    00:00:00 ./objs/srs -c conf/srs.conf      # 表示啟動(dòng)成功
root     25755 13681  0 19:39 pts/0    00:00:00 grep --color=auto srs
 
安全退出正在運(yùn)?的srs 
sudo kill -SIGQUIT srs_pid
 
默認(rèn)是后臺(tái)啟動(dòng)的?式,如果是要?便GDB調(diào)試則需要修改配置?件為前臺(tái)啟動(dòng)。 
listen              1935;
max_connections     1000;
#srs_log_tank        file;
#srs_log_file        ./objs/srs.log;
daemon              off;
srs_log_tank 	   console;
http_api {enabled         on;listen          1985;
}
http_server {enabled         on;listen          8080;dir             ./objs/nginx/html;
}
stats {network         0;disk            sda sdb xvda xvdb;
}
vhost __defaultVhost__ {hls {enabled         on;hls_path ./objs/nginx/html;hls_fragment 10;hls_window 60;}http_remux {enabled     on;mount       [vhost]/[app]/[stream].flv;hstrs       on;}
}
 
2. 源碼目錄介紹
 
trunk?錄
 src下的源碼
 app 
├── app
│ ├── srs_app_async_call.cpp
│ ├── srs_app_async_call.hpp 可以?來(lái)執(zhí)?異步任務(wù),通過(guò)execute()函數(shù) push任務(wù),然后在cycle()執(zhí)?
│ ├── srs_app_bandwidth.cpp
│ ├── srs_app_bandwidth.hpp 提供帶寬測(cè)試接?
│ ├── srs_app_caster_flv.cpp
│ ├── srs_app_caster_flv.hpp ?持POST?個(gè)flv流到服務(wù)器,類似相當(dāng)于RTMP的publish
│ ├── srs_app_config.cpp
│ ├── srs_app_config.hpp 讀取配置?件
│ ├── srs_app_conn.cpp
│ ├── srs_app_conn.hpp srs的基本連接,每個(gè)連接對(duì)應(yīng)?個(gè)協(xié)程,所有的連接都被管理
│ ├── srs_app_coworkers.cpp
│ ├── srs_app_coworkers.hpp SrsCoWorkers For origin cluster
│ ├── srs_app_dash.cpp
│ ├── srs_app_dash.hpp SrsDash 流媒體DASH業(yè)務(wù) The MPEG-DASH encoder, transmux RTMP to DASH.
│ ├── srs_app_dvr.cpp
│ ├── srs_app_dvr.hpp SrsDvr 錄制RTMP流程flv或者mp4?件
│ ├── srs_app_edge.cpp
│ ├── srs_app_edge.hpp SrsEdgeRtmpUpstream 邊緣節(jié)點(diǎn)業(yè)務(wù),?如從源站拉流到邊緣,邊緣回溯到源站
│ ├── srs_app_empty.cpp
│ ├── srs_app_empty.hpp 沒(méi)有內(nèi)容
│ ├── srs_app_encoder.cpp
│ ├── srs_app_encoder.hpp SrsEncoder 可以使?多個(gè)ffmpeg來(lái)轉(zhuǎn)換指定的流,最終調(diào)?SrsFFMPEG來(lái)轉(zhuǎn)流
│ ├── srs_app_ffmpeg.cpp
│ ├── srs_app_ffmpeg.hpp SrsFFMPEG 使?ffmpeg來(lái)轉(zhuǎn)換流
│ ├── srs_app_forward.cpp
│ ├── srs_app_forward.hpp SrsForwarder 將流轉(zhuǎn)發(fā)到其他服務(wù)器
│ ├── srs_app_fragment.cpp
│ ├── srs_app_fragment.hpp SrsFragment 表示?個(gè)分?,如HLS分?、DVR分?或DASH分?。它是?個(gè)媒體?件,例如FLV或MP4,有持續(xù)時(shí)間。
│ ├── srs_app_hds.cpp
│ ├── srs_app_hds.hpp SrsHds 將RTMP轉(zhuǎn)成Adobe HDS流
│ ├── srs_app_heartbeat.cpp
│ ├── srs_app_heartbeat.hpp SrsHttpHeartbeat HHTP?跳
│ ├── srs_app_hls.cpp
│ ├── srs_app_hls.hpp SrsHls HLS業(yè)務(wù),Transmux RTMP stream to HLS(m3u8 and ts).
│ ├── srs_app_hourglass.cpp
│ ├── srs_app_hourglass.hpp SrsHourGlass 滴答tick的處理程序
│ ├── srs_app_http_api.cpp
│ ├── srs_app_http_api.hpp SrsHttpApi HTTP業(yè)務(wù)API
│ ├── srs_app_http_client.cpp
│ ├── srs_app_http_client.hpp 沒(méi)有內(nèi)容
│ ├── srs_app_http_conn.cpp
│ ├── srs_app_http_conn.hpp SrsHttpConn,HTTP連接,繼承于SrsConnection
│ ├── srs_app_http_hooks.cpp
│ ├── srs_app_http_hooks.hpp SrsHttpHooks HTTP勾?,HTTP回調(diào)API
│ ├── srs_app_http_static.cpp
│ ├── srs_app_http_static.hpp SrsHttpStaticServer HTTP靜態(tài)服務(wù)器實(shí)例,為HTTP靜態(tài)?件和FLV/MP4視頻點(diǎn)播服務(wù)
│ ├── srs_app_http_stream.cpp
│ ├── srs_app_http_stream.hpp SrsHttpStreamServer HTTP直播流服務(wù),?持FLV/TS/MP3/AAC流
│ ├── srs_app_ingest.cpp
│ ├── srs_app_ingest.hpp SrsIngester攝取?件/流/設(shè)備,?FFMPEG編碼(可選), 通過(guò)RTMP推送到SRS(或其他RTMP服務(wù)器)
│ ├── srs_app_listener.cpp
│ ├── srs_app_listener.hpp SrsTcpListener SrsUdpListener TCP/UDP監(jiān)聽(tīng)器
│ ├── srs_app_log.cpp
│ ├── srs_app_log.hpp SrsFastLog ?志
│ ├── srs_app_mpegts_udp.cpp
│ ├── srs_app_mpegts_udp.hpp SrsMpegtsOverUdpThe mpegts over udp stream caster
│ ├── srs_app_ng_exec.cpp
│ ├── srs_app_ng_exec.hpp SrsNgExec
│ ├── srs_app_pithy_print.cpp
│ ├── srs_app_pithy_print.hpp SrsPithyPrint 收集信息,然后打印
│ ├── srs_app_process.cpp
│ ├── srs_app_process.hpp SrsProcess啟動(dòng)和停?進(jìn)程,當(dāng)被終?時(shí)調(diào)?cycle重新啟動(dòng)進(jìn)程
│ ├── srs_app_recv_thread.cpp
│ ├── srs_app_recv_thread.hpp SrsHttpRecvThread HTTP數(shù)據(jù)讀取,SrsPublishRecvThread推流數(shù)據(jù)讀取,SrsQueueRecvThread從隊(duì)列讀取;SrsRecvThread封裝的協(xié)程
│ ├── srs_app_refer.cpp
│ ├── srs_app_refer.hpp SrsRefer
│ ├── srs_app_reload.cpp
│ ├── srs_app_reload.hpp ISrsReloadHandler 重新讀取配置?件的處理
│ ├── srs_app_rtmp_conn.cpp
│ ├── srs_app_rtmp_conn.hpp SrsRtmpConn RTMP連接
│ ├── srs_app_rtsp.cpp
│ ├── srs_app_rtsp.hpp SrsRtpConn RTSP連接,SrsRtspCaster RTSP業(yè)務(wù)
│ ├── srs_app_security.cpp
│ ├── srs_app_security.hpp SrsSecurity 安全限制,主要是限制url
│ ├── srs_app_server.cpp
│ ├── srs_app_server.hpp SrsServer SRS服務(wù),對(duì)應(yīng)的rtmp、rtsp、http-flv等等業(yè)務(wù)在這?啟動(dòng)
│ ├── srs_app_source.cpp
│ ├── srs_app_source.hpp SrsSource 對(duì)應(yīng)?個(gè)源,?持多個(gè)SrsConsumer來(lái)拉流,SrsSourceManager管理源, SrsMetaCache?于源緩存Meta數(shù)據(jù),SrsConsumer源的消費(fèi)者,SrsGopCache GOP緩存
│ ├── srs_app_statistic.cpp
│ ├── srs_app_statistic.hpp SrsStatistic流統(tǒng)計(jì)
│ ├── srs_app_st.cpp
│ ├── srs_app_st.hpp SrsSTCoroutine協(xié)程相關(guān)
│ ├── srs_app_thread.cpp
│ ├── srs_app_thread.hpp SrsCoroutineManager協(xié)程管理
│ ├── srs_app_utility.cpp
│ └── srs_app_utility.hpp ?具類:SrsPlatformInfo、SrsNetworkDevices、SrsMemInfo、SrsDiskStat等等
 
core 
│ ├── srs_core_autofree.cpp
│ ├── srs_core_autofree.hpp 通過(guò)棧上的?式構(gòu)建?動(dòng)釋放堆申請(qǐng)的對(duì)象,這個(gè)設(shè)計(jì)還是?常值得我們學(xué)習(xí)
│ ├── srs_core.cpp
│ ├── srs_core.hpp 版本相關(guān)的?些信息
│ ├── srs_core_mem_watch.cpp
│ ├── srs_core_mem_watch.hpp 內(nèi)存監(jiān)測(cè)接?
│ ├── srs_core_performance.cpp
│ ├── srs_core_performance.hpp 性能測(cè)試相關(guān)
│ ├── srs_core_time.cpp
│ ├── srs_core_time.hpp 時(shí)間單位相關(guān)
│ ├── srs_core_version3.cpp
│ └── srs_core_version3.hpp 版本信息
 
kernel // ?視頻格式相關(guān)的 
│ ├── srs_kernel_aac.cpp
│ ├── srs_kernel_aac.hpp SrsAacTransmuxer 合成AAC?頻流,帶ADTS header
│ ├── srs_kernel_balance.cpp
│ ├── srs_kernel_balance.hpp SrsLbRoundRobin負(fù)載均衡,?于邊緣節(jié)點(diǎn)拉流和其他多個(gè)服務(wù)器的功能
│ ├── srs_kernel_buffer.cpp
│ ├── srs_kernel_buffer.hpp SrsBuffer讀取字節(jié)的實(shí)?類
│ ├── srs_kernel_codec.cpp
│ ├── srs_kernel_codec.hpp 編碼器相關(guān),包括視頻和?頻,?常核?的?件;SrsFlvVideo?來(lái)檢測(cè)FLV的video tag對(duì)應(yīng)內(nèi)容;SrsFlvAudio?來(lái)檢測(cè)FLV的audio tag對(duì)應(yīng)內(nèi)容;SrsMaxNbSamples256表示video最?的NALUS個(gè)數(shù),audio最?的packet數(shù)量;SrsFrame存儲(chǔ)幀,SrsAudioFrame 存儲(chǔ)AAC幀,SrsVideoFrame存儲(chǔ)視頻幀;SrsFormat編碼器格式,包含了?個(gè)或者多個(gè)流,?如為RTMPformat時(shí),包含?個(gè)視頻和?個(gè)?頻幀。先猜測(cè)推流時(shí)的數(shù)據(jù)實(shí)例是保存在SrsFormat?
│ ├── srs_kernel_consts.cpp
│ ├── srs_kernel_consts.hpp SRS的常量定義,?如播放的標(biāo)記#define SRS_CONSTS_LOG_PLAY "PLA";發(fā)布的標(biāo)記#define SRS_CONSTS_LOG_CLIENT_PUBLISH "CPB";SRS_CONSTS_HTTP_XXX等HTTP響應(yīng)碼;SRS_CONSTS_RTSP_XXX響應(yīng)碼等等。
│ ├── srs_kernel_error.cpp
│ ├── srs_kernel_error.hpp 返回值常量定義,ERROR_XXX;SrsCplxError 異常類
│ ├── srs_kernel_file.cpp
│ ├── srs_kernel_file.hpp ?件的讀寫(xiě),SrsFileWriter?件寫(xiě)?器,SrsFileReader?件讀取器
│ ├── srs_kernel_flv.cpp
│ ├── srs_kernel_flv.hpp FLV SrsFlvDecoder解析,SrsFlvTransmuxer將RTMP轉(zhuǎn)成FLV流;SrsSharedPtrMessage對(duì)應(yīng)RTMP的消息
│ ├── srs_kernel_io.cpp
│ ├── srs_kernel_io.hpp IO讀寫(xiě)接?類
│ ├── srs_kernel_log.cpp
│ ├── srs_kernel_log.hpp ?志相關(guān)
│ ├── srs_kernel_mp3.cpp
│ ├── srs_kernel_mp3.hpp SrsMp3Transmuxer將RTMP轉(zhuǎn)成MP3流
│ ├── srs_kernel_mp4.cpp
│ ├── srs_kernel_mp4.hpp SrsMp4Encoder MP4復(fù)?器;
│ ├── srs_kernel_stream.cpp
│ ├── srs_kernel_stream.hpp SrsSimpleStream?vector實(shí)現(xiàn)的簡(jiǎn)單的字節(jié)append類,主要在hls和http中使?,將來(lái)需要進(jìn)?改進(jìn)。
│ ├── srs_kernel_ts.cpp
│ ├── srs_kernel_ts.hpp SrsTsTransmuxer將RTMP流轉(zhuǎn)成http-ts流,該?件實(shí)現(xiàn)了ts格式相關(guān)的接?
│ ├── srs_kernel_utility.cpp
│ └── srs_kernel_utility.hpp ?具函數(shù),?如bool srs_string_ends_with(std::string str, std::string flag)
 
libs 
│ ├── srs_lib_bandwidth.cpp
│ ├── srs_lib_bandwidth.hpp SrsBandwidthClient srs-librtmp 客戶端帶寬統(tǒng)計(jì)
│ ├── srs_librtmp.cpp
│ ├── srs_librtmp.hpp srs提供的客戶端rtmp庫(kù)
│ ├── srs_lib_simple_socket.cpp
│ └── srs_lib_simple_socket.hpp SimpleSocketStream rtmp客戶端的socket封裝
 
main 
│ ├── srs_main_ingest_hls.cpp 拉取hls發(fā)布到rtmp流媒體服務(wù)器
│ ├── srs_main_mp4_parser.cpp MP4 box解析
│ └── srs_main_server.cpp srs流媒體服務(wù)器主??
 
protocol 流媒體協(xié)議相關(guān)的協(xié)議都在這? 
│ ├── srs_http_stack.cpp
│ ├── srs_http_stack.hpp HTTP協(xié)議
│ ├── srs_protocol_amf0.cpp
│ ├── srs_protocol_amf0.hpp Amf0解析
│ ├── srs_protocol_format.cpp
│ ├── srs_protocol_format.hpp SrsRtmpFormat繼承了SrsFormat, 代表RTMP格式
│ ├── srs_protocol_io.cpp
│ ├── srs_protocol_io.hpp 協(xié)議數(shù)據(jù)讀取的IO封裝接?,?如ISrsProtocolReadWriter
│ ├── srs_protocol_json.cpp
│ ├── srs_protocol_json.hpp json類
│ ├── srs_protocol_kbps.cpp
│ ├── srs_protocol_kbps.hpp ?特率統(tǒng)計(jì)相關(guān)
│ ├── srs_protocol_stream.cpp
│ ├── srs_protocol_stream.hpp 流讀取,從ISrsReader讀取數(shù)據(jù)到buffer??
│ ├── srs_protocol_utility.cpp
│ ├── srs_protocol_utility.hpp 協(xié)議?具函數(shù)
│ ├── srs_raw_avc.cpp
│ ├── srs_raw_avc.hpp SrsRawH264Stream H264裸流解析,SrsRawAacStream AAC裸流解析
│ ├── srs_rtmp_handshake.cpp
│ ├── srs_rtmp_handshake.hpp RTMP握?,包括SrsSimpleHandshake和SrsComplexHandshake
│ ├── srs_rtmp_msg_array.cpp
│ ├── srs_rtmp_msg_array.hpp SrsMessageArray消息數(shù)組
│ ├── srs_rtmp_stack.cpp
│ ├── srs_rtmp_stack.hpp RTMP協(xié)議棧
│ ├── srs_rtsp_stack.cpp
│ └── srs_rtsp_stack.hpp RTSP協(xié)議棧
 
service 
│ ├── srs_service_conn.cpp
│ ├── srs_service_conn.hpp ISrsConnection HTTP/RTMP/RTSP等對(duì)象的連接接?;IConnectionManager管理連接接?
│ ├── srs_service_http_client.cpp
│ ├── srs_service_http_client.hpp SrsHttpClient HTTP客戶端
│ ├── srs_service_http_conn.cpp11
│ ├── srs_service_http_conn.hpp HTTP連接 SrsHttpParser,SrsHttpMessage,SrsHttpResponseWriter,SrsHttpResponseReader
│ ├── srs_service_log.cpp
│ ├── srs_service_log.hpp SrsConsoleLog?志相關(guān)
│ ├── srs_service_rtmp_conn.cpp
│ ├── srs_service_rtmp_conn.hpp SrsBasicRtmpClient RTMP客戶端類
│ ├── srs_service_st.cpp
│ ├── srs_service_st.hpp 對(duì)st-thread協(xié)程的封裝
│ ├── srs_service_utility.cpp
│ └── srs_service_utility.hpp service組件的?具類
 
utest 
├── srs_utest_amf0.cpp
├── srs_utest_amf0.hpp
├── srs_utest_app.cpp
├── srs_utest_app.hpp
├── srs_utest_avc.cpp
├── srs_utest_avc.hpp
├── srs_utest_config.cpp
├── srs_utest_config.hpp
........... 還有其他utest?件,這?忽略
 
8 directories, 203 files
                            總結(jié)
                            
                                以上是生活随笔為你收集整理的SRS流媒体服务器——单机环境搭建和源码目录介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
                            
                            
                                如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。