自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 v5 实现动态时移播放

但是弊端是无法动态指定时间,v5 中实现了动态指定开始时间,每个订阅者都可以在不同的开始时间进行播放。下面是演示视频,最右侧是实时播放,中间是 5s 前画面,最左侧是 10s 前画面,缓冲等待是服务器动态扩大缓冲的过程。在 v4 中有一个时光回溯功能,可以在配置中指定缓存时间,然后播放时可以指定 submode: 2来播放。也可以在发布者中配置 buffertime 使得一开始就缓存足够多的数据,此时订阅者就无需再等待了。将缓存中的关键帧记录下来,订阅者根据需要来从指定的关键帧位置进行读取。

2024-06-28 08:42:36 294

原创 内存分配器性能优化

在之前我们提到采用自定义的内存分配器来解决防止频繁 make 导致的 gc 问题。gc 问题本质上是 CPU 消耗,而内存分配器本身如果产生了大量的 CPU 消耗那就得不偿失。经过测试初代内存分配器实现过于简单,产生了很多 CPU 消耗,因此必须优化内存分配器的性能。

2024-06-11 19:23:36 737

原创 Monibuca Console新特性介绍

服务器面对的环境千奇百怪,定位问题消耗了大量的人力成本,如何减少这方面的成本呢,最佳方式就是有一套优秀的排障工具,而可视化分析显得尤为重要。m7s console 将致力于打造一款方便实用且美观的可视化工具,将 m7s 实例的运行状况进行探查和监控,帮助我们成功找到问题的关键,和关键的问题。下面简单介绍一下已经开发的功能,并附带视频演示。

2024-05-24 11:17:15 175 1

原创 Monibuca v5 实现零拷贝 BufReader

在开发高 IO 的程序都会面临一个问题,就是如何提供从网络层读取数据的性能。

2024-04-22 11:24:24 369

原创 Monibuca v5 实现优雅内存分配器

free(mem)这种分配方式最广为人知,也是最简洁易懂的,因此如果能实现这种方式,是最佳的。设想一下问题:如何在Free的时候知道是哪块内存?如果把这个字节数组直接存储就会回到v4的版本,显然不是我们想要的。我们想要的是在一块大的数组中切割分配,这样才能有效利用内存。

2024-04-22 11:15:42 332

原创 重新定义流媒体服务器

背景随着全民直播时代的到来,以及最近疫情的爆发,在线教育行业又变的炙手可热,成为了新的风口。这两者的背后都是依靠着 CDN 以及视频云等基础服务,而这些基础服务的底层又依靠着流媒体服务器这种有着“悠久历史”的特殊服务器软件。为什么说特殊呢,因为这种服务器软件的架构和传统的 Web 服务器有很大的差别。在直播系统或者视频会议系统中,有三大件构成:推流器——采集、编码、协议封包 流媒体服务器——协议解包封包、转发 播放器——协议解包、解码、渲染这三大件有着不同的技术领域,而今天的主角就是..

2020-06-02 18:04:35 1251 1

原创 优雅的模块化后台界面渲染

在开发Monibuca的过程中,为了方便访问每一个插件的界面,我们需要将所有插件的自定义的界面集中在一起显示。 我们需要实现一下功能:为了方便访问每一个插件的界面,我们需要将所有插件的自定义的界面集中在一起显示。我们需要实现一下功能:在主界面中可以动态加载插件的界面,并实现切换可以将参数传入插件界面中。显示插件界面要快速流畅。可供选择的方案有:使用iframe加载各个插件的界面...

2020-03-11 15:38:52 521

原创 Go语言实现的流媒体服务器开发框架

项目主页:http://monibuca.com/背景市面上的流媒体服务器不可谓不多,从本人的第一份工作起,就一直接触和研究了形形色色的流媒体服务器,从最早的FCS(全称Flash Communication Server),后来改名为FMS(全称Flash Media Server),到Red5(java语言开发),到CrtmpServer(C++开发),让我对流媒体服务器的基本原理有了深刻...

2020-02-21 17:37:10 5103 2

原创 RxJS的另外四种实现方式(后记)—— 同时实现管道和链式编程

目录RxJS的另外四种实现方式(序)RxJS的另外四种实现方式(一)——代码最小的库RxJS的另外四种实现方式(二)——代码最小的库(续)RxJS的另外四种实现方式(三)——性能最高的库RxJS的另外四种实现方式(四)——性能最高的库(续)RxJS的另外四种实现方式(五)——使用生成器实现RxJS的另外四种实现方式(六)——使用Stream类实现github地址https://g...

2018-09-23 11:49:37 1811

原创 RxJS的另外四种实现方式(六)——使用Stream类实现

接上一篇 RxJS的另外四种实现方式(五)——使用生成器实现该实现方式与之前几种不同的,该实现方式仅针对Nodejs环境。在Nodejs环境中,提供了Stream类,包括Readable、Transform、Writeable等子类都是可扩展的。从字面上看,正好对应Rx中的生产者、传递者、消费者。实现该库的起因是,一次在Nodejs中需要在koa框架里面提供event-stream功能,目...

2018-09-22 10:51:55 490

原创 RxJS的另外四种实现方式(五)——使用生成器实现

接上一篇RxJS的另外四种实现方式(四)——性能最高的库(续)js的生成器一般情况下使用场景很少,开发者接触的不是很多。不了解的可以先行查看js语法了解。这里把其中的执行顺序图解一下调用方 数据源next(value)---------------------...

2018-09-21 20:42:23 319

原创 RxJS的另外四种实现方式(一)——代码最小的库

接上篇RxJS的另外四种实现方式(序)起因想到这个库的原因,是看了callbag库想到的,callbag库的原理大家可以自己找资料了解,我就不多赘述,我只谈谈我的理解。callbag的设计思路是把消费者和生产者合并成一个,通过互相传递一个回调函数实现通讯。看过部分操作符实现原理的同学肯定觉得逻辑十分难解,因为过多的回调使得你的脑回路不够用了。我用了一些库函数后,我意识到,其实不需要如此复杂...

2018-09-19 23:16:36 284

原创 RxJS的另外四种实现方式(三)——性能最高的库

接上篇 RxJS的另外四种实现方式(二)——代码最小的库(续)代码最小的库rx4rx-lite虽然在性能测试中超过了callbag,但和most库较量的时候却落败了,于是我下载了most库,要解开most库性能高的原因。我们先上一组测试数据,这是在我的windows10 上面跑的dataflow for 1000000 source eventslibop/ssamples...

2018-09-19 22:50:15 363

原创 RxJS的另外四种实现方式(二)——代码最小的库(续)

接上篇 RxJS的另外四种实现方式(一)——代码最小的库上篇我们展示了生产者interval和操作符filter的实现,接下来我们看一下消费者subscriber的实现callbag的实现const subscribe = (listener = {}) => source => { if (typeof listener === "function") { li...

2018-09-19 22:49:20 184

原创 RxJS的另外四种实现方式(四)——性能最高的库(续)

接上篇RxJS的另外四种实现方式(序)起因想到这个库的原因,是看了callbag库想到的,callbag库的原理大家可以自己找资料了解,我就不多赘述,我只谈谈我的理解。callbag的设计思路是把消费者和生产者合并成一个,通过互相传递一个回调函数实现通讯。看过部分操作符实现原理的同学肯定觉得逻辑十分难解,因为过多的回调使得你的脑回路不够用了。我用了一些库函数后,我意识到,其实不需要如此复杂...

2018-09-19 22:46:48 413

原创 RxJS的另外四种实现方式(序)

RxJS的另外四种实现方式(序)背景RxJs的四种实现方式Rx实现的关键功能Rx的两种书写模式本文适合人群:了解Rx编程人士、Javascript发烧友本文涉及概念:响应型编程、NodeJs、函数式编程背景本人自从读过一篇来自Info的《函数式反应型编程(FRP) —— 实时互动应用开发的新思路》后便迷恋上了Rx,甚至以当时的Rxjs库移植了一套适用于Flash的AS3.0的Rx库...

2018-09-19 10:37:17 354

原创 利用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 1035

转载 如何启动一个AIR移动应用及向它传递参数

作者总结:移动AIR应用在启动时会有一个事件派发:NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE,onInvoke);借助该事件可以得到调用方传递过来的参数。以此可以实现邀请注册,有奖推荐等功能。在AIR移动应用中,至少有两种方案可以以程序启动一个AIR移动应用并传参过去

2014-11-06 17:53:34 676

原创 今天解决了一个C++中动态二维数组的问题

在CArray里面嵌套一个CArray编译不通过,在赋值的时候说赋值操作是私有的,

2014-05-09 08:51:08 806

原创 终于把邮件发出去了

今天调试C#发送企业QQ的邮件,死活不成功,后来上网搜索了半天,终于找到办法了,

2014-05-07 14:09:48 1082

原创 flash刮刮卡效果实现

最近要做一个刮刮卡的功能,一开始考虑使用flash的mask功能,实际操作后发现,mask不能识别线条,填充才起作用,这可如何是好。后来灵机一动,想起flash里面有个不常用到的功能blendMode,(混合模式),里面有个擦除效果,试了一下果然能行。哈哈大功告成

2014-03-28 14:56:55 1684

原创 终于编译成功crtmp

由于red5效率太低,fms又收费,遂研究起crtmp,这东西文档太少了,完全靠摸索啊,扩展又必须用C++写,郁闷,好在经过努力终于在windows和linux平台下编译通过并运行成功,由于项目用到了curl,编译遇到问题,在link的时候一直出错,后来上网查了才知道curl链接问题,坑死人了

2014-03-28 14:38:09 796

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除