【知位源码】【音箱源码】【workless源码】shared ptr 源码

2024-11-20 19:28:45 来源:javaio模型源码 分类:百科

1.SRS(simple-rtmp-server)流媒体服务器源码分析--RTMP消息play
2.源码解析:shared_ptr是如何实现共享对象所有权的?

shared ptr 源码

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,xxx用户已经开始play。

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

       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协议都是workless源码要混合音视频数据,在做转发。在往后面看,

       最后进入

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

       4. 最后:play总结

       (1)通知client开始play

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

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

源码解析:shared_ptr是如何实现共享对象所有权的?

       shared_ptr作为共享所有权的智能指针,其核心在于引用计数机制。当一个资源被多个shared_ptr管理时,kite源码每个shared_ptr共同维护一个引用计数,计数反映当前资源被多少个shared_ptr实例拥有。

       实例化shared_ptr并获取所有权时,引用计数加1。当shared_ptr释放时,计数减1。当最后一个持有资源所有权的shared_ptr释放后,计数降至-1,workshop源码表示资源已无shared_ptr管理,执行资源释放结束生命周期。

       值得注意的是,引用计数降至-1时释放资源,而非0,这是因为持有资源所有权的第一个shared_ptr实例的计数为0。持有资源所有权的shared_ptr数量与引用计数之间的关系为:持有数量=引用计数值+1。

       shared_ptr通过RAII(资源获取即初始化)技术管理资源生命周期,构造时接管资源,析构时释放资源。

       构造过程分为三种:空指针对象构造、从裸指针构造、从其他shared_ptr构造。空指针构造创建“空”shared_ptr实例,裸指针构造直接从原始指针创建,而其他shared_ptr构造则通过复制或移动所有权。

       析构过程主要关注引用计数的动态调整,确保资源在最后被正确释放。控制块负责管理引用计数和弱引用计数,执行资源释放。

       控制块动态行为包括引用计数和弱引用计数的增减以及引用计数降至特定值时的资源释放。通过__add_shared和__release_shared函数实现引用计数操作。

       引用计数相关操作包括从裸指针构造时初始化引用计数、通过其他shared_ptr构造时共享所有权,以及释放时递减引用计数。弱引用计数用于追踪对象生存状态,但不参与生命周期管理。

       在实践中,通过weak_ptr和shared_ptr的配合使用,可以解决循环引用导致的内存泄漏问题。weak_ptr与shared_ptr共用控制块,但只用于跟踪对象存活状态。

       整体而言,shared_ptr通过引用计数和控制块机制,实现了资源的共享所有权管理,确保资源在所有shared_ptr实例被释放后得到正确释放。

更多资讯请点击:百科

热门资讯

deploy 源码

2024-11-20 18:56797人浏览

钥匙源码_钥匙代码

2024-11-20 18:302527人浏览

ay源码

2024-11-20 18:272938人浏览

乡村源码

2024-11-20 18:182208人浏览

scanner源码

2024-11-20 17:002112人浏览

蓝调源码_蓝调官方

2024-11-20 16:531452人浏览

推荐资讯

ios源码阅读

1.怎么试运行iOS软件的源代码2.花火阅读(可换源的IOS小说APP)v1.0.1苹果版3.IOS技术分享| WebRTC iOS源码下载&编译4.开源阅读有ios版本吗怎么试运行iOS软件

字帖源码_字帖练字生成源码

1.好词3000个2.手写作文字好看大全好词3000个 轩榭 伟大、辉煌 氤氲 婉约 暮楚 潋滟 凌迟 寂寞斟酌 相信 信念 幸福 幸运 勇气 希望 光明 回忆

vtst源码

1.VaspCZ软件详细介绍VaspCZ软件详细介绍 一、VaspCZ软件简介 VaspCZ(VaspCheckbyZzd)是中科院上海应物所的张正德博士在读博期间为提高科研效率而开发的Vas