Jessibuca H5直播播放器快速上手指南:3行代码在浏览器里播通低延迟直播【免费下载链接】jessibucaJessibuca是一款开源的纯H5直播流播放器项目地址: https://gitcode.com/GitHub_Trending/je/jessibuca以前想在网页上播直播流,基本只能靠<video>标签,而它只认 HLS/MP4,延迟动辄几秒,更播不了摄像头和推流服务器吐出来的 FLV 流。Jessibuca 是一款开源的纯 H5 直播播放器:把 ffmpeg 解码库编译成 WebAssembly(即 wasm,一种能在浏览器里跑的高性能字节码)在浏览器中运行,直接播放 HTTP-FLV、WS-FLV 流,H.264/H.265 软解,无需安装任何插件,PC、手机、微信里都能跑,延迟通常可以压到 1 秒以内。先说清楚:它能干什么,适合谁一句话概括:你的流媒体服务器只要能输出 FLV 流(HTTP 或 WebSocket 传输),浏览器打开页面就能播,并且自带播放控制条、截图、录制这些交互能力。能力开源版情况传输协议http(s)-flv、ws(s)-flv、ws-raw(M7S 私有格式),均支持 https/wss 加密传输视频编码H.264 / H.265 走 WASM 软解;H.264 另支持 MSE、WebCodecs 硬件解码音频AAC、G.711(PCMA/PCMU)延迟缓冲区可配到 0,常规场景 1 秒内交互多实例同页播放、内置控制栏(播放/音量/截图/录制/全屏)、WebM 录制适合谁需要在网页里播直播、又不想让用户装插件的场景:监控、多屏、低延迟互动它不替代<video>播点播文件,也不是全能的流媒体服务器——开源版协议面较窄,HLS、WebRTC、fmp4/ts 等更多格式在 Pro 版里,后面"下一步"一节会讲。三步跑通:把一路直播放到页面上第 1 步:拿到代码git clone https://gitcode.com/GitHub_Trending/je/jessibuca这条命令把整个项目克隆到本地,克隆下来后所有 demo 和文档都在里面,可以边查边改。第 2 步:放好 3 个文件从仓库的demo/public/目录里找到jessibuca.js、decoder.js、decoder.wasm,复制到你页面的同一目录下。三者的分工:jessibuca.js是业务代码(创建播放器、UI),decoder.js是跑在 worker 线程里的解码调度,decoder.wasm是真正的解码字节码。后两个必须同目录,因为 wasm 是相对decoder.js去加载的。注意它暂不支持npm install(node_modules 对 wasm 支持不友好),用<script>标签引入即可。第 3 步:写页面<div id="container" style="width:640px;height:360px;background:#000"></div> <script src="jessibuca.js"></script> <script> // 创建播放器:container 指向挂载的 div const player = new Jessibuca({ container: '#container', decoder: 'decoder.js', // 解码 worker,decoder.wasm 需与它同目录 videoBuffer: 0.2 // 缓冲 0.2 秒,越小延迟越低 }) // 开始播放 FLV 地址;play 返回 Promise,失败要接住 player.play('http://localhost/live/test.flv').catch(console.error) </script>这就是全部。页面打开后,点一下画面(或调用player.cancelMute())即可恢复声音——浏览器对自动出声有严格限制,默认是静音的。值得了解的 3 个设计点ffmpeg 跑在 WebWorker 里,所以不卡页面Jessibuca 用 Emscripten 把 C++ 写的解码库(ffmpeg、libhevc 等)编译成 wasm,放在 WebWorker(浏览器里独立于界面的一条线程)中解码,解出的 YUV 帧通过消息机制回传给主线程,由 WebGL 画到 canvas 上。架构图长这样:这个结构带来两个实际好处:一是解码再吃 CPU 也不阻塞 UI,按钮、弹幕照样跟手;二是解码器实现了"智能丢帧",长时间播放延迟不会越积越大。解码相关的 JS 源码可以看 src/decoder/ 和 src/worker/。H.265 是软解,浏览器生态的坑被绕开了H.265(HEVC)同画质下比 H.264 省约一半带宽,但浏览器对它的支持一直很尴尬——看这张各浏览器支持情况就知道,很多平台根本不认识 H.265:所以 Jessibuca 的策略是:H.265 一律走 WASM 软解,哪个浏览器都能播;H.264 则优先走 MSE/WebCodecs 硬件解码(更快、更省 CPU),autoWasm: true时硬件解码不支持会自动降级回 wasm。你在配置里写useMSE: true(http 页面)或useWCS: true(https 页面),再配autoWasm: true就是官方推荐的最稳组合。一台机器能开几路?查表多画面是监控场景的刚需。软解很吃 CPU,能开几路取决于机器配置,官方给了一张实测表,横轴是三档 CPU,纵轴是 wasm 软解与 mse/wcs 硬解在 720P/1080P 下的最大路数:能看出硬解比软解多得多(720P H.264 在中端 CPU 上硬解可到 16~32 路)。另外 Pro 版引入了 WASM SIMD——SIMD 是 WebAssembly 的 128 位并行指令扩展,一条指令同时算多个像素,主要靠它把多路软解的性能拉上去:开源版 WebWorker 多核解码已支持多实例同时播,想上 1080P 以上多路再考虑 Pro。用在你手里家庭/门店监控:摄像头普遍输出 RTSP,浏览器播不了它,常见做法是用 ZLMediaKit 这类服务器把 RTSP 转成 FLV,前端用 Jessibuca 开 2x2、3x3 多画面墙,省掉一台大监控屏。企业直播/派播后台:多实例 + 内置控制栏开箱即用,调度中心值班人员打开网页就能看、能截图、能录 WebM,不用分发客户端。低延迟互动:把videoBuffer调到 0.2 甚至 0,延迟压到亚秒级,适合远程查看设备状态、在线教学这类"看得到、跟得上"的场景。遇到 X 怎么办:避坑清单画面黑屏,但网速一直有数据——播放器靠 URL 后缀判断协议,.flv才按 FLV 解析,没后缀的会被当成 M7S 私有格式。你的地址没有后缀却想播 FLV,加一个配置isFlv: true即可。绿屏/花屏——优先怀疑流本身:推流不是从 I 帧(关键帧)开始、中途分辨率变了、码率给得不够(1280x720 只给 200kbps 必然马赛克)。自查方法:用同一协议、同一封装的地址先在 VLC 里播一遍,VLC 正常再怀疑播放器。另外 1923×1081 这类奇数分辨率wasm/WebCodecs 根本解不了,推流端先把分辨率规整到偶数。跨域报错——http 页面播不了 https/wss 的流,反之亦然,必须协议一致。http-flv 走的是 fetch 请求,服务器要加access-control-allow-origin响应头;ws-flv 默认没有这个烦恼。wasm 解码器加载失败——F12 里看到decoder.js/decoder.wasm返回 304 且Content-Type: text/html,说明服务端把它当普通文本缓存了。正确做法是返回content-type: application/wasm:Chrome 播不了内网地址(192.168.x.x)——这是 Chrome 的私有网络访问策略,公网页面默认不能请求更私有的内网地址。测试环境可在chrome://flags/搜 "Local Network Access" 设为 Disabled 后重启浏览器;生产环境建议给内网服务配一个可解析的域名走 https。多路播放卡顿、延迟慢慢变大——软解多路吃 CPU,先降分辨率再增大videoBuffer缓解解码抖动;如果延迟从 0.3s 慢慢涨到几秒且单路也复现,基本是服务器出口带宽不足,播放器端无解,去查流媒体服务器的带宽和缓冲区配置。完整 FAQ 收录在 demo/document.md,问题比上面多得多,遇到怪现象先搜那里。跑通之后往哪走查参数:完整构造参数、方法、事件列表见 demo/api.md,videoBuffer、rotate、operateBtns、useMSE这些都在里面,TypeScript 类型在 d.ts/jessibuca.d.ts。读源码:业务层在 src/,demux/是流解封装,decoder/是解码与渲染,control/是控制栏 UI,wasm/decoder.cpp 是 C++ 侧解码入口。进阶方向:需要 HLS、WebRTC、fmp4/ts/ps 裸流、NxN 多屏 UI、MP4 录制、水印、云台 PTZ、GB28181 回放这些能力,对应 Pro 版,特性清单见 README.md 的 "PRO 特性" 一节;服务端可搭配纯 Go 开源流媒体框架 Monibuca 使用。【免费下载链接】jessibucaJessibuca是一款开源的纯H5直播流播放器项目地址: https://gitcode.com/GitHub_Trending/je/jessibuca创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
Jessibuca H5直播播放器快速上手指南:3行代码在浏览器里播通低延迟直播【免费下载链接】jessibucaJessibuca是一款开源的纯H5直播流播放器项目地址: https://gitcode.com/GitHub_Trending/je/jessibuca以前想在网页上播直播流,基本只能靠<video>标签,而它只认 HLS/MP4,延迟动辄几秒,更播不了摄像头和推流服务器吐出来的 FLV 流。Jessibuca 是一款开源的纯 H5 直播播放器:把 ffmpeg 解码库编译成 WebAssembly(即 wasm,一种能在浏览器里跑的高性能字节码)在浏览器中运行,直接播放 HTTP-FLV、WS-FLV 流,H.264/H.265 软解,无需安装任何插件,PC、手机、微信里都能跑,延迟通常可以压到 1 秒以内。先说清楚:它能干什么,适合谁一句话概括:你的流媒体服务器只要能输出 FLV 流(HTTP 或 WebSocket 传输),浏览器打开页面就能播,并且自带播放控制条、截图、录制这些交互能力。能力开源版情况传输协议http(s)-flv、ws(s)-flv、ws-raw(M7S 私有格式),均支持 https/wss 加密传输视频编码H.264 / H.265 走 WASM 软解;H.264 另支持 MSE、WebCodecs 硬件解码音频AAC、G.711(PCMA/PCMU)延迟缓冲区可配到 0,常规场景 1 秒内交互多实例同页播放、内置控制栏(播放/音量/截图/录制/全屏)、WebM 录制适合谁需要在网页里播直播、又不想让用户装插件的场景:监控、多屏、低延迟互动它不替代<video>播点播文件,也不是全能的流媒体服务器——开源版协议面较窄,HLS、WebRTC、fmp4/ts 等更多格式在 Pro 版里,后面"下一步"一节会讲。三步跑通:把一路直播放到页面上第 1 步:拿到代码git clone https://gitcode.com/GitHub_Trending/je/jessibuca这条命令把整个项目克隆到本地,克隆下来后所有 demo 和文档都在里面,可以边查边改。第 2 步:放好 3 个文件从仓库的demo/public/目录里找到jessibuca.js、decoder.js、decoder.wasm,复制到你页面的同一目录下。三者的分工:jessibuca.js是业务代码(创建播放器、UI),decoder.js是跑在 worker 线程里的解码调度,decoder.wasm是真正的解码字节码。后两个必须同目录,因为 wasm 是相对decoder.js去加载的。注意它暂不支持npm install(node_modules 对 wasm 支持不友好),用<script>标签引入即可。第 3 步:写页面<div id="container" style="width:640px;height:360px;background:#000"></div> <script src="jessibuca.js"></script> <script> // 创建播放器:container 指向挂载的 div const player = new Jessibuca({ container: '#container', decoder: 'decoder.js', // 解码 worker,decoder.wasm 需与它同目录 videoBuffer: 0.2 // 缓冲 0.2 秒,越小延迟越低 }) // 开始播放 FLV 地址;play 返回 Promise,失败要接住 player.play('http://localhost/live/test.flv').catch(console.error) </script>这就是全部。页面打开后,点一下画面(或调用player.cancelMute())即可恢复声音——浏览器对自动出声有严格限制,默认是静音的。值得了解的 3 个设计点ffmpeg 跑在 WebWorker 里,所以不卡页面Jessibuca 用 Emscripten 把 C++ 写的解码库(ffmpeg、libhevc 等)编译成 wasm,放在 WebWorker(浏览器里独立于界面的一条线程)中解码,解出的 YUV 帧通过消息机制回传给主线程,由 WebGL 画到 canvas 上。架构图长这样:这个结构带来两个实际好处:一是解码再吃 CPU 也不阻塞 UI,按钮、弹幕照样跟手;二是解码器实现了"智能丢帧",长时间播放延迟不会越积越大。解码相关的 JS 源码可以看 src/decoder/ 和 src/worker/。H.265 是软解,浏览器生态的坑被绕开了H.265(HEVC)同画质下比 H.264 省约一半带宽,但浏览器对它的支持一直很尴尬——看这张各浏览器支持情况就知道,很多平台根本不认识 H.265:所以 Jessibuca 的策略是:H.265 一律走 WASM 软解,哪个浏览器都能播;H.264 则优先走 MSE/WebCodecs 硬件解码(更快、更省 CPU),autoWasm: true时硬件解码不支持会自动降级回 wasm。你在配置里写useMSE: true(http 页面)或useWCS: true(https 页面),再配autoWasm: true就是官方推荐的最稳组合。一台机器能开几路?查表多画面是监控场景的刚需。软解很吃 CPU,能开几路取决于机器配置,官方给了一张实测表,横轴是三档 CPU,纵轴是 wasm 软解与 mse/wcs 硬解在 720P/1080P 下的最大路数:能看出硬解比软解多得多(720P H.264 在中端 CPU 上硬解可到 16~32 路)。另外 Pro 版引入了 WASM SIMD——SIMD 是 WebAssembly 的 128 位并行指令扩展,一条指令同时算多个像素,主要靠它把多路软解的性能拉上去:开源版 WebWorker 多核解码已支持多实例同时播,想上 1080P 以上多路再考虑 Pro。用在你手里家庭/门店监控:摄像头普遍输出 RTSP,浏览器播不了它,常见做法是用 ZLMediaKit 这类服务器把 RTSP 转成 FLV,前端用 Jessibuca 开 2x2、3x3 多画面墙,省掉一台大监控屏。企业直播/派播后台:多实例 + 内置控制栏开箱即用,调度中心值班人员打开网页就能看、能截图、能录 WebM,不用分发客户端。低延迟互动:把videoBuffer调到 0.2 甚至 0,延迟压到亚秒级,适合远程查看设备状态、在线教学这类"看得到、跟得上"的场景。遇到 X 怎么办:避坑清单画面黑屏,但网速一直有数据——播放器靠 URL 后缀判断协议,.flv才按 FLV 解析,没后缀的会被当成 M7S 私有格式。你的地址没有后缀却想播 FLV,加一个配置isFlv: true即可。绿屏/花屏——优先怀疑流本身:推流不是从 I 帧(关键帧)开始、中途分辨率变了、码率给得不够(1280x720 只给 200kbps 必然马赛克)。自查方法:用同一协议、同一封装的地址先在 VLC 里播一遍,VLC 正常再怀疑播放器。另外 1923×1081 这类奇数分辨率wasm/WebCodecs 根本解不了,推流端先把分辨率规整到偶数。跨域报错——http 页面播不了 https/wss 的流,反之亦然,必须协议一致。http-flv 走的是 fetch 请求,服务器要加access-control-allow-origin响应头;ws-flv 默认没有这个烦恼。wasm 解码器加载失败——F12 里看到decoder.js/decoder.wasm返回 304 且Content-Type: text/html,说明服务端把它当普通文本缓存了。正确做法是返回content-type: application/wasm:Chrome 播不了内网地址(192.168.x.x)——这是 Chrome 的私有网络访问策略,公网页面默认不能请求更私有的内网地址。测试环境可在chrome://flags/搜 "Local Network Access" 设为 Disabled 后重启浏览器;生产环境建议给内网服务配一个可解析的域名走 https。多路播放卡顿、延迟慢慢变大——软解多路吃 CPU,先降分辨率再增大videoBuffer缓解解码抖动;如果延迟从 0.3s 慢慢涨到几秒且单路也复现,基本是服务器出口带宽不足,播放器端无解,去查流媒体服务器的带宽和缓冲区配置。完整 FAQ 收录在 demo/document.md,问题比上面多得多,遇到怪现象先搜那里。跑通之后往哪走查参数:完整构造参数、方法、事件列表见 demo/api.md,videoBuffer、rotate、operateBtns、useMSE这些都在里面,TypeScript 类型在 d.ts/jessibuca.d.ts。读源码:业务层在 src/,demux/是流解封装,decoder/是解码与渲染,control/是控制栏 UI,wasm/decoder.cpp 是 C++ 侧解码入口。进阶方向:需要 HLS、WebRTC、fmp4/ts/ps 裸流、NxN 多屏 UI、MP4 录制、水印、云台 PTZ、GB28181 回放这些能力,对应 Pro 版,特性清单见 README.md 的 "PRO 特性" 一节;服务端可搭配纯 Go 开源流媒体框架 Monibuca 使用。【免费下载链接】jessibucaJessibuca是一款开源的纯H5直播流播放器项目地址: https://gitcode.com/GitHub_Trending/je/jessibuca创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考