- 博客(61)
- 收藏
- 关注
原创 StateThreads源码分析-代码结构
StateThreads是一个用于多线程编程的用户级线程库,它提供了一种轻量级的线程模型,允许开发者以更简单的方式编写并发程序。StateThreads的主要目标是提供一种高效的用户级线程模型,以减少线程切换和上下文切换的开销。它采用协作式调度策略,即线程在主动释放执行权之前不会被抢占,这减少了线程切换的开销,但也需要开发者在适当的时机主动释放执行权,以避免长时间的阻塞导致程序响应性下降。StateThreads提供了一组简单的函数和宏,用于创建和管理线程、同步和通信等操作。
2024-09-18 15:39:58
388
4
原创 State-Threads初识
是一个轻量级、高性能的线程状态管理框架,由知名开源作者 winlin 创建。它主要解决的是在多核处理器环境下,如何有效地管理和调度线程,以实现高效的并发执行。
2024-08-08 19:46:28
844
27
原创 clion调试SRS
在Windows系统上,可以通过SSH远程调试Linux代码。需要准备两台主机,一台Windows本地机器和一台Linux远端机器(可以是虚拟机),并在Linux主机上安装必要的软件。在CLion中新建SSH连接,配置工具链,设置远程部署,并上传源码到Linux远端机器。如果在编译过程中遇到问题,例如C++11特性未被正确使用,可以在。来编译SRS的依赖。函数,设置启动参数,以便能够成功启动并调试SRS。首先下载并安装CLion,然后打开SRS的目录,加载。在CLion中打开SRS的目录,选择。
2024-08-07 12:08:16
409
原创 mediasoup企业级会议并发方案设计
单个mediasoup稳定支持200-300路流,为了增加服务的并发,在一个服务器上部署5个信令服务及mediasoup服务。由于csdn图片大小有5M限制,因此无法在文章中展示高清图,有需要的可以私我,给发高清图。单台服务器32核cpu,32G内存,带宽2000M及以上。
2024-07-18 21:15:26
521
原创 工作边界感
在工作之前就要明确自己和他人的边界,非别人本职工作的内容,也不要去强加给别人,毕竟干好了,是他人对你的帮助,但是如果干不好了,他人也可以甩锅说这本来就不是我的工作,然后相互扯皮。非自己分内的工作,该拒绝的时候要果断拒绝,切不可因为帮助他人完成了非自己本职工作,然后导致自己的本职工作无法按时完成。综上所述,处理工作边界问题需要明确各自的职责和权益,建立有效的沟通机制,制定明确的规则和流程,并保持开放和包容的心态。在处理工作边界问题时,应保持开放和包容的心态,尊重不同的观点和意见。
2024-07-18 20:26:33
405
2
原创 mysql高并发设计
连接池是一种管理数据库连接的技术,可以有效地减少连接的创建和销毁开销。当有新的请求到来时,可以从连接池中获取连接,而不需要每次都重新创建连接。通过适当设置查询缓存和系统缓存,可以减少磁盘IO操作,加快查询的执行速度。优化查询可以提高MySQL性能。可以通过合适的查询语句、索引和缓存机制来减少查询的执行时间,避免全表扫描和不必要的数据操作。写入扩展性:两个节点都可以处理写入操作,提高了写入操作的扩展性。数据冗余:提供了数据的热备份,降低了数据丢失的风险。数据延迟:由于复制是异步的,存在数据复制延迟的风险。
2024-07-11 19:34:18
1275
20
原创 srs直播内网拉流带宽飙升问题记录
客户端从srs拉流,发现外网客户端拉流,cpu和带宽都正常。然而内网客户端拉流,拉流人数超过5人以上,带宽就会迅速飙升。经过排查公司内网环境,发现内网环境做了带宽限制,当客户端拉流带宽超过一定大小后,就限制拉流。用srs-bench进行srs压测,vlc播放器srs拉流,以及客户端srs拉流。缺陷:网络异常,srs不进行丢包重传,此时会出现马赛克,卡顿等问题。srs部署在云服务器上,32核cpu,64G内存,带宽300M.优势:内网及外网的网络正常情况下,直播拉流正常,带宽消耗少。
2024-07-08 19:40:44
2041
52
原创 我的创作纪念日
过往的工作经历中,虽然也时长做笔记,记录学习及工作的内容,但是始终没有坚持下去,浑浑噩噩,每天都是重复的上班下班,周而复始。说到收获,最主要是就是记录工作及学习中的技术,一方面可以在需要的时候回顾一下过往整理的技术点,另一方面也可以在此和各个领域的大牛一起学习,探讨,深入技术,这是之前没有的体验。工作任务较忙,也许没有经历每天都写博客,但是我不会中断我的创作之旅,在后续的日子里,依旧会在工作之余抽出时间创作博客,和众多大佬们共同进步。学无止境,保持初心,一往直前,做一个有理想有抱负的技术大佬。
2024-06-29 14:28:58
625
26
原创 程序员软实力
需求文档,设计文档,接口文档,流程图,架构图,思维导图,培训文档,PPT,这些都是日常工作中必须要具备的能力。对于很多普通本科或者非计算机专业的IT从业者来说,入行IT都是靠B站或者网上的一些计算机课程,或者培训机构突击4-6个月,然后入门从事IT行业,尽管刚入行的时候找到一个还可以应付的工作,但是拔苗助长,临时抱佛脚,背诵八股文的新手,实际上基础并不扎实,现在很多培训机构,尤其是打着零基础到精通,包分配的线下培训机构,其实并不是教你如何快速提升编程能力,而是教你如何应付面试,如何背八股文。
2024-06-25 23:50:41
1266
14
原创 mediasoup源码分析(七)transport传输
Transport收到数据packet后,会解析出packet中所带的ssrc字段,然后基于ssrc找到该数据的Producer。Produer也是基于ssrc找到RtpStreamRecv。二、RtpStreamRecv 处理收到的包。
2024-06-23 09:56:28
399
1
原创 mediasoup 源码分析(六)consumer和producer
mediasoup总共有四种消费者类型,SimpleConsumer、PipeConsumer、SvcConsumer、SimucastConsumer。consumer的类型是基于producer的类型来创建的。SimpleConsumer: 普通RTP数据的消费者,对应PlainTransport。PipeConsumer:不同Worker之间Router之间的数据流转,则其为接收或者消费从另外一个Worker中的Router传过来的数据。
2024-06-23 09:34:58
511
原创 mediasoup 源码分析 (八)分析PlainTransport
PlainTransport 可以接收裸RTP流,也可以接收AES加密的RTP流。源码中提供了一个通过ffmpeg发送裸RTP流到mediasoup的脚本,具体地址为:mediasoup-demo/broadcasters/ffmpeg.sh。脚本就是通过HTTP Post发送创建PlainTranport请求,然后通过ffmpeg向指定地址+端口,发送RTP流。真正绑定的地方在PortManager::BindUdp(ip)中,随机从指定Port范围中选出可用Port,然后绑定。
2024-06-23 09:13:13
673
原创 mediasoup 源码分析(五) 创建room 和 router
mediasoup-demo/server/node_modules/mediasoup/src/Channel.ts 中管理和C++通信的channel。代码见:mediasoup-demo/server/node_modules/mediasoup/worker/src/Worker.cpp。详情见:server/node_modules/mediasoup/src/Worker.ts。详情见mediasoup-demo/server/lib/Room.js。四、创建Router。
2024-06-22 23:08:36
869
1
原创 mediasoup源码分析(四)channel返回信令及notify通知
在mediasoup源码分析(三)channel创建及信令交互一文中介绍了mediasoup中channel的创建,接下来在本文中,会说明mediasoup c++层如何将处理后的数据返回到信令服务中。在 Mediasoup 中,C++ 编写的媒体层(mediasoup-worker)与信令服务之间的通信通常是通过 JSON 格式的数据进行的。这种数据格式易于解析和生成,并且被广泛用于 Web 服务和客户端之间的通信。一个有三个返回的接口。
2024-06-22 09:00:00
2136
28
原创 c++中log4cplus日志库引用
这些示例展示了如何配置和使用 log4cplus 进行基本的日志记录。大家可以根据项目的需求调整 Appender、Layout 和 Logger 的配置。log4cplus 是一个用于 C++ 的日志库,它提供了线程安全、灵活且细粒度的日志管理和配置控制。
2024-06-20 19:30:52
828
35
原创 分享vs code十大好用的插件
将 VS Code 界面改成简体中文。在VS Code 中打开 PDF文件。这个扩展会突出显示您的待办事项注释,并提醒存在未完成的注释或任务。该扩展附带了内置的关键字 TODO: 和 FIXME:,也可以添加自己的关键字并更改其外观。一些关键词汇高亮显示,方便对 需要重新检查的内容 作注释,支持自定义关键词。
2024-06-20 13:42:12
956
5
原创 mediasoup源码分析(二)--worker启动
官方提供的mediasoup-demo是由js(信令)+c++(流媒体服务)两部分服务,mediasoup的worker进程是nodejs通过child_process 的spawn()接口启动的。
2024-06-18 21:12:45
1300
6
原创 mediasoup源码分析(三)channel创建及信令交互
在golang实现mediasoup的tcp服务及channel通道一文中,已经介绍过信令服务中tcp和channel的创建,本文主要讲解c++中mediasoup的channel创建,以及信令服务和mediasoup服务如何交互。
2024-06-18 00:03:52
5507
37
原创 golang实现循环队列
假溢出通常发生在循环队列的头部和尾部索引在数组中相遇时,即使数组中还有空间可以存放新元素。出现假溢出的原因,从根本上来说,是因为循环队列的容量被错误地判断为已满。在Go语言中实现循环队列,我们需要定义一个循环队列的数据结构,并实现其基本操作,包括初始化、入队(Push)、出队(Pop)、获取队列长度等。避免假溢出的关键在于正确地维护队列的状态信息,确保在任何时候都能准确地判断队列是否真正满了或者空了。在设计循环队列时,应该根据具体的应用场景和性能要求来选择最合适的策略。
2024-06-17 00:00:00
1175
10
原创 机器学习-课程整理及初步介绍
机器学习是人工智能的一个分支,它使计算机系统能够从经验中学习并改进其在特定任务上的表现,而无需进行明确的编程。机器学习涉及多种算法和统计模型,它们可以从数据中学习规律,并做出预测或决策。机器学习的应用非常广泛,包括图像识别、语音识别、推荐系统、自动驾驶汽车、医疗诊断等。监督学习(Supervised Learning):算法从标记的训练数据中学习,以便对新的未标记数据进行预测。无监督学习(Unsupervised Learning):算法从未标记的数据中学习,以发现数据中的结构或模式。
2024-06-17 00:00:00
1395
5
原创 golang实现mediasoup的tcp服务及channel通道
Client:表示客户端连接,包含网络连接conn、指向服务器的指针Server和Channel指针c。server:表示TCP服务器,包含服务器地址address、TLS配置config以及三个回调函数:onNewClientCallback:新客户端连接时调用。onClientConnectionClosed:客户端连接关闭时调用。onNewMessage:客户端接收新消息时调用。
2024-05-27 09:00:00
1347
22
原创 mediasoup源码分析(九)pipeTransport介绍
一个worker中的数据传到Router,然后传给Router中的消费者,而这个消费者的IP是另一个worker的地址,所以数据会传到另一个worker。此时数据是输入数据,所以相当于另一个worker的produer,即push数据。注意这个 OnConsumerSendRtpPacket()的理解,本worker的数据发送给另一个worker,对端的那个worker相当于一个消费者。当他订阅的时候,本worker就保存了对端worker的ip:port信息。而级联就是用来解决这个问题的。
2024-05-24 22:05:54
747
9
原创 golang通过go-aci适配神通数据库
设置环境变量:PKG_CONFIG_PATH,export PKG_CONFIG_PATH=$go-aci , $go-aci为go-aci代码的路径,比如export PKG_CONFIG_PATH=/usr/lib/go/src/go-aci。到/usr/lib/go/src/go-aci/test目录下,编译test.go : go build -o test_goaci test.go,如图。开启一个cmd,然后进入到C:\Go\src\go-aci目录下,依次执行,没有报错即为正确。
2024-05-24 21:38:22
1373
12
mediasoup类图
2024-05-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人