问下像YY直播那样给的RTMP推流地址建的是什么服务器 怎样搭建这样的服务器?

问下像YY直播那样给的RTMP推流地址建的是什么服务器   怎样搭建这样的服务器?

在accept一个链接后,创建对应的SrsRtmpConn。

SrsRtmpConn自身是一个协程的子类,运行后进行rtmp协议中的handshake、connect、create stream。并且判断是publish之后,创建SrsRecvThread来接受推流。

但是有一点比较奇怪的写法就是,在handshake之后,connect之前就根据发的包内容来判断是一个publish还是play。这点和我认知的rtmp协议不同,在我的认知里面,rtmp协议在create stream会发play或者push的message表示自己是一个什么样的角色,一般都是通过这个方法来判断的。

SrsRecvThread是一个协程,运行后会开始接受message数据。根据对应message执行不同的函数,并且把message放入到SrsConsumer队列中,

在放入SrsConsumer的队列中后会通过条件srs_cond_signal(mw_wait),通知等待的协程可以开始消费message了

这个是接受tcp链接的代码,rtmp的tcp监听也是在这边的。accept一个fd后,调用on_tcp_client处理这个链接。

这边有一点需要注意的是,srs的io操作大部分是state thread库函数做的。调用accept的socket是一个非阻塞式的,但是st_accept用起来像阻塞式的,实际上是一个非阻塞式的。

C++音视频开发学习地址:免費】FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发

【文章福利】:免费领取C++音视频学习资料包、技术视频,内容包括(音视频开发,大厂面试题,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs),免費分享,如有需要的可以加君羊领取哦!~学习交流君羊994289133点击加入领取资料包

on_tcp_client最后调用会调用fd2con,将fd生成对应的SrsRtmpConn对像。

并且SrsRtmpConn是一个st可以执行的协程类,最后会调用do_cycle进行handshake、connect、create stream。

在service_cycle中就是调用stream_service_cycle

这个函数做的东西比较多,一开始回去确认身份。然后根据不同的推流端进行一些特例化的操作,大致就是connect,createstream,然后开始推流。

创建一个协程开使推流,调用do_publishing中启动协程开始推流,并做了一些链接的错误处理。

在do_publishing中调用SrsPublishRecvThread的start,最后会开启协程。

start最后会调用SrsRecvThread协程,中间就省略很多无用的代码。

最后会放入到source的consumer中

最后会通知所有的消费者,有message写入,可以开始消费

原文链接:srs流媒体服务器推流的流程 - 资料 - 我爱音视频网 - 构建全国最权威的音视频技术交流分享论坛