You need to enable JavaScript to run this app.
视频直播

视频直播

Copy page
Download PDF
Flutter
进阶功能
Copy page
Download PDF
进阶功能

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

前提条件

配置多路流

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

Future<void> setPlayStreamData(VeLivePlayerStreamData streamData);

tip

相关类型详情,详见 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();
    

    tip

    相关类型详情,详见 VeLivePlayerStreamDataVeLivePlayerStream

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

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

自适应码率(ABR)拉流

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

tip

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

warning

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

接入说明

  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();
    

    tip

    相关类型详情,详见 VeLivePlayerStreamDataVeLivePlayerStream

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

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