You need to enable JavaScript to run this app.
导航
进阶功能
最近更新时间:2025.10.31 11:29:53首次发布时间:2025.08.22 17:24:27
复制全文
我的收藏
有用
有用
无用
无用

本文介绍 Flutter 拉流 SDK 进阶功能的接入方法。您可以根据实际业务需求,按需实现复杂功能。

前提条件

配置多路流

如需使用主备流和自适应码率(ABR)功能,您必须调用该方法,为播放器配置多路流。

Future<void> setPlayStreamData(VeLivePlayerStreamData streamData);

说明

相关类型详情,详见 VeLivePlayerStreamData

使用主备流

主备流主要用于直播间容灾,通过配置主备两路直播流地址,在推流和分发环节使用主备流进行直播。播放器在接入时配置主备两路拉流地址,当主路地址拉流失败或者播放出错时,播放器会自动切换到备路地址进行播放。同样地,当备路地址播放出错时,播放器会切换回主路地址进行播放。主备地址可以来自同一直播服务商,也可以来自不同的直播服务商。

接入准备

获取主流地址和备流地址,如果使用火山引擎视频直播服务,您可通过视频直播控制台的地址生成器,生成主备拉流地址。

接入说明

  1. 配置主备流地址进行播放。代码示例如下所示。

    // 配置主流地址。
    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();
    

    说明

    相关类型详情,详见 VeLivePlayerStreamDataVeLivePlayerStream

  2. 当播放器内部发生主备切换时,会通过 VeLivePlayerObserveronMainBackupSwitch 回调进行通知。代码示例如下所示。

    // 主备流切换回调。
    VeLivePlayerObserver observer = VeLivePlayerObserver(onMainBackupSwitch: (VeLivePlayerStreamType streamType, VeLivePlayerError? error) {
          _addItem('onMainBackupSwitch: $streamType, error:$error');
        });
    manager.setObserver(observer);
    

自适应码率(ABR)拉流

自适应码率(Adaptive Bit-Rate,简称 ABR)是一种流媒体传输技术,通过一系列算法策略,动态切换不同档位媒体流,以达到适应网络带宽变化,防止观众在观看直播过程产生卡顿,提升播放质量和观看体验。

说明

ABR 功能只适用于 FLV 格式流。

接入准备

获取源流和各档位转码流拉流地址。如您使用了火山引擎视频直播服务,请先登录控制台完成转码配置,再获取拉流地址,地址方法如下所示。

本文的接入说明以下列拉流地址为例。

档位说明拉流地址码率(kbps)
源流(Orgin)https://pull.example.com/live/123456.flv2500
超清(UHD)https://pull.example.com/live/123456_uhd.flv2500
高清(HD)https://pull.example.com/live/123456_hd.flv1000
标清(SD)https://pull.example.com/live/123456_sd.flv800
低清(LD)https://pull.example.com/live/123456_ld.flv500

注意

确保每个档位的码率设置与转码配置中填写的码率保持一致。

接入说明

  1. 配置多档位地址进行播放。代码示例如下所示。

    // 配置多档位流地址。
    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();
    

    说明

    相关类型详情,详见 VeLivePlayerStreamDataVeLivePlayerStream

  2. ABR 档位自动切换时,会通过 VeLivePlayerObserveronResolutionSwitch 回调进行通知。代码示例如下所示。

    VeLivePlayerObserver observer = VeLivePlayerObserver(onResolutionSwitch:
            (VeLivePlayerResolution resolution, VeLivePlayerError? error,
                VeLivePlayerResolutionSwitchReason reason) {
          print('onResolutionSwitch: $resolution');
        });
    manager.setObserver(observer);