P2P 配置
参考 Android, iOS 的P2P配置部分和类型定义。
P2pEngine
实例化 P2pEngine,只需要调用一次:
typescript
import { initP2pEngine } from 'react-native-swarmcloud';
initP2pEngine(token, config)
参数说明:
参数 | 类型 | 是否必须 | 说明 |
---|---|---|---|
token | string | 是 | SwarmCloud 分配的 token。 |
config | P2pConfig | 是 | 自定义配置。 |
切换源
当播放器切换到新的播放地址时,只需要将新的播放地址(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",
});