首页
学习
活动
专区
工具
TVP
发布

流媒体技术

专栏成员
54
文章
37458
阅读量
14
订阅数
Monibuca v5 实现零拷贝 BufReader
优点是简单,而且延迟较低,可以立即获取到想要长度的数据。 缺点也很明显,需要频繁 make,更关键的是需要频繁调用 syscall,造成 CPU 损耗。
我不是码神
2024-04-23
1540
Monibuca v5 中实现热重启
但是在退出发布者或者订阅者,仍然遇到一些问题,首先发布者和订阅者各自有自己的 G ,多数用于网络通讯。此外退出分为两种情况,一种是内部原因,比如超时,出错等。另一种是外部原因,比如用户手动关闭,连接断开等。很难优雅的统一处理。
我不是码神
2024-04-16
1390
m7s v5 中实现优雅内存分配器
v4 中使用了链表存储了不同大小的内存块的方式进行内存池的实现,实际测试中发现内存浪费比较严重,因此如何设计出使用效率高,操作简洁的内存池就成了 v5 的一个任务。
我不是码神
2024-04-09
840
Monibuca 中的内存复用
Go语言本身具备出色的性能,然而在流媒体服务器这种CPU密集+IO密集的双重压力下,GC带来的性能损失是最主要的矛盾。而减少GC的操作最直接的办法就是减少内存申请,多多复用内存。本文将围绕内存复用这个主题,把M7S中相关技术原理讲解一遍,也是M7S性能优化的历程。
我不是码神
2023-10-16
3220
纯粹炫技
开始和结束有相同的状态变化过程,而且看着这张图总有种对称性,似乎我们的代码太过肤浅了,没有那个玄而又玄的味道。
我不是码神
2022-07-28
1860
原子状态机AFSM介绍
A:当我们开发SDK时,需要处理API乱序调用,以及资源正确释放两大问题,这两大问题使得程序变得十分复杂难以维护。
我不是码神
2022-07-28
1.2K0
Go语言实现的流媒体服务器开发框架
市面上的流媒体服务器不可谓不多,从本人的第一份工作起,就一直接触和研究了形形色色的流媒体服务器,从最早的FCS(全称Flash Communication Server),后来改名为FMS(全称Flash Media Server),到Red5(java语言开发),到CrtmpServer(C++开发),让我对流媒体服务器的基本原理有了深刻的认识。当时本人痴迷C#,于是乎在业余时间对crtmpServer的代码进行移植,用C#仿照着写了一遍取名为csharprtmp,并且适当的增强了一些功能,于是对rtmp协议了如指掌。后来Adobe推出了RTMFP协议,是一种p2p协议,十分节省带宽。我就又开始研究一款名为OpenRTMFP的开源项目,后来该项目改名为MonaServer。我在起基础上进行了扩展,实现了一些例如录制flv,shareObject等原本FMS有的功能。后开发出了HTML5直播技术(现在命名为Jessibuca,尚未开源),采用的传输协议就是WebSocket传输裸的视频流的方式,属于私有协议。而Server当时就使用的MonaServer。但当时遇到一个问题,C++的内存泄漏问题,这个一直没有很好的解决。遂决定放弃使用MonaServer转而使用srs,而srs要用一个很简单的go写的小程序将http-flv转换成WebSocket的Flv来适配我的Jessibuca,感觉最好能直接修改srs来实现这个功能。对srs的源码研究了一小段时间后放弃了,因为C++代码过于难写,容易出现bug。后来转而使用golang写的gortmp作为server,同样对其进行了扩展,而且进展十分顺利,golang的开发效率令人惊叹,而且其协程的特性很完美的处理了流媒体服务器的并发的场景。所以使用golang写的流媒体服务器项目很多,github上随便一搜就有很多,比如livego、joy4等。期间还接触到一位使用Node.js实现的流媒体服务器Node Media Server,我也和作者交流了许多,收益良多。
我不是码神
2022-07-28
1.9K0
如何正确运行monibuca实例
对于golang新手来说,经常会出现无法编译一个github上的项目,主要原因是http://golang.org域名被墙,导致无法正常下载依赖项,另外go module还有GOPATH等一些概念不熟悉导致的。本人以http://github.com/langhuihui/monibuca为例,画了一个图,帮助初学者快速顺利启动一个项目。
我不是码神
2022-07-28
9300
写给前端组的小伙伴们
今天是我离开vivo的日子,伴随着不舍和过去与大家一起工作的有趣时光,我踏上了新的征程。
我不是码神
2022-07-28
1790
TRTC Web SDK新架构设计解析(GMTC逐字稿)
腾讯实时音视频(Tencent Real-Time Communication,TRTC)是腾讯云基于 QQ 在音视频通话技术上的积累,它还结合了腾讯浏览服务 TBS WebRTC 能力与腾讯实时音视频 SDK ,为客户提供多平台互通、高品质、可定制化的实时音视频互通服务解决方案。目前腾讯云团队正在开发的 TRTC Web SDK 新架构。
我不是码神
2022-07-28
9810
优雅的模块化后台界面渲染
的过程中,为了方便访问每一个插件的界面,我们需要将所有插件的自定义的界面集中在一起显示。 我们需要实现一下功能: 为了方便访问每一个插件的界面,我们需要将所有插件的自定义的界面集中在一起显示。 我们需要实现一下功能:
我不是码神
2022-07-28
4950
重新定义流媒体服务器
随着全民直播时代的到来,以及最近疫情的爆发,在线教育行业又变的炙手可热,成为了新的风口。这两者的背后都是依靠着 CDN 以及视频云等基础服务,而这些基础服务的底层又依靠着流媒体服务器这种有着“悠久历史”的特殊服务器软件。为什么说特殊呢,因为这种服务器软件的架构和传统的 Web 服务器有很大的差别。
我不是码神
2022-07-28
2.9K0
瞄一眼Vue3.0中的响应式编程
言归正传,我们先用一个简单的例子来直观感受一下所谓的响应式编程和原来2.0时代的区别:
我不是码神
2022-07-28
3380
Cocos Creator 2.2 的渲染流程(原生渲染)
Cocos Creator 升级的2.2之后,渲染流程发生了比较大的变化,主要是重构了一些类,属性的位置发生了变化。为了防止日后忘记,先记录下来。
我不是码神
2022-07-28
1.4K0
跟我学Rx编程——Concat
业务逻辑 游戏场景进入后,根据具体业务场景和活动进程,可能需要弹出若干的弹框,比如邀请好友获得的奖励、离线收益、瓜分大奖等等。 这些弹框必须逐个弹出,不能同时弹出。 常规实现 由于弹框的逻辑是异步返回,所以免不了使用回调机制 伪代码 OpenDialog1(result1=>{ OpenDialog2(result2=>{ …… }) }) 当然实际代码会比这个更复杂,需要更多的判断和分叉 使用Rx实现 伪代码 let dialogs = [] dialogs.push(rx.fromDi
我不是码神
2022-07-28
2540
用C++实现一个简易的golang 的Slice
由于C++的下标运算符的重写没办法实现和golang一致的语法,所以只能退而求其次,使用括号运算符代替。
我不是码神
2022-07-28
2100
在OBS上进行H265推流
OBS官方明确表态不支持H265,貌似以后也不会支持,什么原因呢?可以看官方论坛上的吵架
我不是码神
2022-07-28
1.9K0
Windows10下使用WSL“愉快”编译FFMPEG(带x265编码器)
之所以在愉快二字上加引号,相信编译过FFMPEG的同学会深有体会,根本不存在愉快二字,编译FFMPEG是痛苦,尤其是在Windows环境下面。打开搜索引擎随手搜索一把编译FFMPEG,就会有很多文章,我相信即使你老老实实按照文章的步骤来编译,也会心里骂娘的。
我不是码神
2022-07-28
1.3K0
取组合数问题
现有一个数组[1,2,3,4……]。里面数字是任意的不重复的。现在要从里面取出N个数字组成一组,导出这些数组。
我不是码神
2022-07-28
2200
Flutter中是使用RxDart代替Stateful
其中_currentIndex记录了当前tab的索引,onTap中调用setState来更新视图,没毛病。
我不是码神
2022-07-28
1.2K2
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档