首页 文章 精选 留言 我的

精选列表

搜索[流媒体],共1192篇文章
优秀的个人博客,低调大师

Monibuca v4.6.1 发布—— 开源 Go 语言流媒体开发框架

通过官网下载二进制文件 或者 git clone https://github.com/langhuihui/monibuca 获得最新版 1 新增LL-HLS支持 该协议为苹果公司推出的低延迟HLS协议,本次更新新增了对该协议播放支持。 同rtsp库一样,采用了第三方库来实现:「github.com/bluenviron/gohlslib」 1.1 使用方法 通过访问形如http://localhost:8080/llhls/live/test/index.m3u8来播放。 其中「live/test」为streamPath,可以替换成实际的值 1.2 插件配置 在llhls下可以配置http配置,用于修改端口号。插件配置方式可以参考文档 1.3 源码说明 llhls相关代码位于「github.com/Monibuca/plugin-hls」 的 「llhls.go」 中。hls和llhls两个插件共用一个代码仓库,因此引入hls时也同时引入了llhls插件。 2 新增HLS.js测试页面 HLS.js测试页面是将hls.js的编译后的代码嵌入到了hls插件仓库中,以方便调试hls流使用。 2.1 访问地址 http://localhost:8080/hls/index.html 该页面也可以用于测试llhls 3 新增对RTMPS协议支持 该协议为RTMP协议的衍生协议,是在TCP基础上增加了TLS安全加固,原理类似HTTPS。 该协议支持是rtmp插件的增强。需要通过配置TLS端口来开启该功能。 3.1 配置 rtmp: tcp: listenaddrtls::4443 3.2 推流测试 ffmpeg-isource-fflvrtmps://localhost:4443/live/test 如果配置成443端口,则可以省略端口号 3.3 对外推拉流 已经支持,既可以在配置pull或者push中使用rtmps的远程地址 4 其他更新内容 4.1 优化了HLS纯转发模式的资源消耗 ❝ 当只需要将HLS拉流转发时,可以使用纯转发模式 纯转发模式由于不需要解析HLS协议中的TS格式,因此对资源消耗比较小。 通过配置HLS插件的 「relaymode: 1」开启❞ 4.2 修复了当开启时光回溯功能时的内存泄漏 具体原因是,在进行时间戳判断时忽略了当时间戳超过最大值时的情况,导致ringbuffer无限扩大 ❝ 所谓时光回溯功能,是指可以缓存较多的数据,以订阅当前画面更早一些的画面 通过配置「publish」配置中的「buffertime」来开启时光回溯 订阅流时需要指定订阅模式,即需要在订阅时加参数?mode=2 如果需要修改参数名称(有时可能会有冲突,可以通过配置submodeargname 来改变❞ 4.3 WebRTC插件测试页面运行URL中带有参数 为了更方便测试WebRTC功能,允许在访问测试页面时,带上参数 4.3.1 推流测试页面 「http://localhost:8080/webrtc/test/publish?streamPath=live/test」 可以推送到「live/test」。不传该参数则推送到「live/webrtc」 测试房间功能是也可以带上token参数 4.3.2 播放测试页面 「http://localhost:8080/webrtc/test/subscribe?streamPath=live/test」 可以订阅「live/test」的流。不传该参数则订阅「live/webrtc」 4.4 Stream中增加NeverTimeout属性 该属性设置成true可以是的流不再判断超时,保持流永远存活,其目的是有些流并不会产生AudioTrack和VideoTrack,比如纯转发流,或者Room的用于广播消息的流,此时可以在发布成功后,对流设置这个属性

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

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 设备状态变更处理 具体可以看代码变动

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

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

新增重要功能 增加时光回溯功能 所谓时光回溯功能,就是加大视频流在服务器的缓存,可以通过配置publish下的buffertime来控制缓存多久。例如可以缓存7秒视频,那么服务器就会至少缓存7秒音视频数据,当我们需要订阅7s前的数据时,可以在订阅参数后面加上?mode=2实现从7秒前开始订阅。 启用该功能将会大大增加内存消耗,仅在特殊场合使用 订阅模式参数 订阅模式分为0、实时模式,会自动追赶。1、不追赶,防止视频跳跃。2、时光回溯模式,即从缓存最大的历史数据开始订阅。 订阅模式可以在配置项subscribe下指定,比如submode: 2 也可以通过订阅时附加到订阅地址的后面实现对单个订阅流的模式指定。如果URL参数发生冲突,比如本身需要用到mode这个参数,那么可以通过配置文件对submodeargname的定制这个参数名。 内存回收机制 本次修改最大的地方是修改了大量数据结构,简化代码同时,增加了对内存回收的机制,实现减少gc,在高并发下取得更高性能的效果。 后面会详细说明 增加对时间长度的配置格式解析 即可以配置带有时间单位的配置,例如10秒,可以配置为10s。数据结构使用time.Duration来接收 解决首屏渲染时无音频问题 该问题是由于设计音视频分轨后,音频轨道不好确定缓存长度所致,在本次升级中,采用了视频轨道得到关键帧后广播给音频轨道,使得音频轨道也能参与首屏渲染的读取过程中。该问题还会衍生出对外推流时开头没有音频数据导致对方判定无音频轨道的问题。此外也影响音视频时间戳和音视频同步等一系列问题。 升级指引 配置文件格式修改 配置文件中涉及到时间的地方,全部统一修改成带单位的形式!! 比如delayclosetimeout : 10 需要修改成 delayclosetimeout : 10s 时间单位可以用s(秒)m(分钟)ms(毫秒)等 二次开发插件 对于二次开发来说,本次需要适配一些定义的修改。 在接收音视频数据的地方,又原来的*AudioFrame和*VideoFrame修改为AudioFrame和VideoFrame。结构体中包含了*AVFrame和时间戳信息(为校准后的时间戳) VideoDecConf和AudioDecConf 内容变成avcc格式的序列头,对于视频轨道增加了可以接受common.ParamaterSets的事件,该结构体是一个数组,包含了SPS、PPS 原先的AVFrame中的Raw属性已修改为AUList,并且从数组改为了链表。如果需要循环读取其值可以通过链表提供的Range函数 对于Track中的WriteAVCC方法,其入参第二项修改为一个链表结构。该结构根据情况可以从BytesPool中通过Get或者GetShell获取到。 Track中增加了BytesPool属性,用于内存回收,可以在NewXXXTrack时传入,也就是说,多个Track可以共用一个BytesPoll。但是需要注意的是,BytesPoll必须只能在同一个goroutine中使用(无锁)。不同的goroutine必须单独创建BytesPoll。 bug修复 当Streams.Get(streamPath)取不到值时会抛出panic导致程序崩了 · Issue #69 · Monibuca/engine (github.com) rtmp对外推拉时将参数带入推拉命令中(透传) dts生成时遇到pts超过最大值时就会出错 在rtmp推拉停止时读写AMF进行判断防止panic rtmp插件中修复类型3的chunk块也需要解析扩展时间戳的问题(该问题会引发了rtmp推拉播放中出现错误,卡顿、花屏的情况) 源码修改说明 Media结构体去除了泛型 删除了ring_av,AVRing的读写逻辑分离,增加了AVRingReader结构体 AVFrame去除泛型,音视频数据由数组改为链表 去除PlayContext结构体,由AVRingReader代替 增加通用的内存池和可回收元素的泛型链表实现 rtmp插件代码大幅优化,减少内存申请 附:内存回收机制示意图

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

Jessibuca 3.0 发布,纯 H5 流媒体播放器

无插件 基于 MediaSource/WebAssembly(wasm) 实现的纯 JavaScript 直播播放器 低延时 能够在 PC\Android\iOS 浏览器 Webview 内实现2秒以内低延迟直播播放 自带控制条 可以通过配置显示/隐藏底部控制条 支持创建多个播放实例 支持创建多个播放实例,WebWorker 多核解码,提升多画面播放性能。 支持多种视频缩放模式 支持填充,等比,等比缩放 3 种视频缩放模式 支持音量调节 支持 0-1 的音量调节 支持H264/H265 软解码 H.264/H.265+AAC/PCMA/PCMU 流,WebGL 视频渲染,WebAudio 音频播放。 支持 MediaSource 硬解码 支持 MediaSource 硬解码 H.264 视频。(Safari on iOS 不支持) 支持 Webcodecs 硬解码 支持 Webcodecs 硬解码 H.264 视频。(需在 chrome 94 版本以上,需要 https 或者 localhost 环境) 支持视频录制 支持录制 MP4 和 WebM 格式的视频录制。(基于 MediaRecorder) 新官方网站:https://j.m7s.live

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

基于 VLC 构建轻量级流媒体处理管道:从转码到云原生实践

在多媒体开发与运维中,VLC 通常被当作一款无所不播的桌面播放器。然而,其背后的 libVLC 库和强大的命令行接口,实际上是一个完整的、跨平台的多媒体处理框架。当我们需要在服务端或边缘节点上快速搭建一个轻量级的音视频处理管道,又不希望引入 FFmpeg 的复杂构建链路时,VLC 往往能成为一个低调但高效的替代方案。本文将围绕几个典型技术场景,探讨如何将 VLC 嵌入到云时代的开发流程中。

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

Monibuca v5.0.2 发布,一站式开源 Go 语言流媒体框架

v5.0.2 (2025-06-04) 🎉 新功能 (New Features) 核心功能 「WebRTC TCP支持」 - 禁用了TCP WebRTC的重放保护功能,降低了延迟 「配置系统增强」 - 支持更多配置格式(支持配置项中插入-、_和大写字母),提升配置灵活性 「原始数据检查」 - 新增原始数据无帧检查功能,提升数据处理稳定性 「MP4循环读取」 - 支持MP4文件循环读取功能(通过配置 pull 配置下的 loop 配置) 「S3插件」 - 新增S3存储插件,支持云存储集成 「TCP读写缓冲配置」 - 新增TCP连接读写缓冲区配置选项(针对高并发下的吞吐能力增强) 「拉流测试模式」 - 新增拉流测试模式选项(可以选择拉流时不发布),便于调试和测试 「SEI API格式扩展」 - 扩展SEI API支持更多数据格式 「Hook扩展」 - 新增更多Hook回调点,增强扩展性 「定时任务插件」 - 新增crontab定时任务插件 「服务器抓包」 - 新增服务器抓包功能(调用tcpdump),支持TCP和UDP协议,API 说明见 tcpdump GB28181协议增强 「平台配置支持」 - GB28181现在支持从config.yaml中添加平台和平台通道配置 「子码流播放」 - 支持GB28181子码流播放功能 「SDP优化」 - 优化invite SDP中的mediaip和sipip处理 「本地端口保存」 - 修复GB28181本地端口保存到数据库的问题 MP4功能增强 「FLV格式下载」 - 支持从MP4录制文件下载FLV格式 「下载功能修复」 - 修复MP4下载功能的相关问题 「恢复功能修复」 - 修复MP4恢复功能 🐛 问题修复 (Bug Fixes) 网络通信 「TCP读取阻塞」 - 修复TCP读取阻塞问题(增加了读取超时设置) 「RTSP内存泄漏」 - 修复RTSP协议的内存泄漏问题 「RTSP音视频标识」 - 修复RTSP无音频或视频标识的问题 GB28181协议 「任务管理」 - 使用task.Manager解决注册处理器的问题 「计划长度」 - 修复plan.length为168的问题 「注册频率」 - 修复GB28181注册过快导致启动过多任务的问题 「联系信息」 - 修复GB28181获取错误联系信息的问题 RTMP协议 「时间戳处理」 - 修复RTMP时间戳开头跳跃问题 🛠️ 优化改进 (Improvements) Docker支持 「tcpdump工具」 - Docker镜像中新增tcpdump网络诊断工具 Linux平台优化 「SIP请求优化」 - Linux平台移除SIP请求中的viaheader 👥 贡献者 (Contributors) langhuihui pggiroro banshan v5.0.1 (2025-05-21) 🎉 新功能 (New Features) WebRTC增强 「H265支持」 - 新增WebRTC对H265编码的支持,提升视频质量和压缩效率 GB28181协议增强 「订阅功能扩展」 - GB28181模块现在支持订阅报警、移动位置、目录信息 「通知请求」 - 支持接收通知请求,增强与设备的交互能力 Docker优化 「FFmpeg集成」 - Docker镜像中新增FFmpeg工具,支持更多音视频处理场景 「多架构支持」 - 新增Docker多架构构建支持 🐛 问题修复 (Bug Fixes) Docker相关 「构建问题」 - 修复Docker构建过程中的多个问题 「构建优化」 - 优化Docker构建流程,提升构建效率 RTMP协议 「时间戳处理」 - 修复RTMP第一个chunk类型3需要添加时间戳的问题 GB28181协议 「路径匹配」 - 修复GB28181模块中播放流路径的正则表达式匹配问题 MP4处理 「stsz box」 - 修复stsz box采样大小的问题 「G711音频」 - 修复拉取MP4文件时读取G711音频的问题 「H265解析」 - 修复H265 MP4文件解析问题 🛠️ 优化改进 (Improvements) 代码质量 「错误处理」 - 新增maxcount错误处理机制 「文档更新」 - 更新README文档和go.mod配置 构建系统 「ARM架构」 - 减少JavaScript代码,优化ARM架构Docker构建 「构建标签」 - 移除Docker中不必要的构建标签 📦 其他更新 (Other Updates) 「MCP相关」 - 更新Model Context Protocol相关功能 「依赖更新」 - 更新项目依赖和模块配置 👥 贡献者 (Contributors) langhuihui

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

既存安全风险又涉及侵权,三星应用商店现风险流媒体应用

据BleepingComputer网站消息,三星官方应用程序商店出现了风险软件,这些软件伪装成已停止运营的盗版影视应用程序——ShowBox,目前已在多个用户设备上触发了Play Protect安全警告。 ShowBox及其兄弟应用MovieBox能让用户无需付费,就可观看受版权保护的影视节目,此举遭到了电影工作室联盟的起诉,并最终于2018年停止运营。如今,恶意软件的开发者借助盗版影视应用的“外衣”进行活动,看准了此类应用在三星应用商店依然很受欢迎。 根据移动安全分析师linuxct的说法,这些应用程序本身不直接包含恶意代码,但会触发 Google Play Protect 警告,因为存在请求允许在 Android 设备上安装恶意软件的风险权限。如果用户同意这些请求,应用程序可访问联系人列表、通话记录、执行代码、获取恶意软件有效载荷。 VirusTotal 上的多个防病毒引擎将这些应用程序的样本检测为风险软件、木马、广告点击器或通用恶意软件。 这些伪装成盗版影视应用的恶意软件宣称能通过集成的虚拟专用网工具匿名访问受版权保护的内容,根据Android Police 的说法,其中部分确实实现了上述的相关功能。 从法律角度来说,三星应该禁止这些侵权应用,即便他们暂时还没构成其它任何安全风险。但三星的审查似乎只评判所提交的应用是否存在恶意功能或行为,并没有考虑到内容是否存在对版权的侵犯。 一般而言,诸如此类的盗版应用程序,无论是否免费,都会为其用户带来法律、安全和隐私风险,尤其是当需要请求大量看似本不必要的系统权限时,建议用户加强警惕,不要为了贪图小便宜而造成更大的损失。 参考来源: https://www.bleepingcomputer.com/news/security/riskware-android-streaming-apps-found-on-samsungs-galaxy-store/

资源下载

更多资源
Mario

Mario

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

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

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

用户登录
用户注册