首页 文章 精选 留言 我的

精选列表

搜索[服务器],共10000篇文章
优秀的个人博客,低调大师

Monibuca v4.7.2 发布 —— 开源 go 语言流媒体服务器

发布摘要 新增av1和opus轨道类型 支持接受OBS 30.0+的WHIP(webrtc)推流,(h264+opus) 支持ffmpeg 6.1+以及OBS通过rtmp扩展协议的h265以及av1推拉流 修复若干bug 引擎和插件版本 engine v4.14.3 hls v4.3.7 hdl v4.1.10 rtsp v4.3.3 rtmp v4.2.9 webrtc v4.2.3 record v4.4.5 ps v4.1.4 详细说明 使用OBS的WHIP推流 OBS 30.0正式支持WHIP推流方式,因此需要先安装OBS 30.0以上版本。 OBS配置 注意事项 OBS目前只支持udp推流方式,因此需要配置webrtc插件为udp端口方式。 webrtc: port:udp:9000-10000 OBS目前音频轨道在WHIP中只能使用opus编码。由于rtmp协议不支持opus编码格式,因此在播放含有opus编码的流的时候,只能使用webrtc方式,或者rtsp协议。 使用OBS推送av1视频 OBS的av1格式可以通过rtmp扩展协议推送 OBS配置 经过测试如果关键帧间隔设置为0,会导致只有开头有关键帧,因此这里可以设置为1s。 ffmpeg推送h265/av1 ffmpeg 6.1以上支持rtmp扩展协议,下面是命令行示例(其中xxx代表视频源,即视频文件地址或者远程流地址) ffmpeg-ixxx-c:vh265-c:aaac-fflvrtmp://localhost/live/test ffmpeg-ixxx-c:vav1-c:aaac-fflvrtmp://localhost/live/test 播放av1视频 通过OBS、ffmpeg 6.1推送后,目前支持的播放方式: webrtc ffplay 6.1以上通过rtmp/rtsp协议播放

优秀的个人博客,低调大师

Monibuca v4.6.5 发布 —— 开源 Go 语言流媒体服务器

发布摘要 启动工程增加对流的发布订阅的单元测试和基准测试 修复发布和订阅并发创建流产生的panic 修复IdleTimeout无效问题 修复订阅者阻塞导致读写并发问题 preview插件修复https默认端口 gb28181插件PR合并 升级模块 升级后版本 engine 4.13.5 gb28181 4.3.6 hls 4.3.1 preview 4.1.2 record 4.3.7 详细说明 单元测试和基准测试 测试用例所在目录:github.com/langhuihui/monibuca工程下的test目录 推荐使用vscode打开工程,方便一键测试单个用例,也可以通过vscode侧边栏里的单元测试栏目管理。 TestPubAndSub funcTestPubAndSub(t*testing.T){ t.Cleanup(FreeEngine) UseEngine() t.Run("publish",func(t*testing.T){ t.Parallel() varpubUnitTestPublisher unitTestPlugin.Publish("test/001",&pub) }) t.Run("subscribe",func(t*testing.T){ t.Parallel() varsubUnitTestSubsciber sub.TB=t err:=unitTestPlugin.Subscribe("test/001",&sub) iferr!=nil{ t.Fatal(err) }else{ sub.PlayRaw() } }) } 该用例会启动一个发布者和一个订阅者,发布者将会写入假数据,订阅者读取后会校验数据是否正确。 BenchmarkPubAndSub funcBenchmarkPubAndSub(b*testing.B){ b.Cleanup(FreeEngine) UseEngine() fori:=0;i<10;i++{ i:=i gofunc(iint){ varpubUnitTestPublisher unitTestPlugin.Publish(fmt.Sprintf("testb/%d",i),&pub) }(i) gob.RunParallel(func(pb*testing.PB){ varsubUnitTestSubsciber sub.TB=b err:=unitTestPlugin.Subscribe(fmt.Sprintf("testb/%d",i),&sub) iferr!=nil{ //b.Fatal(err) }else{ sub.PlayRaw() } }) } time.Sleep(time.Second*10) } 该用例为基准测试,启动10个发布者,每个流会批量订阅,以测试并发性能以及稳定性。 TestSlowSubscriber funcTestSlowSubscriber(t*testing.T){ t.Cleanup(FreeEngine) UseEngine() varpubUnitTestPublisher unitTestPlugin.Publish("test/slow",&pub) varsuberSlowSubsciber unitTestPlugin.Subscribe("test/slow",&suber) suber.PlayRaw() } 这个用例会模拟一个订阅者被阻塞(sleep)后导致发布者写入的位置追上,此时engine通过标记这个写入点废弃来避免并发读写问题,废弃后订阅者如果被唤醒就会自动停止订阅。 通常出现这种情况是订阅者进行了某种耗时操作,比如写文件,或者网络阻塞等。 其他修复问题 并发创建流 修复如下: funcfindOrCreateStream(streamPathstring,waitTimeouttime.Duration)(s*Stream,createdbool){ p:=strings.Split(streamPath,"/") iflen(p)<2{ log.Warn(Red("StreamPathFormatError:"),streamPath) returnnil,false } actual,loaded:=Streams.LoadOrStore(streamPath,&Stream{ Path:streamPath, AppName:p[0], StreamName:strings.Join(p[1:],"/"), StartTime:time.Now(), +Logger:log.LocaleLogger.With(zap.String("stream",streamPath)), +timeout:time.NewTimer(waitTimeout), }) ifs:=actual.(*Stream);loaded{ s.Debug("StreamFound") returns,false }else{ -s.timeout=time.NewTimer(waitTimeout) s.Subscribers.Init() -s.Logger=log.LocaleLogger.With(zap.String("stream",streamPath)) -s.Info("created") s.actionChan.Init(1) +s.Info("created") gos.run() returns,true } } 原理:当并发调用findOrCreateStream函数时,前者尚未来得及对Logger赋值,后者就调用了s.Debug导致空指针错误。 修复读写并发问题 这个问题在前面的单元测试中已经提到,就是订阅者阻塞引起的。 订阅者阻塞后,读取点移动很慢或者不移动,导致写入点追上 由于RingBuffer是由链表结构实现,因此很容易将节点剥离主环 废弃后,这个订阅者将无法再读取主环内容,也将遭到抛弃 抛弃 https默认端口 默认https端口已经设置为8443,preview插件在选择WebTransport的时候跳转错了端口号。 https证书已经嵌入到程序里面,可以直接设置host文件127.0.0.1 local.monibuca.com访问https://local.monibuca.com:8443/preview/ gb28181 合并PR #95 本次PR主要修改了定时任务相关功能,包括: 定时删除超时设备 修改注册有效期配置默认值为3600s 设备状态变更处理 具体可以看代码变动

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册