龙空技术网

简述SRS流媒体服务器相关技术

antonio 3729

前言:

此刻各位老铁们对“aspnet core 流媒体”大体比较关心,各位老铁们都需要剖析一些“aspnet core 流媒体”的相关内容。那么小编同时在网上网罗了一些有关“aspnet core 流媒体””的相关文章,希望同学们能喜欢,大家一起来了解一下吧!

0.引言

阅读本文前,一定要阅读这篇文章,<<手把手搭建流媒体服务器详细步骤>>,能够帮助你,快速搭建Srs流媒体服务器,可以用作后期的学习。

Srs4.0流媒体支持的技术。

Srs官网:

推流端支持

(1)RTMP

(2)HLS

(3)WebRTC

(4)SRT

(5)GB28181

拉流端支持

(1)RTMP

(2)HLS

(3)WebRTC

(4)SRT

(5)GB28181

注意:不管推流端推上来何种格式,Srs流媒体服务器都是可以经过协议转换,拉流端都可以拉取到不同协议。如推流端,推RTMP流,那拉流端,可以拉取HTTP流。另外SRS流媒体服务器是支持集群方案。

这里补充下这篇文章在搭建方面没有的知识点,《手把手搭建流媒体服务器详细步骤 》。如下几点:

(1)安全退出正在运行的流媒体服务器

sudo kill -SIGQUIT srs_pid。

(2)srs流媒体服务器默认是后台启动方式,如果是要方便GDB调试,则要修改配置文件为前台启动。

 listen 1935;  max_connections 1000;  #srs_log_tank file; #srs_log_file ./objs/srs.log; # 前台运⾏ 6 daemon off; # 打印到终端控制台 srs_log_tank console;  http_api {   enabled on;    listen 1985;   } http_server {   enabled on;   listen 8081; # http监听端⼝   dir ./objs/nginx/html;    }  stats {   network 0; disk sda sdb xvda xvdb;   }  vhost __defaultVhost__ {  # hls darren   hls {  enabled on;   hls_path ./objs/nginx/html;   hls_fragment 10;     hls_window 60;    }  # http-flv darren   http_remux {   enabled on;   mount [vhost]/[app]/[stream].flv;     hstrs on;  }  }

同样的执行方法:

./objs/srs -c conf/srs.conf

经过上面配置,就可以前台显示,如下:

(3)SRS是协程方案

1.源码目录

srs主要目录,有以下几个:

(1)trunk⽬录

如下界面:

(2)src下的源码目录

trunk目录下的src目录,其界面如下:

(3)src下的app目录

srs_app_async_call.cpp和srs_app_async_call.hpp作用是:可以⽤来执⾏异步任务,通过execute()函数 push任务,然后在cycle()执⾏,在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_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_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.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作用是:HLS相关业务。

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_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作用是:TCP/UDP监听器。

srs_app_log.cpp和srs_app_log.hpp作用是:SrsFastLog ⽇志。

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_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等等。

(4)srs下的core目录

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作用是:版本信息。

(5)srs下的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和rs_kernel_codec.hpp作用是:编码器相关,包括视频和⾳频,⾮常核⼼的⽂件;SrsFlvVideo⽤来检测FLV的video tag对应内容;SrsFlvAudio⽤来检测FLV的audio tag对应内容;SrsMaxNbSamples 256表示video最⼤的NALUS个数,audio最⼤的packet数量;SrsFrame存储帧,SrsAudioFrame 存储AAC帧,SrsVideoFrame存储视频帧;SrsFormat编码器格式,包含了⼀个或者多个流,⽐如为RTMP format时,包含⼀个视频和⼀个⾳频帧。

srs_kernel_consts.cpp和srs_kernel_consts.hpp作用是:SRS的常量定义,⽐如播放的标记#defineSRS_CONSTS_LOG_PLAY "PLA",发布的标记#define SRS_CONSTS_LOG_CLIENT_PUBLISH"CPB",SRS_CONSTS_HTTP_XXX等HTTP响应码,SRS_CONSTS_RTSP_XXX RTSP响应码等等。

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)。

(6)srs下的libs目录

libs目录包含如下一些文件:

srs_lib_bandwidth.cpp和srs_lib_bandwidth.hpp作用是:srs-librtmp 客户端带宽统计。

srs_librtmp.cpp和srs_librtmp.hpp作用是:srs提供的客户端rtmp库。

srs_lib_simple_socket.cpp和srs_lib_simple_socket.hpp作用是:SimpleSocketStream rtmp客户端的socket封装。

注意:这些库,有可能是用到客户端上去。

(6)srs下的main目录

main目录包含如下一些文件:

srs_main_ingest_hls.cpp作用是:拉取hls发布到rtmp流媒体服务器。

srs_main_mp4_parser.cpp作用是:MP4 box解析。

srs_main_server.cpp作用是:srs流媒体服务器主⼊⼝。

(7)srs下的protocol目录

流媒体相关的协议分析,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协议栈。

(7)srs下的service目录

srs_service_conn.cpp和srs_service_conn.hpp作用是:ISrsConnection HTTP/RTMP/RTSP等对象的连接接⼝。

srs_service_http_client.cpp和srs_service_http_client.hpp作用是:SrsHttpClient HTTP客户端。

srs_service_http_conn.cpp和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组件的⼯具类。

(8)srs下的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。

2.总结

本篇文章主要介绍了SRS流媒体服务器的目录介绍以及具体文件是干什么的,大致能够对SRS流媒体服务器有个了解。希望能够帮助到想学习流媒体服务器的朋友。

欢迎关注,转发,点赞,收藏,分享,评论区讨论。

后期关于项目的知识,会在微信公众号上更新,如果想要学习项目,可以关注微信公众号“记录世界 from antonio”

标签: #aspnet core 流媒体