You need to enable JavaScript to run this app.
导航
进阶功能
最近更新时间:2024.12.04 18:05:17首次发布时间:2024.12.04 18:05:17

本章节介绍了拉流 SDK 进阶功能的接入方式,支持的进阶功能包括但不限于使用主备流、截图。您可以根据实际业务需求,借助拉流 SDK 实现更复杂的功能。

前提条件

注意事项

真机调试:由于 SDK 使用了大量 HarmonyOS NEXT 系统的音视频接口,这些接口在仿真模拟器下可能会出现异常,推荐您使用真机进行代码调试。

功能接入

本节为您详细介绍如何使用拉流 SDK 进阶功能的实现,包括但不限于使用主备流、截图。

使用主备流

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

接入准备

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

接入说明

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

    // 配置主流地址
    const playStreamMain = new VeLivePlayerStream();
    playStreamMain.url = "https://pull.example.com/live/主.flv";
    playStreamMain.format = VeLivePlayerFormat.VeLivePlayerFormatFLV;
    playStreamMain.resolution = VeLivePlayerResolution.VeLivePlayerResolutionOrigin;
    playStreamMain.streamType = VeLivePlayerStreamType.VeLivePlayerStreamTypeMain; // 流类型配置为主路
    
    // 配置备流地址
    const playStreamBackup = new VeLivePlayerStream()
    playStreamBackup.url = "https://pull.example.com/live/备.flv";
    playStreamBackup.format = VeLivePlayerFormat.VeLivePlayerFormatFLV;
    playStreamBackup.resolution = VeLivePlayerResolution.VeLivePlayerResolutionOrigin;
    playStreamBackup.streamType = VeLivePlayerStreamType.VeLivePlayerStreamTypeBackup; // 流类型配置为备路
    
    // 创建播放源
    const streamData = new VeLivePlayerStreamData();
    
    // 开启主备切换
    streamData.enableMainBackupSwitch = true;
    
    // 添加主流
    streamData.mainStreamList = [playStreamMain];
    
    // 添加备流
    streamData.backupStreamList = [playStreamBackup];
    
    // 配置播放源
    this.livePlayer?.setPlayStreamData(streamData);
    
    // 开始播放
    this.livePlayer?.play();
    
  2. 当播放器内部发生主备切换时,会通过 VeLivePlayerObserver 的回调接口 onMainBackupSwitch 进行通知。代码示例如下所示。

    onMainBackupSwitch(player: VeLivePlayer, streamType: VeLivePlayerStreamType, error: VeLivePlayerError): void {
    	// 主备切换回调  
    }
    

截图

截图功能允许您在播放器中截取当前直播画面并生成一张图片。

接入说明

  1. 通过调用播放器的 snapshot 接口可以实现截图功能。截图仅在播放器播放成功后可以生效。代码示例如下所示。

    int result = this.livePlayer?.snapshot();
    
  2. 截图成功后,会通过播放器 VeLivePlayerObserver 的回调接口 onSnapshotComplete 进行回调,同时将截取的图片数据传递给回调方法。代码示例如下所示。

    onSnapshotComplete(player: VeLivePlayer, bitmap: image.PixelMap): void {
    	// 截图成功回调,参数 bitmap 为截图的图片数据
    }