前言:
此刻各位老铁们对“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 流媒体