Skip to content

P2P 配置

参考 Android, iOS 的P2P配置部分和类型定义

P2pEngine

实例化 P2pEngine,只需要调用一次:

typescript
import { initP2pEngine } from 'react-native-swarmcloud';
initP2pEngine(token, config)

参数说明:

参数类型是否必须说明
tokenstringSwarmCloud 分配的 token。
configP2pConfig自定义配置。

切换源

当播放器切换到新的播放地址时,只需要将新的播放地址(m3u8)传给 parseStreamURL ,从而获取新的本地播放地址:

typescript
import { parseStreamURL } from 'react-native-swarmcloud';
const parsedUrl = parseStreamURL(url);

P2pEngine API

typescript
/// SDK的版本号
getSDKVersion(): string

/// 实例化P2pEngine
initP2pEngine(token: string, config: P2pConfig): Promise<void>

/// 将原始播放地址(m3u8)转换成本地代理服务器的地址,同时传入videoId用以构造channelId。
parseStreamURL(url: string, videoId: string | undefined): string;

/// 动态设置请求ts和m3u8时的HTTP请求头。
setHttpHeadersForHls(headers: Object): void;

/// 获取P2P Engine的连接状态
isConnected(): boolean;

/// 重启P2P加速服务,一般不需要调用。
restartP2p(): Promise<void>;

/// 停止P2P加速并释放资源,一般不需要调用。SDK采用"懒释放"的策略,只有在重启p2p的时候才释放资源。对于性能较差的设备起播耗时可能比较明显,建议在视频播放之前提前调用 engine.stopP2p() 。
stopP2p(): Promise<void>;

/// 获取P2P Engine的peer ID
getPeerId(): string | undefined;

P2P 统计

请参考 example

WARNING

下载和上传数据量的单位是 KB。

解决动态 m3u8 路径问题

某些流媒体提供商的 m3u8 是动态生成的,不同节点的 m3u8 地址不一样,例如 example.com/clientId1/streamId.m3u8 和 example.com/clientId2/streamId.m3u8, 而本插件默认使用 m3u8 地址(去掉查询参数)作为 channelId。这时候就要构造一个共同的 chanelId,使实际观看同一直播/视频的节点处在相同频道中。构造 channelId 方法如下:

dart
// 根据url构造videoId
const videoId = extractVideoIdFromUrl(originalUrl);     // extractVideoIdFromUrl 需要自己定义,可以抽取url中的视频ID作为结果返回
const url = parseStreamURL(originalUrl, videoId);

WARNING

如果要与其他平台互通,则必须确保两者拥有相同的 token 和 channelId 。

设置 HTTP 请求头

出于防盗链或者统计的需求,有些 HTTP 请求需要加上 referer 或者 User-Agent 等头信息,可以通过 httpHeadersForHls 进行设置:

typescript
import { setHttpHeadersForHls } from 'react-native-swarmcloud';
setHttpHeadersForHls({
    "referer": "XXX",
    "User-Agent": "XXX",
});

粤ICP备18075581号