快速开始

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: {
      announceTrackers: ['wss://tracker.p2pstorm.vip'],
      // 缓存上限 MiB(可选,默认自动适配设备)
      // segmentMemoryStorageLimit: 2048,
    }
  }
});

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: {
    announceTrackers: ['wss://tracker.p2pstorm.vip'],
    // segmentMemoryStorageLimit: 2048,  // 可选,缓存上限 MiB
  }
});

// 创建 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.avan6688: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 = """
        {
            "announceTrackers": ["wss://tracker.p2pstorm.vip"]
        }
    """
)

// 启动 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 权限。

iOS 接入(AVPlayer)

适用于 iOS/tvOS/macOS 原生应用,基于 AVPlayer。

1添加依赖

在 Xcode 中通过 Swift Package Manager 添加:

swift
// Package.swift 或 Xcode → File → Add Package Dependencies
.package(url: "https://github.com/avan6688/P2PStorm-iOS.git", from: "1.0.0")
2初始化 P2PMediaLoader
swift
import P2PStormSDK
import AVFoundation

let p2pLoader = P2PMediaLoader(
    coreConfigJson: """
    {
        "announceTrackers": ["wss://tracker.p2pstorm.vip"]
    }
    """
)

// 启动 P2P 并绑定 AVPlayer
let player = AVPlayer()
p2pLoader.start(player: player)
3播放视频
swift
// 获取 P2P 代理 URL
let p2pUrl = p2pLoader.getManifestUrl("https://your-cdn.com/video.m3u8")

// 用代理 URL 播放
let playerItem = AVPlayerItem(url: URL(string: p2pUrl)!)
player.replaceCurrentItem(with: playerItem)
player.play()

// 页面销毁时停止 P2P
p2pLoader.stop()
提示:iOS 14.0+、tvOS 14.0+、macOS 12.0+ 均支持。

直播接入

直播流和点播流的接入方式完全一样 — HLS 直播流直接传入 m3u8 地址即可,SDK 自动识别直播/点播模式。

直播场景效果更好:同一时间观看人数越多,P2P Peer 网络越密集,分担率越高。热门直播间 P2P 分担率可轻松超过 70%。

直播推荐配置

直播对延迟要求更高,建议缩短 P2P 超时时间,保证低延迟体验:

javascript
const hls = new Hls({
  p2p: {
    core: {
      appKey: 'YOUR_APP_KEY',
      announceTrackers: ['wss://tracker.p2pstorm.vip'],
      p2pNotReceivingBytesTimeoutMs: 800,  // 直播场景:800ms 超时降级
      // 直播不需要设 segmentMemoryStorageLimit,SDK 自动管理
    }
  }
});

配置参数

所有参数写在 p2p.core 对象中。大多数场景保持默认即可,无需修改任何参数。

参数默认值说明
常用配置
announceTrackers已内置Tracker 地址,默认已配置,一般不需要改
segmentMemoryStorageLimit自动(桌面 4096 / 安卓 2048 / iOS 1024)缓存上限(MiB)。点播保持默认即可,移动端内存紧张可调小。直播不需要设置
isP2PDisabledfalse关闭 P2P(调试用)
高级配置(一般不需要修改)
highDemandTimeWindow15高优先预加载时间窗口(秒)
httpDownloadTimeWindow3000HTTP 预加载时间窗口(秒)
p2pDownloadTimeWindow6000P2P 预加载时间窗口(秒)
simultaneousHttpDownloads2同时 CDN 下载数
simultaneousP2PDownloads3同时 P2P 下载数
httpDownloadInitialTimeoutMs2000首次加载延迟(ms),给 Tracker 发现 Peer 的时间
p2pNotReceivingBytesTimeoutMs2000P2P 超时降级(ms),直播建议 800
httpNotReceivingBytesTimeoutMs3000HTTP 超时(ms)
httpErrorRetries3HTTP 失败重试次数
p2pErrorRetries3P2P 失败重试次数
webRtcMaxMessageSize65535WebRTC 最大消息(bytes)

统计上报

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 — 分布式视频加速解决方案