- 博客(22)
- 收藏
- 关注
原创 v5 实现动态时移播放
但是弊端是无法动态指定时间,v5 中实现了动态指定开始时间,每个订阅者都可以在不同的开始时间进行播放。下面是演示视频,最右侧是实时播放,中间是 5s 前画面,最左侧是 10s 前画面,缓冲等待是服务器动态扩大缓冲的过程。在 v4 中有一个时光回溯功能,可以在配置中指定缓存时间,然后播放时可以指定 submode: 2来播放。也可以在发布者中配置 buffertime 使得一开始就缓存足够多的数据,此时订阅者就无需再等待了。将缓存中的关键帧记录下来,订阅者根据需要来从指定的关键帧位置进行读取。
2024-06-28 08:42:36
342
原创 内存分配器性能优化
在之前我们提到采用自定义的内存分配器来解决防止频繁 make 导致的 gc 问题。gc 问题本质上是 CPU 消耗,而内存分配器本身如果产生了大量的 CPU 消耗那就得不偿失。经过测试初代内存分配器实现过于简单,产生了很多 CPU 消耗,因此必须优化内存分配器的性能。
2024-06-11 19:23:36
845
原创 Monibuca Console新特性介绍
服务器面对的环境千奇百怪,定位问题消耗了大量的人力成本,如何减少这方面的成本呢,最佳方式就是有一套优秀的排障工具,而可视化分析显得尤为重要。m7s console 将致力于打造一款方便实用且美观的可视化工具,将 m7s 实例的运行状况进行探查和监控,帮助我们成功找到问题的关键,和关键的问题。下面简单介绍一下已经开发的功能,并附带视频演示。
2024-05-24 11:17:15
273
1
原创 Monibuca v5 实现优雅内存分配器
free(mem)这种分配方式最广为人知,也是最简洁易懂的,因此如果能实现这种方式,是最佳的。设想一下问题:如何在Free的时候知道是哪块内存?如果把这个字节数组直接存储就会回到v4的版本,显然不是我们想要的。我们想要的是在一块大的数组中切割分配,这样才能有效利用内存。
2024-04-22 11:15:42
394
原创 重新定义流媒体服务器
背景随着全民直播时代的到来,以及最近疫情的爆发,在线教育行业又变的炙手可热,成为了新的风口。这两者的背后都是依靠着 CDN 以及视频云等基础服务,而这些基础服务的底层又依靠着流媒体服务器这种有着“悠久历史”的特殊服务器软件。为什么说特殊呢,因为这种服务器软件的架构和传统的 Web 服务器有很大的差别。在直播系统或者视频会议系统中,有三大件构成:推流器——采集、编码、协议封包 流媒体服务器——协议解包封包、转发 播放器——协议解包、解码、渲染这三大件有着不同的技术领域,而今天的主角就是..
2020-06-02 18:04:35
1337
1
原创 优雅的模块化后台界面渲染
在开发Monibuca的过程中,为了方便访问每一个插件的界面,我们需要将所有插件的自定义的界面集中在一起显示。 我们需要实现一下功能:为了方便访问每一个插件的界面,我们需要将所有插件的自定义的界面集中在一起显示。我们需要实现一下功能:在主界面中可以动态加载插件的界面,并实现切换可以将参数传入插件界面中。显示插件界面要快速流畅。可供选择的方案有:使用iframe加载各个插件的界面...
2020-03-11 15:38:52
580
原创 Go语言实现的流媒体服务器开发框架
项目主页:http://monibuca.com/背景市面上的流媒体服务器不可谓不多,从本人的第一份工作起,就一直接触和研究了形形色色的流媒体服务器,从最早的FCS(全称Flash Communication Server),后来改名为FMS(全称Flash Media Server),到Red5(java语言开发),到CrtmpServer(C++开发),让我对流媒体服务器的基本原理有了深刻...
2020-02-21 17:37:10
5191
2
原创 RxJS的另外四种实现方式(后记)—— 同时实现管道和链式编程
目录RxJS的另外四种实现方式(序)RxJS的另外四种实现方式(一)——代码最小的库RxJS的另外四种实现方式(二)——代码最小的库(续)RxJS的另外四种实现方式(三)——性能最高的库RxJS的另外四种实现方式(四)——性能最高的库(续)RxJS的另外四种实现方式(五)——使用生成器实现RxJS的另外四种实现方式(六)——使用Stream类实现github地址https://g...
2018-09-23 11:49:37
1899
原创 RxJS的另外四种实现方式(六)——使用Stream类实现
接上一篇 RxJS的另外四种实现方式(五)——使用生成器实现该实现方式与之前几种不同的,该实现方式仅针对Nodejs环境。在Nodejs环境中,提供了Stream类,包括Readable、Transform、Writeable等子类都是可扩展的。从字面上看,正好对应Rx中的生产者、传递者、消费者。实现该库的起因是,一次在Nodejs中需要在koa框架里面提供event-stream功能,目...
2018-09-22 10:51:55
528
原创 RxJS的另外四种实现方式(五)——使用生成器实现
接上一篇RxJS的另外四种实现方式(四)——性能最高的库(续)js的生成器一般情况下使用场景很少,开发者接触的不是很多。不了解的可以先行查看js语法了解。这里把其中的执行顺序图解一下调用方 数据源next(value)---------------------...
2018-09-21 20:42:23
365
原创 RxJS的另外四种实现方式(一)——代码最小的库
接上篇RxJS的另外四种实现方式(序)起因想到这个库的原因,是看了callbag库想到的,callbag库的原理大家可以自己找资料了解,我就不多赘述,我只谈谈我的理解。callbag的设计思路是把消费者和生产者合并成一个,通过互相传递一个回调函数实现通讯。看过部分操作符实现原理的同学肯定觉得逻辑十分难解,因为过多的回调使得你的脑回路不够用了。我用了一些库函数后,我意识到,其实不需要如此复杂...
2018-09-19 23:16:36
325
原创 RxJS的另外四种实现方式(三)——性能最高的库
接上篇 RxJS的另外四种实现方式(二)——代码最小的库(续)代码最小的库rx4rx-lite虽然在性能测试中超过了callbag,但和most库较量的时候却落败了,于是我下载了most库,要解开most库性能高的原因。我们先上一组测试数据,这是在我的windows10 上面跑的dataflow for 1000000 source eventslibop/ssamples...
2018-09-19 22:50:15
414
原创 RxJS的另外四种实现方式(二)——代码最小的库(续)
接上篇 RxJS的另外四种实现方式(一)——代码最小的库上篇我们展示了生产者interval和操作符filter的实现,接下来我们看一下消费者subscriber的实现callbag的实现const subscribe = (listener = {}) => source => { if (typeof listener === "function") { li...
2018-09-19 22:49:20
220
原创 RxJS的另外四种实现方式(四)——性能最高的库(续)
接上篇RxJS的另外四种实现方式(序)起因想到这个库的原因,是看了callbag库想到的,callbag库的原理大家可以自己找资料了解,我就不多赘述,我只谈谈我的理解。callbag的设计思路是把消费者和生产者合并成一个,通过互相传递一个回调函数实现通讯。看过部分操作符实现原理的同学肯定觉得逻辑十分难解,因为过多的回调使得你的脑回路不够用了。我用了一些库函数后,我意识到,其实不需要如此复杂...
2018-09-19 22:46:48
459
原创 RxJS的另外四种实现方式(序)
RxJS的另外四种实现方式(序)背景RxJs的四种实现方式Rx实现的关键功能Rx的两种书写模式本文适合人群:了解Rx编程人士、Javascript发烧友本文涉及概念:响应型编程、NodeJs、函数式编程背景本人自从读过一篇来自Info的《函数式反应型编程(FRP) —— 实时互动应用开发的新思路》后便迷恋上了Rx,甚至以当时的Rxjs库移植了一套适用于Flash的AS3.0的Rx库...
2018-09-19 10:37:17
395
原创 利用C#特性优化AMF反序列化类
public delegate T AmfReadType(AMF0Reader instance,bool withType = false); private static readonly Dictionary ReadMap = new Dictionary(); static AMF0Reader() { v
2015-06-09 12:18:04
1115
转载 如何启动一个AIR移动应用及向它传递参数
作者总结:移动AIR应用在启动时会有一个事件派发:NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE,onInvoke);借助该事件可以得到调用方传递过来的参数。以此可以实现邀请注册,有奖推荐等功能。在AIR移动应用中,至少有两种方案可以以程序启动一个AIR移动应用并传参过去
2014-11-06 17:53:34
737
原创 flash刮刮卡效果实现
最近要做一个刮刮卡的功能,一开始考虑使用flash的mask功能,实际操作后发现,mask不能识别线条,填充才起作用,这可如何是好。后来灵机一动,想起flash里面有个不常用到的功能blendMode,(混合模式),里面有个擦除效果,试了一下果然能行。哈哈大功告成
2014-03-28 14:56:55
1737
原创 终于编译成功crtmp
由于red5效率太低,fms又收费,遂研究起crtmp,这东西文档太少了,完全靠摸索啊,扩展又必须用C++写,郁闷,好在经过努力终于在windows和linux平台下编译通过并运行成功,由于项目用到了curl,编译遇到问题,在link的时候一直出错,后来上网查了才知道curl链接问题,坑死人了
2014-03-28 14:38:09
839
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人