SRS流媒体服务器——单机环境搭建和源码目录介绍


1. 目录

  1. 环境搭建
  2. 源码目录介绍

1. 环境搭建

  1. srs官⽹:https://github.com/ossrs/srs
  2. 码云的源速度快:https://gitee.com/winlinvip/srs.oschina.git
  3. github的源速度慢: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
#使⽤当前最新的3.0版本
git checkout 3.0release
cd trunk

2. 编译SRS

./configure && make

3. 编写SRS配置⽂件

  1. 详细参考RTMP分发,Delivery HLS,Delivery HTTP FLV。
  2. 编辑 conf/srs.conf ,服务器启动时指定该配置⽂件(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. 启动SRS

  1. 启动srs
./objs/srs -c conf/srs.conf
  1. 显示日志信息
[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
  1. 确认是否已经正常启动
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      # 表示启动成功
root     25755 13681  0 19:39 pts/0    00:00:00 grep --color=auto srs
  1. 安全退出正在运⾏的srs
sudo kill -SIGQUIT srs_pid
  1. 默认是后台启动的⽅式,如果是要⽅便GDB调试则需要修改配置⽂件为前台启动。
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. 源码目录介绍

  1. trunk⽬录
  2. src下的源码
  3. app
├── app
│ ├── srs_app_async_call.cpp
│ ├── srs_app_async_call.hpp 可以⽤来执⾏异步任务,通过execute()函数 push任务,然后在cycle()执⾏
│ ├── srs_app_bandwidth.cpp
│ ├── srs_app_bandwidth.hpp 提供带宽测试接⼝
│ ├── srs_app_caster_flv.cpp
│ ├── srs_app_caster_flv.hpp ⽀持POST⼀个flv流到服务器,类似相当于RTMP的publish
│ ├── srs_app_config.cpp
│ ├── srs_app_config.hpp 读取配置⽂件
│ ├── srs_app_conn.cpp
│ ├── srs_app_conn.hpp srs的基本连接,每个连接对应⼀个协程,所有的连接都被管理
│ ├── srs_app_coworkers.cpp
│ ├── srs_app_coworkers.hpp SrsCoWorkers For origin cluster
│ ├── srs_app_dash.cpp
│ ├── srs_app_dash.hpp SrsDash 流媒体DASH业务 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 边缘节点业务,⽐如从源站拉流到边缘,边缘回溯到源站
│ ├── srs_app_empty.cpp
│ ├── srs_app_empty.hpp 没有内容
│ ├── srs_app_encoder.cpp
│ ├── srs_app_encoder.hpp SrsEncoder 可以使⽤多个ffmpeg来转换指定的流,最终调⽤SrsFFMPEG来转流
│ ├── srs_app_ffmpeg.cpp
│ ├── srs_app_ffmpeg.hpp SrsFFMPEG 使⽤ffmpeg来转换流
│ ├── srs_app_forward.cpp
│ ├── srs_app_forward.hpp SrsForwarder 将流转发到其他服务器
│ ├── srs_app_fragment.cpp
│ ├── srs_app_fragment.hpp SrsFragment 表示⼀个分⽚,如HLS分⽚、DVR分⽚或DASH分⽚。它是⼀个媒体⽂件,例如FLV或MP4,有持续时间。
│ ├── srs_app_hds.cpp
│ ├── srs_app_hds.hpp SrsHds 将RTMP转成Adobe HDS流
│ ├── srs_app_heartbeat.cpp
│ ├── srs_app_heartbeat.hpp SrsHttpHeartbeat HHTP⼼跳
│ ├── srs_app_hls.cpp
│ ├── srs_app_hls.hpp SrsHls HLS业务,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业务API
│ ├── srs_app_http_client.cpp
│ ├── srs_app_http_client.hpp 没有内容
│ ├── 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回调API
│ ├── srs_app_http_static.cpp
│ ├── srs_app_http_static.hpp SrsHttpStaticServer HTTP静态服务器实例,为HTTP静态⽂件和FLV/MP4视频点播服务
│ ├── srs_app_http_stream.cpp
│ ├── srs_app_http_stream.hpp SrsHttpStreamServer HTTP直播流服务,⽀持FLV/TS/MP3/AAC流
│ ├── srs_app_ingest.cpp
│ ├── srs_app_ingest.hpp SrsIngester摄取⽂件/流/设备,⽤FFMPEG编码(可选), 通过RTMP推送到SRS(或其他RTMP服务器)
│ ├── srs_app_listener.cpp
│ ├── srs_app_listener.hpp SrsTcpListener SrsUdpListener TCP/UDP监听器
│ ├── 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启动和停⽌进程,当被终⽌时调⽤cycle重新启动进程
│ ├── srs_app_recv_thread.cpp
│ ├── srs_app_recv_thread.hpp SrsHttpRecvThread HTTP数据读取,SrsPublishRecvThread推流数据读取,SrsQueueRecvThread从队列读取;SrsRecvThread封装的协程
│ ├── 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业务
│ ├── srs_app_security.cpp
│ ├── srs_app_security.hpp SrsSecurity 安全限制,主要是限制url
│ ├── srs_app_server.cpp
│ ├── srs_app_server.hpp SrsServer SRS服务,对应的rtmp、rtsp、http-flv等等业务在这⾥启动
│ ├── srs_app_source.cpp
│ ├── srs_app_source.hpp SrsSource 对应⼀个源,⽀持多个SrsConsumer来拉流,SrsSourceManager管理源, SrsMetaCache⽤于源缓存Meta数据,SrsConsumer源的消费者,SrsGopCache GOP缓存
│ ├── srs_app_statistic.cpp
│ ├── srs_app_statistic.hpp SrsStatistic流统计
│ ├── srs_app_st.cpp
│ ├── srs_app_st.hpp SrsSTCoroutine协程相关
│ ├── srs_app_thread.cpp
│ ├── srs_app_thread.hpp SrsCoroutineManager协程管理
│ ├── srs_app_utility.cpp
│ └── srs_app_utility.hpp ⼯具类:SrsPlatformInfo、SrsNetworkDevices、SrsMemInfo、SrsDiskStat等等
  1. core
│ ├── srs_core_autofree.cpp
│ ├── srs_core_autofree.hpp 通过栈上的⽅式构建⾃动释放堆申请的对象,这个设计还是⾮常值得我们学习
│ ├── srs_core.cpp
│ ├── srs_core.hpp 版本相关的⼀些信息
│ ├── srs_core_mem_watch.cpp
│ ├── srs_core_mem_watch.hpp 内存监测接⼝
│ ├── srs_core_performance.cpp
│ ├── srs_core_performance.hpp 性能测试相关
│ ├── srs_core_time.cpp
│ ├── srs_core_time.hpp 时间单位相关
│ ├── srs_core_version3.cpp
│ └── srs_core_version3.hpp 版本信息
  1. kernel // ⾳视频格式相关的
│ ├── srs_kernel_aac.cpp
│ ├── srs_kernel_aac.hpp SrsAacTransmuxer 合成AAC⾳频流,带ADTS header
│ ├── srs_kernel_balance.cpp
│ ├── srs_kernel_balance.hpp SrsLbRoundRobin负载均衡,⽤于边缘节点拉流和其他多个服务器的功能
│ ├── srs_kernel_buffer.cpp
│ ├── srs_kernel_buffer.hpp SrsBuffer读取字节的实⽤类
│ ├── srs_kernel_codec.cpp
│ ├── srs_kernel_codec.hpp 编码器相关,包括视频和⾳频,⾮常核⼼的⽂件;SrsFlvVideo⽤来检测FLV的video tag对应内容;SrsFlvAudio⽤来检测FLV的audio tag对应内容;SrsMaxNbSamples256表示video最⼤的NALUS个数,audio最⼤的packet数量;SrsFrame存储帧,SrsAudioFrame 存储AAC帧,SrsVideoFrame存储视频帧;SrsFormat编码器格式,包含了⼀个或者多个流,⽐如为RTMPformat时,包含⼀个视频和⼀个⾳频帧。先猜测推流时的数据实例是保存在SrsFormat?
│ ├── srs_kernel_consts.cpp
│ ├── srs_kernel_consts.hpp SRS的常量定义,⽐如播放的标记#define SRS_CONSTS_LOG_PLAY "PLA";发布的标记#define SRS_CONSTS_LOG_CLIENT_PUBLISH "CPB";SRS_CONSTS_HTTP_XXX等HTTP响应码;SRS_CONSTS_RTSP_XXX响应码等等。
│ ├── srs_kernel_error.cpp
│ ├── srs_kernel_error.hpp 返回值常量定义,ERROR_XXX;SrsCplxError 异常类
│ ├── srs_kernel_file.cpp
│ ├── srs_kernel_file.hpp ⽂件的读写,SrsFileWriter⽂件写⼊器,SrsFileReader⽂件读取器
│ ├── srs_kernel_flv.cpp
│ ├── srs_kernel_flv.hpp FLV SrsFlvDecoder解析,SrsFlvTransmuxer将RTMP转成FLV流;SrsSharedPtrMessage对应RTMP的消息
│ ├── srs_kernel_io.cpp
│ ├── srs_kernel_io.hpp IO读写接⼝类
│ ├── srs_kernel_log.cpp
│ ├── srs_kernel_log.hpp ⽇志相关
│ ├── srs_kernel_mp3.cpp
│ ├── srs_kernel_mp3.hpp SrsMp3Transmuxer将RTMP转成MP3流
│ ├── srs_kernel_mp4.cpp
│ ├── srs_kernel_mp4.hpp SrsMp4Encoder MP4复⽤器;
│ ├── srs_kernel_stream.cpp
│ ├── srs_kernel_stream.hpp SrsSimpleStream⽤vector实现的简单的字节append类,主要在hls和http中使⽤,将来需要进⾏改进。
│ ├── srs_kernel_ts.cpp
│ ├── srs_kernel_ts.hpp SrsTsTransmuxer将RTMP流转成http-ts流,该⽂件实现了ts格式相关的接⼝
│ ├── srs_kernel_utility.cpp
│ └── srs_kernel_utility.hpp ⼯具函数,⽐如bool srs_string_ends_with(std::string str, std::string flag)
  1. libs
│ ├── srs_lib_bandwidth.cpp
│ ├── srs_lib_bandwidth.hpp SrsBandwidthClient srs-librtmp 客户端带宽统计
│ ├── srs_librtmp.cpp
│ ├── srs_librtmp.hpp srs提供的客户端rtmp库
│ ├── srs_lib_simple_socket.cpp
│ └── srs_lib_simple_socket.hpp SimpleSocketStream rtmp客户端的socket封装
  1. main
│ ├── srs_main_ingest_hls.cpp 拉取hls发布到rtmp流媒体服务器
│ ├── srs_main_mp4_parser.cpp MP4 box解析
│ └── srs_main_server.cpp srs流媒体服务器主⼊⼝
  1. protocol 流媒体协议相关的协议都在这⾥
│ ├── srs_http_stack.cpp
│ ├── srs_http_stack.hpp HTTP协议
│ ├── 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 协议数据读取的IO封装接⼝,⽐如ISrsProtocolReadWriter
│ ├── srs_protocol_json.cpp
│ ├── srs_protocol_json.hpp json类
│ ├── srs_protocol_kbps.cpp
│ ├── srs_protocol_kbps.hpp ⽐特率统计相关
│ ├── srs_protocol_stream.cpp
│ ├── srs_protocol_stream.hpp 流读取,从ISrsReader读取数据到buffer⾥⾯
│ ├── srs_protocol_utility.cpp
│ ├── srs_protocol_utility.hpp 协议⼯具函数
│ ├── 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消息数组
│ ├── srs_rtmp_stack.cpp
│ ├── srs_rtmp_stack.hpp RTMP协议栈
│ ├── srs_rtsp_stack.cpp
│ └── srs_rtsp_stack.hpp RTSP协议栈
  1. service
│ ├── srs_service_conn.cpp
│ ├── srs_service_conn.hpp ISrsConnection HTTP/RTMP/RTSP等对象的连接接⼝;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⽇志相关
│ ├── srs_service_rtmp_conn.cpp
│ ├── srs_service_rtmp_conn.hpp SrsBasicRtmpClient RTMP客户端类
│ ├── srs_service_st.cpp
│ ├── srs_service_st.hpp 对st-thread协程的封装
│ ├── srs_service_utility.cpp
│ └── srs_service_utility.hpp service组件的⼯具类
  1. 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⽂件,这⾥忽略
  1. 8 directories, 203 files

SRS流媒体服务器——单机环境搭建和源码目录介绍相关推荐

  1. SRS流媒体服务器架构设计及源码分析丨音视频开发丨C/C++音视频丨Android开发丨嵌入式开发

    SRS流媒体服务器架构设计及源码分析 1.SRS流媒体服务器架构设计 2.协程-连接之间的关系 3.推流-转发-拉流之间的关系 4.如何手把手调试SRS源码 视频讲解如下,点击观看: SRS流媒体服务 ...

  2. SRS 4.0流媒体服务器开发环境搭建:包括推流、服务器配置、拉流测试

    SRS 4.0流媒体服务器入门系列 结合SRS官方Wiki以及本人对SRS的理解,推出<SRS 4.0流媒体服务器入门系列>,包括内容: SRS 4.0 开发环境搭建 SRS 4.0 配置 ...

  3. Spreadtrum_Android_8805和8810环境搭建和源码编译V1.0.1_Word文档

    目 录 附录A 修改记录 ii 第1章 Spreadtrum Android的环境搭建 1-1 1.1 安装Ununtu 1.1-1 1.2 更新Ubuntu系统软件 1.2-1 1.3 安装合适的g ...

  4. 深入谷歌开源项目【1】 - Camer2 - 环境搭建和源码编译

    前言:搞机器视觉,目前一般都有用摄像模组,或者工业相机,可是如果要搞到消费类,手机却不行.因为,手机上有个各种特效,这些都会对视觉效果有影响.所以,要在手机上搞,必须对手机的系统上的摄像头应用能够底层 ...

  5. Thingsboard入门教程:本地环境搭建和源码编译安装,献给thingsboard编译失败的同学,教程不断完善中,文章最后是thingsboard常见编译失败的问题总结

    欢迎加入ThingsBoard技术交流群 这里可复制Q群号:69998183 关注"云腾五洲":获取二开ThingsBoard物联网平台演示 交流社区:ThingsKit-Thin ...

  6. SRS流媒体服务器——服务器读取RTMP推流数据

    SRS流媒体服务器--服务器读取RTMP推流数据 目录 处理RTMP推流video message 处理RTMP推流audio message 处理RTMP推流onMetaData message S ...

  7. SRS流媒体服务器——WebRTC推拉流演示

    SRS流媒体服务器--WebRTC推拉流 目录 WebRTC推拉流配置 WebRTC拉流演示 WebRTC推流演示 SRS官方WebRTC文档:https://github.com/ossrs/srs ...

  8. SRS流媒体服务器——RTMP推流、拉流创建连接

    SRS流媒体服务器--RTMP推流.拉流创建连接 目录 识别客户端,然后获取或者创建SrsLiveSource 启动推流 启动拉流 SRS安装部署相关内容: SRS流媒体服务器--单机环境搭建和源码目 ...

  9. SRS流媒体服务器——Forward集群搭建和源码分析

    SRS流媒体服务器--Forward集群搭建和源码分析 目录 Forward集群原理 RTMP流转发(Forward)部署实例 Forward集群源码分析 1. Forward集群原理 Forward ...

最新文章

  1. 设置Eclipse可以Debug模式调试JDK源码,并显示局部变量的值
  2. ADO.NET编程小错误
  3. Linux awk+uniq+sort 统计文件中某字符串出现次数并排序
  4. kafka 0.9 java开发_kafka 0.9 java producer and consumer demo
  5. leetcode343. 整数拆分(思路+详解)
  6. python中写入csv文件的方法_Python写入CSV文件的方法
  7. JAVA HttpURLConnection 获取网页内容
  8. 148. Sort List (java 给单链表排序)
  9. 拒绝瞎忙,高效的学习与工作经验谈
  10. python与mongodb更新_Python对MongoDB增删改查
  11. IOS9 SDK下载、设备安装IOS9系统
  12. 【渝粤题库】陕西师范大学202861 发展心理学 作业(专升本)
  13. 如何去实现机械灵巧手玩魔方和弹钢琴_我学会了玩魔方
  14. C语言深度剖析笔记1
  15. vue3 Component inside <Transition> renders non-element root node that cannot be animated.
  16. FT60F011A/FT60F010A为辉芒微电子基本I/O型系列Flash单片机SOT23-6/SOP8
  17. 青春无敌?那只是一瞬间
  18. HBase入门到精通——培训资料分享
  19. c语言 10 9-8 7-6… 1循环语句,C语言学习与总结---第五章:循环结构程序设计
  20. 如果太阳突然爆炸 地球会发生什么?| 1分钟了解广义相对论

热门文章

  1. zabbix-3.0.1结合grafana绘图
  2. ActivityInfo taskAffinity
  3. 【转载】JAVA内存模型和线程安全
  4. UVA 12166 Equilibrium Mobile
  5. LAPM×××和php加速器
  6. ubuntu安装samba
  7. BackTrack 5 发布了 ---直接下载地址
  8. CodeForces - 1498D Bananas in a Microwave(思维+dp)
  9. CodeForces - 1407E Egor in the Republic of Dagestan(最短路+dp)
  10. python2使用openpyxl_使用openpyxl for Python2.6有些困难