You need to enable JavaScript to run this app.
导航
基础功能
最近更新时间:2024.08.02 17:33:59首次发布时间:2024.08.02 17:33:59

本章节为您介绍推流基础功能的接入方法,根据文档提供的操作步骤进行配置,您可接入直播推流能力。

前提条件

注意事项

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

功能接入

本节为您详细介绍如何通过推流 SDK 实现直播推流控制的能力,包括但不限于创建推流引擎、初始化配置、事件监听。

初始化配置

通过修改参数属性值,实现对推流引擎的配置。

推流引擎配置

import {NativeViewComponent} from '@volcengine/react-native-velive-push';


initPusher({
  viewId,
  element: pusherRef.current,
});

<NativeViewComponent
  viewId={viewId}
  ref={pusherRef}
  style={{
    width: '100%',
    height: '100%',
  }}
  onLoad={onViewLoad}
  kind={
    Platform.select({
      android: 'SurfaceView',
      ios: 'UIView',
    })!
  }
/>

创建引擎

本节为您介绍创建推流引擎的方法,需要您提前完成初始化配置。代码示例如下所示:

const mLivePusher = await initPusher(options);

配置事件监听

本节为您介绍推流引擎的事件监听方式。代码示例如下所示:

// 设置推流引擎基础事件回调监听
mLivePusher.setObserver(callback);
// 设置周期性信息回调监听
mLivePusher.setStatisticsObserver(callback, 3);

配置镜像方案

如果您需要使用镜像,我们提供了 3 种镜像方案供您选择。

  • 采集镜像

    本功能会在采集时对视频帧进行镜像效果处理,预览和推流都会产生镜像效果。代码示例如下所示:

    mLivePusher.setVideoMirror(
      VeLiveVideoMirrorType.VeLiveVideoMirrorCapture,
      true,
    );
    
  • 本地预览镜像

    本功能会镜像本地的预览视图,不影响采集和推流。代码示例如下所示:

    mLivePusher.setVideoMirror(
      VeLiveVideoMirrorType.VeLiveVideoMirrorPreview,
      true,
    );
    
  • 推流镜像

    本功能会镜像编码前的视频帧,不影响预览和采集。代码示例如下所示:

    mLivePusher.setVideoMirror(
      VeLiveVideoMirrorType.VeLiveVideoMirrorPushStream,
      true,
    );
    

视频采集控制

为了适应多种业务需求,我们提供了 5 种视频采集模式,并支持在采集模式之间进行切换。

  • 前置摄像头采集

    本功能启用前置摄像头采集功能。代码示例如下所示:

    // 开启前置摄像头采集
    mLivePusher.startVideoCapture(
      VeLiveVideoCaptureType.VeLiveVideoCaptureFrontCamera,
    );
    // 切换至前置摄像头采集
    mLivePusher.switchVideoCapture(
      VeLiveVideoCaptureType.VeLiveVideoCaptureFrontCamera,
    );
    
  • 后置摄像头采集

    本功能启用后置摄像头采集功能。代码示例如下所示:

    // 开启后置摄像头采集
    mLivePusher.startVideoCapture(
      VeLiveVideoCaptureType.VeLiveVideoCaptureBackCamera,
    );
    // 切换至后置摄像头采集
    mLivePusher.switchVideoCapture(
      VeLiveVideoCaptureType.VeLiveVideoCaptureBackCamera,
    );
    
  • 自定义图片

    自定义图片模式支持您使用自定义图片作为视频源进行直播,或在主播 App 进入后台时使用自定义图片作为视频源。更多详情请参考图片推流

    注意

    在使用本接口之前,您需要先调用 mLivePusher.updateCustomImage(Image); 更新自定义图片。

    代码示例如下所示:

    // 开始自定义图片推流
    mLivePusher.startVideoCapture(
      VeLiveVideoCaptureType.VeLiveVideoCaptureCustomImage,
    );
    // 切换至自定义图片推流
    mLivePusher.switchVideoCapture(
      VeLiveVideoCaptureType.VeLiveVideoCaptureCustomImage,
    );
    
  • 尾帧

    当主播 App 进入后台时,您可以使用最近采集的最后一帧图像作为视频源继续进行直播。代码示例如下所示:

    注意

    • 使用尾帧作为视频源,前提必须至少要有一个视频帧数据传入给推流引擎。
    • 使用场景一般为由其它采集类型切换至尾帧采集类型。
    // 切换至尾帧推流
    mLivePusher.switchVideoCapture(
      VeLiveVideoCaptureType.VeLiveVideoCaptureLastFrame,
    );
    
  • 黑帧

    当主播 App 进入后台时,您可以使用纯黑色视频帧继续进行直播。代码示例如下所示:

    // 开始黑帧推流
    mLivePusher.startVideoCapture(
      VeLiveVideoCaptureType.VeLiveVideoCaptureDummyFrame,
    );
    // 切换至黑帧推流
    mLivePusher.switchVideoCapture(
      VeLiveVideoCaptureType.VeLiveVideoCaptureDummyFrame,
    );
    

音频采集控制

为了适应多种业务需求,我们提供了 2 种音频采集模式,并支持在采集模式之间进行切换。

  • 麦克风采集

    使用推流引擎自带的麦克风采集能力。代码示例如下所示:

    // 开启麦克风采集
    mLivePusher.startAudioCapture(
      VeLiveVideoCaptureType.VeLiveAudioCaptureMicrophone,
    );
    // 切换至麦克风采集
    mLivePusher.switchAudioCapture(
      VeLiveVideoCaptureType.VeLiveAudioCaptureMicrophone,
    );
    
  • 静音帧

    当您只需要进行视频直播而不需要音频时,可以开启音频静音采集。代码示例如下所示:

    说明

    主播使用静音帧采集和开启静音,在观众端看到的效果一致。区别在于静音帧采集不会真正启用设备的音频采集能力。

    // 开启静音帧
    mLivePusher.startAudioCapture(
      VeLiveVideoCaptureType.VeLiveAudioCaptureMuteFrame,
    );
    // 切换至静音帧
    mLivePusher.switchAudioCapture(
      VeLiveVideoCaptureType.VeLiveAudioCaptureMuteFrame,
    );
    

视频编码参数控制

您可以通过调用 setVideoEncoderConfiguration 设置视频编码参数。您可以在推流开始后通过该接口动态修改分辨率和码率。我们为您提供了不同清晰度的最佳视频编码参数,您也可以根据您的需求进行调整。代码示例如下所示:

const videoEncoderConfig =
  new VeLiveVideoEncoderConfiguration().initWithResolution(
    VeLiveVideoResolution.VeLiveVideoResolution1080P,
  );
// 推流视频编码格式,默认值为 VeLiveVideoCodecH264
videoEncoderConfig.setCodec(VeLiveVideoCodec.VeLiveVideoCodecH264);
// 视频目标编码码率,单位为 kbps,默认值为 1200。
videoEncoderConfig.setBitrate(1200);
// 视频最小编码码率,单位为 kbps,默认值为 800;如果开启自适应码率,推流 SDK 根据网络情况,进行编码码率自适应的最小码率。
videoEncoderConfig.setMinBitrate(800);
// 视频最大编码码率,单位为 kbps,默认值为 1900;如果开启自适应码率,推流 SDK 根据网络情况,进行编码码率自适应的最大码率。
videoEncoderConfig.setMaxBitrate(1900);
// 视频 GOP 大小,单位为 s,默认值为 2。
videoEncoderConfig.setGopSize(2);
// 视频编码帧率,单位为 fps,默认值为 15。
videoEncoderConfig.setFps(15);
// 是否启用 B 帧,默认值为 false
videoEncoderConfig.setEnableBFrame(false);
// 是否开启硬件编码,默认值为 true
videoEncoderConfig.setEnableAccelerate(true);
// 配置编码参数
mLivePusher.setVideoEncoderConfiguration(videoEncoderConfig);

音频控制

在使用推流引擎自带音频采集能力时,我们提供了多种音频控制能力。代码示例如下所示:

  • 音量响度

    // 获取当前音量响度
    const voiceLoudness = mLivePusher.getAudioDevice().getVoiceLoudness();
    // 设置音量响度,取值范围 [0.0-1.0]
    mLivePusher.getAudioDevice().setVoiceLoudness(0.5);
    
  • 耳返

    // 是否开启了耳返
    const echoEnable = mLivePusher.getAudioDevice().isEnableEcho();
    if (echoEnable) {
      // 关闭耳返
      mLivePusher.getAudioDevice().enableEcho(false);
    } else {
      // 开启耳返
      mLivePusher.getAudioDevice().enableEcho(true);
    }
    

横竖屏控制

我们提供了横竖屏控制能力。代码示例如下所示:

// 设置横竖屏方向
mLivePusher.setOrientation(VeLiveOrientation.VeLiveOrientationLandscape);

静音控制

我们提供了静音控制能力。代码示例如下所示:

if (mLivePusher.isMute()) {
  // 取消静音
  mLivePusher.setMute(false);
} else {
  // 开启静音
  mLivePusher.setMute(true);
}

开始推流

调用推流引擎的 startPush 开始推流。代码示例如下所示:

说明

推流地址获取方式请参见生成推流地址

mLivePusher.startPush('rtmp://push.example.com/push');

停止推流

调用推流引擎的 stopPush 停止推流。代码示例如下所示:

mLivePusher.stopPush();

销毁引擎

调用推流引擎的 destroy 销毁引擎。代码示例如下所示:

mLivePusher.destroy();
mLivePusher = null;