快速开始

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 服务器地址列表
isP2PDisabledfalse全局关闭 P2P(调试用)
simultaneousP2PDownloads3同时进行的 P2P 下载数
simultaneousHttpDownloads2同时进行的 CDN 下载数
p2pNotReceivingBytesTimeoutMs2000P2P 超时降级阈值 (ms),直播建议 800
httpDownloadInitialTimeoutMs0首帧保护延迟 (ms),0 表示首帧直接走 CDN
webRtcMaxMessageSize65535WebRTC DataChannel 最大消息大小 (bytes)
segmentMemoryStorageLimitundefined内存缓存分片数上限,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 — 分布式视频加速解决方案