快速开始
5 分钟为你的视频平台接入 P2P 分布式加速,节省 60%+ CDN 带宽成本。
什么是 P2PStorm
P2PStorm 是一款融合 P2P 传输、智能缓存、边缘预加载 的视频/直播分布式加速引擎。SDK 在播放器层面透明工作,无需修改 CDN 配置和视频源,通过 WebRTC 让观众之间直接共享已缓存的视频分片,大幅降低回源流量,同时保证播放体验零损失。
核心优势
P2P 省带宽
观众互传已缓存分片,热门内容 P2P 分担率可达 60%–85%,直接砍掉 CDN 账单。
智能缓存零回源
多级缓存策略(内存 → IndexedDB → Peer),相同内容二次播放零回源。
边缘预加载秒开
预测用户即将观看的分片并提前加载,首帧时间降低 30%+。
自适应调度不卡顿
实时监测每条链路质量,P2P 超时自动降级 CDN,用户完全无感。
5 分钟接入流程
1. 获取 AppKey
→
2. 安装 SDK
→
3. 初始化 3 行代码
→
4. 控制台查看效果
选择你的播放器平台,按照下方对应文档操作即可。
Web 接入(HLS.js)
适用于使用 HLS.js 播放器的 Web 项目。3 步完成接入。
1安装 SDK
通过 npm 安装:
bash
npm install @p2pstorm/hlsjs hls.js
或通过 CDN 引入:
html
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<script src="https://cdn.jsdelivr.net/npm/@p2pstorm/hlsjs@latest"></script>
2初始化
javascript
import Hls from 'hls.js';
import { HlsJsP2PEngine } from '@p2pstorm/hlsjs';
// 注入 P2P 加速能力
HlsJsP2PEngine.injectMixin(Hls);
// 创建播放器实例
const hls = new Hls({
p2p: {
core: {
appKey: 'YOUR_APP_KEY', // 从控制台获取
announceTrackers: ['wss://tracker.p2pstorm.cn']
}
}
});
hls.loadSource('https://your-cdn.com/video.m3u8');
hls.attachMedia(document.getElementById('video'));
3验证
打开浏览器开发者工具(F12),在 Console 中搜索 p2pml 相关日志。看到 Peer 连接信息即表示 P2P 已生效。
提示:在控制台「数据统计」页面可以实时查看 P2P 分担率和节省的 CDN 流量。
Web 接入(Shaka Player)
适用于使用 Shaka Player 的 Web 项目,支持 HLS 和 DASH 格式。
1安装 SDK
bash
npm install @p2pstorm/shaka shaka-player
2初始化
javascript
import shaka from 'shaka-player';
import { ShakaP2PEngine } from '@p2pstorm/shaka';
// 创建 P2P 引擎
const engine = new ShakaP2PEngine({
core: {
appKey: 'YOUR_APP_KEY',
announceTrackers: ['wss://tracker.p2pstorm.cn']
}
});
// 创建 Shaka Player 并绑定
const player = new shaka.Player();
await player.attach(document.getElementById('video'));
// 注入 P2P 能力
engine.bindShakaPlayer(player);
// 加载视频
await player.load('https://your-cdn.com/video.m3u8');
3验证
同样在浏览器控制台搜索 p2pml 日志确认 P2P 连接已建立。
Android 接入(ExoPlayer)
适用于 Android 原生应用,基于 AndroidX Media3 ExoPlayer。
1添加依赖
在 build.gradle.kts 中添加:
kotlin
// build.gradle.kts
dependencies {
implementation("com.github.nicetool:P2PStorm-Mobile:main-SNAPSHOT")
implementation("androidx.media3:media3-exoplayer:1.5.1")
implementation("androidx.media3:media3-exoplayer-hls:1.5.1")
}
在 settings.gradle.kts 中添加 JitPack 仓库:
kotlin
// settings.gradle.kts
dependencyResolutionManagement {
repositories {
maven("https://jitpack.io")
}
}
2初始化 P2PMediaLoader
kotlin
import com.p2pstorm.sdk.P2PMediaLoader
val p2pLoader = P2PMediaLoader(
onP2PReadyCallback = { /* P2P 引擎就绪 */ },
onP2PReadyErrorCallback = { error -> /* 处理错误 */ },
coreConfigJson = """
{
"appKey": "YOUR_APP_KEY",
"announceTrackers": ["wss://tracker.p2pstorm.cn"]
}
"""
)
// 启动 P2P 并绑定 ExoPlayer
p2pLoader.start(context, exoPlayer)
// 获取 P2P 代理地址
val p2pUrl = p2pLoader.getManifestUrl("https://your-cdn.com/video.m3u8")
3播放视频
kotlin
val mediaItem = MediaItem.fromUri(p2pUrl)
exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()
exoPlayer.play()
提示:确保
AndroidManifest.xml 中已声明 INTERNET 权限。直播接入
直播流和点播流的接入方式完全一样 — HLS 直播流直接传入 m3u8 地址即可,SDK 自动识别直播/点播模式。
直播场景效果更好:同一时间观看人数越多,P2P Peer 网络越密集,分担率越高。热门直播间 P2P 分担率可轻松超过 70%。
直播推荐配置
直播对延迟要求更高,建议缩短 P2P 超时时间,保证低延迟体验:
javascript
const hls = new Hls({
p2p: {
core: {
appKey: 'YOUR_APP_KEY',
announceTrackers: ['wss://tracker.p2pstorm.cn'],
p2pNotReceivingBytesTimeoutMs: 800 // 直播场景:800ms 超时降级
}
}
});
配置参数
所有配置项均在 core 对象中传入。
| 参数 | 默认值 | 说明 |
|---|---|---|
appKey 必填 | — | 从控制台获取的应用标识 |
announceTrackers | ['wss://tracker.p2pstorm.cn'] | Tracker 服务器地址列表 |
isP2PDisabled | false | 全局关闭 P2P(调试用) |
simultaneousP2PDownloads | 3 | 同时进行的 P2P 下载数 |
simultaneousHttpDownloads | 2 | 同时进行的 CDN 下载数 |
p2pNotReceivingBytesTimeoutMs | 2000 | P2P 超时降级阈值 (ms),直播建议 800 |
httpDownloadInitialTimeoutMs | 0 | 首帧保护延迟 (ms),0 表示首帧直接走 CDN |
webRtcMaxMessageSize | 65535 | WebRTC DataChannel 最大消息大小 (bytes) |
segmentMemoryStorageLimit | undefined | 内存缓存分片数上限,undefined 表示不限制 |
统计上报
SDK 默认自动将 P2P/CDN 流量数据上报到控制台,你可以在「数据统计」页面查看实时和历史数据。
手动监听事件
如需在业务代码中获取 P2P 事件,可以监听以下事件:
javascript
// 新 Peer 连接
hls.on('p2pml-peer-connect', (event, data) => {
console.log('Peer connected:', data.peerId);
});
// 分片加载完成
hls.on('p2pml-segment-loaded', (event, data) => {
console.log('Source:', data.downloadSource);
// data.downloadSource: "p2p" | "http"
});
常见问题
▶接入后会影响首帧速度吗?
不会。
httpDownloadInitialTimeoutMs 默认为 0,首帧直接走 CDN,P2P 只在后续分片中介入,完全不影响起播速度。▶P2P 传输失败会导致卡顿吗?
不会。SDK 内置自适应降级机制,P2P 超时(默认 2 秒)自动切换 CDN 下载,整个过程用户完全无感。
▶需要修改 CDN 配置吗?
不需要。SDK 在播放器层面工作,拦截分片请求并在 Peer 之间共享,CDN 侧零改动。
▶支持哪些视频格式?
支持 HLS(.m3u8)和 DASH(.mpd)两种主流自适应码率格式。
▶直播和点播接入有区别吗?
接入方式完全一样,SDK 自动识别。直播场景因为同时观看人数多,P2P 效率通常更高。
▶流量怎么计费?
只对 P2P 加速节省下来的流量收费,CDN 流量照常走你自己的 CDN 账单,不重复收费。
© 2026 P2PStorm — 分布式视频加速解决方案