推流

更新时间:2021-05-26

功能简介

在多人通话和互动直播等场景中,如果想要其他人能够看到自己的画面和听到自己的声音,需要先推送自己的音视频画面和声音到 云端服务 上。然后对端再从 云端服务 上拉取音视频流,才可以获取到视频画面和听到声音。

步骤

推流相关 API

  • 登录房间成功后即可进行推流操作,如果要推音频和视频流则必须先开启本地摄像头采集

  • 如果登录房间的时候 isOnlyAudio 参数为 YES 则只发送音频数据,视频数据不会发送,拉流方只能拉取到音频数据。

/* 发布音视频数据(推流) */
[[LVRTCEngine sharedInstance] startPublishing];

/* 停止发布音视频数据 */
[[LVRTCEngine sharedInstance] stopPublishing];

推流状态变更的通知

  • 调用 startPublishing 推流接口之后,成功和失败的状态通过 OnPublishStateUpdate 接口回调 。

  • 错误码可参考 推流状态回调错误码

/*
 * 发布资源状态变更的通知,调用 startPublishing 之后会触发该方法回调,发布资源状态的变更会通过该方法进行通知
 * @param code 状态码
 */
- (void)OnPublishStateUpdate:(LVErrorCode)code;

推流在具体业务场景中处理

场景使用参考

  • 开播端 - 推流

    1. startCapture 开启摄像头采集

    2. addDisplayView 添加绑定渲染视图

    3. loginRoom 登录房间,在OnEnterRoomComplete 中进行处理。

    4. startPublishing 开始推流

  • 加入端

    1. loginRoom 登录房间,拉取房间所有流,在 OnEnterRoomComplete 中进行处理。

    2. addDisplayView 添加绑定渲染视图,指定视图 uid

    3. startPlayingStream 开始拉流。

其它 API

设置推流信息回调频率

  • 推流状态的变更通过 OnPublishStateUpdate 方法回调。
  • 通过设置推流信息回调频率,在 OnPublishQualityUpdate 拿到相关质量信息。
/* 设置推流时数据统计信息回调的频率(必须在登录房间之前设置) */
[LVRTCEngine setPublishQualityMonitorCycle:1];

/*
 * 推流质量状态变化的通知,SDK 内部会定时统计推流的质量信息,APP 可以实现该方法获取推流的视频质量信息统计,回调的频率可以通过 +setPublishQualityMonitorCycle 进行设置
 * @param quality 质量信息
 */
- (void)OnPublishQualityUpdate:(LVVideoStatistic *)quality;

LVVideoStatistic 数据信息回调类

  • 此类包含推流的相关信息,包含帧率、分辨率、码率等。
// 视频编码帧数量
@property (nonatomic, assign) int videoEncodeFrames;

/* 视频总发送包数量 */
@property (nonatomic, assign) int videoSentPackets;

/* 视频总发送字节数 */
@property (nonatomic, assign) long long videosentKbytes;

/* 视频输入帧率 */
@property (nonatomic, assign) int videoFps;

/* 视频丢包总数 */
@property (nonatomic, assign) int videoLostPackets;

/* 音频丢包总数 */
@property (nonatomic, assign) int audioLostPackets;

/* 当前可用的发送带宽 */
@property (nonatomic, assign) int availableSendBandwidth;

/* 视频码率 */
@property (nonatomic, assign) int videobitratebps;

/* 音频码率 */
@property (nonatomic, assign) int audiobitratebps;

/* 视频编码耗时,单位ms,仅对视频发送方有效 */
@property (nonatomic, assign) int videoAvgEncodeCostMs;

/* 音频包 RTT,单位 ms */
@property (nonatomic, assign) int audioRtt;

/* 视频包 RTT,单位 ms */
@property (nonatomic, assign) int videoRtt;

/* 累计视频丢包百分比 */
@property (nonatomic, assign) int videoLostPercent;

/* 累计音频丢包百分比 */
@property (nonatomic, assign) int audioLostPercent;

/* 推流:编码视频宽,拉流:输入视频宽 */
@property (nonatomic, assign) int frameWidth;

/* 推流:编码视频高,拉流:输入视频高 */
@property (nonatomic, assign) int frameHeight;