首页 > 编程知识 正文

srs是什么意思(开源流媒体SRS)

时间:2023-05-05 22:41:19 阅读:122206 作者:3748

另一方面,SRS简介1、SRS简介SRS定位是运营级互联网中继服务器集群,追求更好的概念完整性和最容易实现的代码。 SRS为将RTMP流访问SRS提供了丰富的访问方式,包括从RTMP推送至SRS、从RTSP/UDP/FLV推送至SRS、以及从SRS拉入流式传输。 SRS还可以将访问的RTMP流转换为RTMP流的转码、流的屏幕截图、传输到其他服务器、传输到HTTP-FLV流、传输到HLS、传输到HDS、Hitachi SRS包含支持大型群集(如RTMP多级别群集、源站群集、VHOST虚拟服务器、无中断服务Reload和HTTP-FLV群集)的重要特性。 SRS还提供了丰富的APP应用程序接口,包括HTTP回调、安全策略安全、HTTP API接口和RTMP速度。 SRS在源工作站和CDN集群中都有广泛应用的应用程序。

2、多进程模式SRS-dolphin是SRS的多进程解决方案。 是基于ST的tcp代理,不推荐。 推荐如下。

go-oryx :支持SRS的多进程;

SO_REUSEPORT :在同一端口上启动多个SRS接收

注: Ast (状态-趋势) )。

3358 state-threads.source forge.net/docs/ST.html

3359 github.com/OSS RS/state-threads

3、上下文切换线程、同一进程中两个线程之间的切换进程、两个进程之间的切换模式、一个线程在用户模式和内核模式之间切换地址空间、 将虚拟内存切换到物理内存在CPU切换之前保存当前任务的状态,以便下次切换到此任务时可以再次加载和执行此任务的状态。 保存和重新加载任务状态,此过程称为上下文切换。

4、srs启动流程

)1)首先检查解析启动命令参数、初始登录界面,检查配置文件是否正确

)2)创建SrsServer服务并初始化一些变量

)3)检查是在后台运行还是在控制台上运行

)4)初始化st联合库、信息号管理器

)5)在后台执行写入文件的进程pid时

(6)监听连接:

listen_rtmp: rtmp推流或拉流连接listen_http_api: api连接listen_http_stream: http拉流连接,http-ts http-ts http-MP3 listen _ stream _ caster 3360 mpegtsoverudp流请求的接收、rtsp流请求、http-flv流请求(7) http_api

)8)发起与ingest的合作,使用ffmpeg提取文件或转发到本服务

)9)启动主线程

二、SRS推挽流SRS启动后,客户端启动推挽流需要调用以下主要类,互相配合完成推挽流功能: 该过程描述SRS主类之间的介质静态过程。

1、整体流程(1)客户端发送rtmp连接请求,SRS监听器收到连接请求后,创建SRS连接,每个SRS连接启动线程完成相应的任务

(2) SrsRtmpConn首先根据rtmp协议过程成功交互,然后根据请求url设置流选择类型等标志,同时调用fetch_or_create进行音频-视觉源

2、推送流生成SrsPublishRecvThread线程,接收客户端发送的rt

mp数据包,数据包由SrsRtmpServer来处理,如果是音视频数据,由process_publish_message来处理,它会通过SrsSource对媒体流的进行处理

(1)如果该服务是边缘服务,SrsSource直接将媒体proxy publish到源站服务。

(2)否则SrsSource会将publish流放入到每个SrsConsumer的媒体数据对列中,一个SrsConsumber就是一个播放客户端。同时调用SrsOriginHub将媒体流根据配置来生成flv,hls,mp4录像文件,以及是否将发布流转发到其他rtmp服务器等;最后检查如果启用GopCache会将媒体流写入GopCache对列中.用于当一个新的播放请求来时,保证首先能获取一个gop数据,以防播放开始时不黑屏或花屏。

3、拉流

(1)如果是源站拉流同时启用源站集群,如果流不是该源站发布,则根据配置的发送api请求到其他源站,检查是否在其他源站发布了流,如果是,则发送一个redirect,要求拉流客户端重定向指定服务器拉流。注意rtmp重定向信令,如果客户端直接请求的源站,要求rtmp客户端支持redirect,如果srs边缘回源到源站后再重定向,那是没有问题的,因为srs边缘支持redirect。

(2)如果不走第1步,则创建一个SrsConsumer与SrsQueueRecvThread线程, 创建SrsConsumer时,如果启用gopcache,首先会将gopcache媒体数据插入SrsConsumer的数据队列中。如果是边缘拉流,则使用SrsPlayEdge回源拉流。将回源拉的媒体流数据插入SrsConsumer的数据队列中。

(3)SrsQueueRecvThread线程负责将SrsConsumer的数据队列中的媒体数据发送给客户端。SrsConsumer队列中数据来源于GopCache,源站publish的数据,以及回源拉流的数据。

 

三、rtmp相关 1、rtmp监听与连接流程

(1)SerServer调用listern启动rtmp监听线程

(2)客户端发送连接请求,监听线程收到请求后,发送on_tcp_accetpt()事件

(3)SrsrServer处理accetp_client() 创建一个新的SrsRtmpConn,同时启动SrsRtmpConnThread连接线程

(4) SrsRtmpConnThread收到客户端rtmp握手,同时根据rtmp连接流程创建一个rtmp连接

(5)连接成功之后,调用stream_service_cycle对rtmp媒体流处理

2、rtmp媒体流处理过程

(1)identify_client 根据客户端请求类型创建流名,流Id,流类型(推拉流)等客户端标识信息

(2)check_vhost 根据配置检查域名是否合法

(3)http_hooks_on_connect 发送on_connect事件

(4)check检测根据配置检查是否允许推拉流

(5)根据请求创建或获取SrsSource对象

(6)根据流类型调用对应的推或拉流流程

3、rtmp推流流程

(1)接收客户端发布流交互消息,start_fmle_publish完成发布流交互。

(2)发送on_pulibsh事件。

(3)SrsSource::can_publish 检查SrsSource流的是否已发布,如果是返回,不再发布。

(4)检查是否边缘推流,如果是启动SrsEdgeForwarder线程,将流推向源站。

(5)SrsSource::on_publish,如果配置flv,hls,mp4等,则开始录相,如配置转发,则启动转发线程。

(6)启动SrsPublishRecvThread,线程,接收客户端数据,调用SrsRtmpConn::handle_publish_message处理数据。

(7)SrsRtmpConn:::process_publish_message处理推流数据。

(8)如果是边缘推流,将数据SrsEdgeForwarder队列,将数据发送到源站。

(9)如是不是边缘推流,调用SrsSource相关方法处理音视频数据. 对hls,mp4,flv录像,转发,gopCache,以其放到SrsConsumber的消息对列中,每个SrsConsumber是一个播放客户端。

(10)如果停止推流, SrsPublishRecvThread将stop退出线程,。

(11)调用on_edge_proxy_unpublish停止边缘推流线程。

(12)SrsSource::on_unpublish,停止hls.,mp4,flv, 转发,清空gopCache。

(13)http_hook_on_unpublish发送on_unpublish事件。

4、rtmp拉流流程

(1)SrsRtmpServer::start_play 根据rtmp协议完成play流程。

(2)SrsRtmpConn::http_hook_on_play 发送on_play事件。

(3)playing检查是否开启源站集群,如果是,且流没有在该源站发布,向其他源站发送请求,检查流在哪个源站发布,如果找到,重定向到该源站。

(4)如是不是源站集群,create_consumer创建consumer,同时将gop缓冲数据放入consumer消息队列中,如果是边缘拉流,启动SrsEdgeIngester回源拉流。

(5)recv_messae接收客户端信息,放下consumer消息队列中,pump从队列获取消息,process_play_control_msg处理rtmp控制消息。

(6)dump_packets从consumer的消息队列中获取媒体数据, send_and_free_message 发送给给客户端。

(7)stop停止播, http_hook_on_stop发送on_stop事件。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。