本文介绍 Flutter 拉流 SDK 进阶功能的接入方法。您可以根据实际业务需求,按需实现复杂功能。
如需使用主备流和自适应码率(ABR)功能,您必须调用该方法,为播放器配置多路流。
Future<void> setPlayStreamData(VeLivePlayerStreamData streamData);
说明
相关类型详情,详见 VeLivePlayerStreamData。
主备流主要用于直播间容灾,通过配置主备两路直播流地址,在推流和分发环节使用主备流进行直播。播放器在接入时配置主备两路拉流地址,当主路地址拉流失败或者播放出错时,播放器会自动切换到备路地址进行播放。同样地,当备路地址播放出错时,播放器会切换回主路地址进行播放。主备地址可以来自同一直播服务商,也可以来自不同的直播服务商。
获取主流地址和备流地址,如果使用火山引擎视频直播服务,您可通过视频直播控制台的地址生成器,生成主备拉流地址。
配置主备流地址进行播放。代码示例如下所示。
// 配置主流地址。 VeLivePlayerStream mainStream = VeLivePlayerStream(url: 'https://pull.example.com/live/主.flv'); mainStream.format = VeLivePlayerFormat.flv; mainStream.resolution = VeLivePlayerResolution.origin; mainStream.type = VeLivePlayerStreamType.main; // 配置备流地址。 VeLivePlayerStream backupStream = VeLivePlayerStream(url: 'https://pull.example.com/live/备.flv'); backupStream.format = VeLivePlayerFormat.flv; backupStream.resolution = VeLivePlayerResolution.origin; backupStream.type = VeLivePlayerStreamType.backup; // 创建播放源。 VeLivePlayerStreamData streamData = VeLivePlayerStreamData(); // 开启主备切换。 streamData.enableMainBackupSwitch = true; // 添加主流。 streamData.mainStream = [mainStream]; // 添加备流。 streamData.backupStream = [backupStream]; // 配置播放源。 manager.setPlayStreamData(streamData); // 开始播放。 manager.play();
说明
相关类型详情,详见 VeLivePlayerStreamData 和 VeLivePlayerStream。
当播放器内部发生主备切换时,会通过 VeLivePlayerObserver 的 onMainBackupSwitch 回调进行通知。代码示例如下所示。
// 主备流切换回调。 VeLivePlayerObserver observer = VeLivePlayerObserver(onMainBackupSwitch: (VeLivePlayerStreamType streamType, VeLivePlayerError? error) { _addItem('onMainBackupSwitch: $streamType, error:$error'); }); manager.setObserver(observer);
自适应码率(Adaptive Bit-Rate,简称 ABR)是一种流媒体传输技术,通过一系列算法策略,动态切换不同档位媒体流,以达到适应网络带宽变化,防止观众在观看直播过程产生卡顿,提升播放质量和观看体验。
说明
ABR 功能只适用于 FLV 格式流。
获取源流和各档位转码流拉流地址。如您使用了火山引擎视频直播服务,请先登录控制台完成转码配置,再获取拉流地址,地址方法如下所示。
功能调试阶段:可使用地址生成器获取拉流地址;
功能正式上线:需通过生成拉流地址的 API 或使用服务端 SDK 获取拉流地址。
本文的接入说明以下列拉流地址为例。
| 档位说明 | 拉流地址 | 码率(kbps) |
|---|---|---|
| 源流(Orgin) | https://pull.example.com/live/123456.flv | 2500 |
| 超清(UHD) | https://pull.example.com/live/123456_uhd.flv | 2500 |
| 高清(HD) | https://pull.example.com/live/123456_hd.flv | 1000 |
| 标清(SD) | https://pull.example.com/live/123456_sd.flv | 800 |
| 低清(LD) | https://pull.example.com/live/123456_ld.flv | 500 |
注意
确保每个档位的码率设置与转码配置中填写的码率保持一致。
配置多档位地址进行播放。代码示例如下所示。
// 配置多档位流地址。 VeLivePlayerStream playStreamOrigin = VeLivePlayerStream(url: 'https://pull.example.com/live/123456.flv'); playStreamOrigin.format = VeLivePlayerFormat.flv; playStreamOrigin.resolution = VeLivePlayerResolution.origin; // 原始档位。 playStreamOrigin.type = VeLivePlayerStreamType.main; playStreamOrigin.bitrate = 2500; VeLivePlayerStream playStreamUHD = VeLivePlayerStream(url: 'https://pull.example.com/live/123456_uhd.flv'); playStreamOrigin.format = VeLivePlayerFormat.flv; playStreamOrigin.resolution = VeLivePlayerResolution.uhd; // UHD 档位。 playStreamOrigin.type = VeLivePlayerStreamType.main; playStreamOrigin.bitrate = 2500; VeLivePlayerStream playStreamHD = VeLivePlayerStream(url: 'https://pull.example.com/live/123456_hd.flv'); playStreamOrigin.format = VeLivePlayerFormat.flv; playStreamOrigin.resolution = VeLivePlayerResolution.hd; // HD 档位。 playStreamOrigin.type = VeLivePlayerStreamType.main; playStreamOrigin.bitrate = 1000; VeLivePlayerStream playStreamSD = VeLivePlayerStream(url: 'https://pull.example.com/live/123456_sd.flv'); playStreamOrigin.format = VeLivePlayerFormat.flv; playStreamOrigin.resolution = VeLivePlayerResolution.sd; // SD 档位。 playStreamOrigin.type = VeLivePlayerStreamType.main; playStreamOrigin.bitrate = 800; VeLivePlayerStream playStreamLD = VeLivePlayerStream(url: 'https://pull.example.com/live/123456_ld.flv'); playStreamOrigin.format = VeLivePlayerFormat.flv; playStreamOrigin.resolution = VeLivePlayerResolution.ld; // LD 档位。 playStreamOrigin.type = VeLivePlayerStreamType.main; playStreamOrigin.bitrate = 500; // 创建播放源。 VeLivePlayerStreamData streamData = VeLivePlayerStreamData(); // 添加多档位流。 List<VeLivePlayerStream> streamList = []; streamList.add(playStreamOrigin); streamList.add(playStreamUHD); streamList.add(playStreamHD); streamList.add(playStreamSD); streamList.add(playStreamLD); streamData.mainStream = streamList; // 配置默认启播档位。 streamData.defaultResolution = VeLivePlayerResolution.origin; // 开启 ABR 功能。 streamData.enableABR = true; // 配置播放源。 manager.setPlayStreamData(streamData); // 开始播放。 manager.play();
说明
相关类型详情,详见 VeLivePlayerStreamData 和 VeLivePlayerStream。
ABR 档位自动切换时,会通过 VeLivePlayerObserver 的 onResolutionSwitch 回调进行通知。代码示例如下所示。
VeLivePlayerObserver observer = VeLivePlayerObserver(onResolutionSwitch: (VeLivePlayerResolution resolution, VeLivePlayerError? error, VeLivePlayerResolutionSwitchReason reason) { print('onResolutionSwitch: $resolution'); }); manager.setObserver(observer);