皮皮网

【易语言入库源码】【感知源码】【injection源码】intservice源码分析

来源:个人网站源码免费下载 时间:2024-11-24 22:24:48

1.SRS(simple-rtmp-server)流媒体服务器源码分析--RTMP消息play

intservice源码分析

SRS(simple-rtmp-server)流媒体服务器源码分析--RTMP消息play

       本章内容梳理了SRS在接收到RTMP信息后如何进行转发的源码过程。在此过程中,分析首先进行代码梳理,源码作者也在源码熟悉阶段,分析可能尚未完全梳理完接受到RTMP后信息如何处理、源码易语言入库源码缓存以及转发给直播用户等内容。分析感知源码

       SRS源码中的源码Play流程如下:

       1. 进入play流程:本章内容直接从SrsRtmpConn::stream_service_cycle()方法开始梳理。

       2. 在接受流程中,分析客户类型为SrsRtmpConnFMLEPublish “fmle publish”,源码而在转发流程中,分析客户类型为SrsRtmpConnPlay。源码

       3. 在http_hooks_on_play()方法中,分析回调on_play()方法通知vhost,源码injection源码xxx用户已经开始play。分析

       4. 在http_hooks_on_stop()方法中,源码回调on_stop()方法通知vhost,xxx用户已经停止play。eh源码

       5. 最重要的是进入该函数。

       在函数中:

       1.1 根据客户端创建消费者对象:create_consumer(this, consumer)

       1.2 为该消费者开启一个独立协程:trd.start() //此处一直不太明白,在play流程中创建一个协程用来做什么?

       1.3 进入play主流程:do_playing(source, consumer, &trd);

       2. 进入主play循环:do_playing()函数内容众多且非常重要,因此将函数内容全部列出。源码电玩

       2.1 通知消费者准备play

       2.2 从消费者列表中取出Rtmp信息(SrsMessageQueue)

       2.3 进入play入口

       3. 进入SRS发送接口(play):在int SrsProtocol::send_and_free_messages(SrsSharedPtrMessage** msgs, int nb_msgs, int stream_id)函数中,进入int SrsProtocol::do_send_messages(SrsSharedPtrMessage** msgs, int nb_msgs),该函数有一个#ifdef SRS_PERF_COMPLEX_SEND宏定义,一般rtmp协议都是要混合音视频数据,在做转发。在往后面看,

       最后进入

       在该函数中,最重要的一点是send message总出口writen()函数。它负责将转发给直播用户的流转发出去。

       4. 最后:play总结

       (1)通知client开始play

       (2)从消费者列表中取出Rtmp数据

       (3)从总出口writev()函数中转发出去