You need to enable JavaScript to run this app.
文档中心
视频直播

视频直播

复制全文
React Native
基础功能
复制全文
基础功能

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

前提条件

已集成并初始化 React Native 推流 SDK。详见集成 React Native 推流 SDK初始化 React Native 推流 SDK

注意事项

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

功能接入

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

初始化配置

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

import {NativeViewComponent} from '@volcengine/react-native-live-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,
    );
    

视频采集控制

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

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

    // 开启前置摄像头采集
    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,
    );
    
  • 屏幕采集
    通过屏幕采集推流,主播可以将手机屏幕上的内容实时推送到服务器,让观众能够看到主播的屏幕操作或游戏画面。屏幕采集推流适用于游戏直播、移动端 App 演示等场景。具体实现方法,详见录屏推流

音频采集控制

为了适应多种业务需求,我们提供了 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;
最近更新时间:2026.03.31 15:33:48
这个页面对您有帮助吗?
有用
有用
无用
无用