You need to enable JavaScript to run this app.
导航
进阶功能
最近更新时间:2024.08.06 15:29:39首次发布时间:2024.08.02 17:33:59

本章节为您介绍推流 SDK 进阶功能的接入方式,支持的进阶功能包括但不限于 RTM 协议推流、QUIC 协议推流、多 URL 推流、H.265 硬件编码等。您可以根据实际业务需求,借助推流 SDK 实现更复杂的功能。

前提条件

注意事项

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

功能接入

RTM 协议推流(仅 iOS 支持)

视频直播推流 SDK 支持 RTM 协议推流,详细信息可参考超低延时直播介绍

  1. 使用视频直播控制台的地址生成器,生成 RTM 推流地址。

  2. 开始推流时,将 SDK 推流地址设置为 RTM 地址。代码示例如下所示:

    mLivePusher.startPush('http://example.push/stream.sdp'); //添加 RTM 协议推流地址
    
  3. (可选)配置自动降级。代码示例如下所示:

    说明

    配置自动降级后,RTM 推流失败时,推流 SDK 将自动降级到 RTMP 推流。使用此功能需同时设置 RTM 和 RTMP 推流地址。

    const urls = [];
    urls.push('http://example.push/stream.sdp'); // 添加 RTM 协议推流地址
    urls.push('rtmp://example.push/stream'); // 添加 RTMP 协议推流降级地址
    mLivePusher.startPushWithUrls(urls);
    

RTMPS 协议推流

视频直播推流 SDK 支持 RTMPS 协议推流。

  1. 使用视频直播控制台的地址生成器,生成 RTMP 推流地址。

  2. 修改推流地址协议,将 RTMP 推流地址中的 rtmp 协议修改为 rtmps。例如:

    • 获取的 RTMP 地址为:rtmp://example.push/stream
    • 修改后的 RTMPS 地址为:rtmps://example.push/stream
    mLivePusher.startPush('rtmps://example.push/stream'); //添加 RTMPS 协议推流地址
    
  3. (可选)配置自定降级。代码示例如下所示:

    说明

    配置自动降级后,RTMPS 推流失败时,推流 SDK 将自动降级到 RTMP 推流。使用此功能需同时设置 RTMPS 和 RTMP 推流地址。

    const urls = [];
    urls.push('rtmps://example.push/stream'); // 添加 RTMPS 协议推流地址
    urls.push('rtmp://example.push/stream'); // 添加 RTMP 协议推流降级地址
    mLivePusher.startPushWithUrls(urls);
    

QUIC 协议推流

视频直播推流 SDK 支持 QUIC 协议推流。

  1. 使用视频直播控制台的地址生成器,生成 RTMP 推流地址。

  2. 修改推流地址协议,将 RTMP 推流地址中的 rtmp 协议修改为 rtmpq。例如:

    • 获取的 RTMP 地址为:rtmp://example.push/stream
    • 修改后的 QUIC 地址为:rtmpq://example.push/stream
    mLivePusher.startPush('rtmpq://example.push/stream'); //添加 QUIC 协议推流地址
    

    说明

    推流 SDK 默认开启 QUIC 协议推流的自动降级策略。无需额外配置, QUIC 协议推流失败后,SDK 将自动降级为 RTMP 协议推流。

多 URL 推流

使用多 URL 推流,可以在推流失败后自动切换到下一个推流地址继续推流,提高推流的稳定性和可靠性。

说明

多 URL 推流的地址数量无限制,推流引擎会按顺序遍历所有的推流地址,直至最后无可用地址后报错。

代码示例如下所示:

const urls = [];
urls.push('rtmp://example.push/stream_1');
urls.push('rtmp://example.push/stream_2');
mLivePusher.startPushWithUrls(urls);

H.265 硬件编码

使用 H.265 硬件编码,可在相同画质下有效降低带宽开销;也可在带宽开销相同时,提供更优异的画质体验。

说明

License 版本为高级版的 SDK 应用支持 H.265 硬件解码。

  1. 配置白名单。

    说明

    部分 Android 机型不支持 H.265 硬件编码,视频直播云端提供机型白名单,使用 H.265 硬件编码前请联系技术支持配置云端白名单。

  2. 配置硬件编码并创建推流引擎。代码示例如下所示:

    // 创建推流配置
    const encoderConfiguration = new VeLiveVideoEncoderConfiguration();
    // 配置编码类型为 H.265
    encoderConfiguration.setCodec(VeLiveVideoCodec.VeLiveVideoCodecByteVC1);
    // 创建推流引擎
    const mLivePusher = config.build();
    // 设置推流引擎的编码配置
    mLivePusher.setVideoEncoderConfiguration(encoderConfiguration);
    

图片推流

推流 SDK 除支持手机摄像头采集推流外,还支持使用单张图片推流。代码示例如下所示:

const image = Image.resolveAssetSource({
  uri: 'PATH/bg.jpg',
});
// 更新推流图片
mLivePusher.updateCustomImage(bitmap);
// 开启视频采集类型为自定义图片
mLivePusher.startVideoCapture(
  VeLiveVideoCaptureType.VeLiveVideoCaptureCustomImage,
);

背景音乐控制

在直播业务中,有些主播会在直播间 K 歌或播放背景音乐,下面为您介绍相关能力的接口。

  1. 获取媒体音乐播放器。代码示例如下所示:

    const mediaPlayer = mLivePusher.createPlayer();
    
  2. 设置音乐文件路径,支持的文件格式包括 MP3、AAC、M4A、WAV。代码示例如下所示:

    // 设置文件路径
    mediaPlayer.prepare('PATH/music.mp3');
    
  3. 设置是否混音到直播流。代码示例如下所示:

    // 设置是否混音到直播流
    mediaPlayer.enableMixer(true);
    
  4. 设置是否循环播放。代码示例如下所示:

    // 设置是否循环播放。
    mediaPlayer.enableBGMLoop(true);
    
  5. 开始播放。代码示例如下所示:

    // 开始播放
    mediaPlayer.start();
    
  6. 调整背景音乐音量和主播音量。代码示例如下所示:

    // 设置背景音乐音量大小 0.0 - 1.0
    mediaPlayer.setBGMVolume(0.8);
    // 设置主播声音音量大小 0.0 - 1.0
    mediaPlayer.setVoiceVolume(1.0);
    
  7. 快进播放。代码示例如下所示:

    // 快进到某个时间点,可以通过 mediaPlayer.getDuration() 获取文件总时长
    mediaPlayer.seek(3000);
    
  8. 暂停播放、继续播放。代码示例如下所示:

    // 暂停
    mediaPlayer.pause();
    // 继续
    mediaPlayer.resume();
    
  9. 停止播放。代码示例如下所示:

    // 停止播放
    mediaPlayer.stop();
    

SEI

在直播过程中,有些信息需要跟随视频帧到达每一个观众,推流引擎提供了发送 SEI 的接口,可以编码自定义信息到关键帧或者每个视频帧里。代码示例如下所示:

// 发送 SEI 信息
mLivePusher.sendSeiMessage(
  'key',
  {
    key: 'value',
    key2: 'value2',
  },
  -1,
  true,
  true,
);

直播录制

直播过程中,支持主播将自己的精彩直播录制并保存在手机上,推流 SDK 提供了相应的录制能力。

  1. 配置录制参数,开始录制。代码示例如下所示:

    // 设置录制参数
    VeLivePusherDef.VeLiveFileRecorderConfiguration recordConfig = new VeLivePusherDef.VeLiveFileRecorderConfiguration();
    // 录制视频的宽度
    recordConfig.setWidth(720);
    // 录制视频的高度
    recordConfig.setHeight(1280);
    // 录制视频的帧率
    recordConfig.setFps(15);
    // 录制视频的码率
    recordConfig.setBitrate(2000);
    
    mLivePusher.startFileRecording("PATH/record.mp4", recordConfig, {
     // 直播录制开始回调。
     onFileRecordingStarted() {},
     // 直播录制停止回调。
     onFileRecordingStopped() {},
     // 错误码,详情请参见 VeLivePusherCode
     // 直播录制错误回调。
     onFileRecordingError(errorCode: number, message: string) {}
    });
    
  2. 停止录制。代码示例如下所示:

    mLivePusher.stopFileRecording();
    

后台推流

直播过程中,支持主播在 App 进入到后台时持续推流,推流 SDK 提供了相应的后台推流能力。

说明

  1. 使用后台推流能力,需先打开 App 的后台音频采集权限;
  2. 后台推流提供尾帧、黑帧、图片三种模式推流。

根据不同的模式,切换后台视频采集类型。代码示例如下所示:

AppState.addEventListener('change', async state => {
  if (state === 'active') {
    // 这里业务上可以记录上次开启的视频采集类型,在进入前台后切换为上次的采集类型
    mLivePusher.switchVideoCapture(VeLiveVideoCaptureFrontCamera);
  } else if (state === 'backgroud') {
    // 尾帧推流
    mLivePusher.switchVideoCapture(VeLiveVideoCaptureLastFrame);
    // 黑帧推流
    // mLivePusher.switchVideoCapture(VeLiveVideoCaptureDummyFrame);
    // 后台图片推流
    // Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
    // mLivePusher.updateCustomImage(bitmap);
    // mLivePusher.switchVideoCapture(VeLiveVideoCaptureCustomImage);
  }
});

录屏推流(仅 Android 支持)

推流 SDK 除了支持手机摄像头采集推流外,还支持手机屏幕采集推流。屏幕采集推流适用于游戏直播、移动端 App 演示等场景。

import {startScreenCapture} from '@volcengine/react-native-velive-push';
// 开启屏幕采集
startScreenCapture(mLivePusher, {
  enableAppAudio: true,
});