入门指南
-
安装包
Terminal window npm i @capgo/ivs-playerTerminal window pnpm add @capgo/ivs-playerTerminal window yarn add @capgo/ivs-playerTerminal window bun add @capgo/ivs-player -
同步原生项目
Terminal window npx cap syncTerminal window pnpm cap syncTerminal window yarn cap syncTerminal window bunx cap sync -
配置插件
基本播放器设置:
import { IvsPlayer } from '@capgo/ivs-player';// 创建播放器const { playerId } = await IvsPlayer.create({url: 'https://your-ivs-playback-url.m3u8',autoplay: true});// 开始播放await IvsPlayer.play({ playerId });播放器控制:
// 暂停播放await IvsPlayer.pause({ playerId });// 设置音量await IvsPlayer.setVolume({playerId,volume: 0.5 // 0.0 到 1.0});// 跳转到位置await IvsPlayer.seekTo({playerId,position: 30 // 秒});添加到您的
Info.plist:<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>添加到您的
AndroidManifest.xml:<uses-permission android:name="android.permission.INTERNET" /> -
事件处理
import { IvsPlayer } from '@capgo/ivs-player';// 监听播放器事件IvsPlayer.addListener('onState', (event) => {console.log('Player state:', event.state);// 状态:idle、buffering、ready、playing、ended});IvsPlayer.addListener('onError', (event) => {console.error('Player error:', event.error);});IvsPlayer.addListener('onDuration', (event) => {console.log('Video duration:', event.duration);});IvsPlayer.addListener('onProgress', (event) => {console.log('Current position:', event.position);});// 监听定时元数据IvsPlayer.addListener('onMetadata', (event) => {console.log('Timed metadata:', event.metadata);}); -
高级用法
import { IvsPlayer } from '@capgo/ivs-player';export class StreamPlayer {private playerId: string | null = null;private listeners: any[] = [];async initialize(streamUrl: string) {// 使用自定义配置创建播放器const result = await IvsPlayer.create({url: streamUrl,autoplay: false,muted: true, // 为自动播放策略静音开始controls: true});this.playerId = result.playerId;this.setupEventListeners();}private setupEventListeners() {// 状态变化const stateListener = IvsPlayer.addListener('onState', (event) => {this.handleStateChange(event.state);});this.listeners.push(stateListener);// 质量变化const qualityListener = IvsPlayer.addListener('onQuality', (event) => {console.log(`Quality changed to: ${event.quality.name}`);});this.listeners.push(qualityListener);// 缓冲更新const bufferListener = IvsPlayer.addListener('onBuffer', (event) => {console.log(`Buffer: ${event.percentage}%`);});this.listeners.push(bufferListener);}private handleStateChange(state: string) {switch (state) {case 'playing':console.log('Stream is playing');break;case 'buffering':console.log('Stream is buffering');break;case 'ended':console.log('Stream ended');break;}}async play() {if (this.playerId) {await IvsPlayer.play({ playerId: this.playerId });}}async pause() {if (this.playerId) {await IvsPlayer.pause({ playerId: this.playerId });}}async setQuality(qualityName: string) {if (this.playerId) {await IvsPlayer.setQuality({playerId: this.playerId,quality: qualityName});}}async destroy() {// 删除监听器this.listeners.forEach(listener => listener.remove());// 销毁播放器if (this.playerId) {await IvsPlayer.destroy({ playerId: this.playerId });}}}
API 参考
Section titled “API 参考”create(options: CreateOptions)
Section titled “create(options: CreateOptions)”创建新的 IVS 播放器实例。
参数:
options:播放器配置url: string - IVS 播放 URLautoplay: boolean - 自动开始播放muted: boolean - 静音开始controls: boolean - 显示原生控件
返回: Promise<{ playerId: string }>
play(options: PlayerOptions)
Section titled “play(options: PlayerOptions)”开始播放。
pause(options: PlayerOptions)
Section titled “pause(options: PlayerOptions)”暂停播放。
stop(options: PlayerOptions)
Section titled “stop(options: PlayerOptions)”停止播放并重置位置。
seekTo(options: SeekOptions)
Section titled “seekTo(options: SeekOptions)”跳转到特定位置。
setVolume(options: VolumeOptions)
Section titled “setVolume(options: VolumeOptions)”设置播放器音量(0.0 到 1.0)。
setQuality(options: QualityOptions)
Section titled “setQuality(options: QualityOptions)”设置播放质量。
destroy(options: PlayerOptions)
Section titled “destroy(options: PlayerOptions)”销毁播放器实例。
onState:播放器状态变化onError:播放错误onDuration:视频时长可用onProgress:播放进度更新onQuality:质量变化onMetadata:定时元数据事件onBuffer:缓冲状态更新
interface CreateOptions { url: string; autoplay?: boolean; muted?: boolean; controls?: boolean;}
interface PlayerOptions { playerId: string;}
interface SeekOptions extends PlayerOptions { position: number; // 秒}
interface VolumeOptions extends PlayerOptions { volume: number; // 0.0 到 1.0}
interface QualityOptions extends PlayerOptions { quality: string; // 质量名称}- 需要 iOS 12.0 或更高版本
- 使用带有 IVS 扩展的原生 AVPlayer
- 在 iPad 上支持画中画
Android
Section titled “Android”- 需要 Android 5.0(API 级别 21)或更高版本
- 使用 Amazon IVS Player SDK
- 建议使用硬件加速
- 直播流媒体:实时活动、体育、游戏
- 互动流媒体:观众投票、问答环节
- 电子商务:带产品亮点的直播购物
- 教育:带定时内容的直播课程
- 娱乐:带观众互动的音乐会、节目
-
网络处理:监控连接质量
IvsPlayer.addListener('onError', (event) => {if (event.error.includes('network')) {// 处理网络错误showRetryButton();}}); -
资源管理:完成后始终销毁播放器
-
自动播放策略:为可靠的自动播放静音开始
-
质量选择:让 IVS 处理自动质量切换
流媒体无法播放:
- 验证 IVS 播放 URL 是否有效
- 检查网络权限
- 确保流媒体是实时的
高延迟:
- IVS 针对低延迟进行了优化,检查编码器设置
- 验证您使用的是 IVS 特定的播放 URL
质量问题:
- 允许自动质量切换
- 检查网络带宽要求