互动直播
音视频互动直播是指两个或两个以上人通过连麦方式进行超低延迟的互动,并将互动的音视频数据传递其他的不同观众。音视频互动直播通常是连麦互动场景。通过连麦可以让主播和连麦观众进行超低延迟的音视频通话,然后由主播将互动数据分发给直播观众。
互动直播分为两个部分: 1、连麦加入同一个房间内进行超低延迟音视频互动。 2、将连麦房间内的音视频数据进行直播分发。 我们提供两种形式: a) 服务端混流并分发直播:由RTC的服务端进行音视频混流,同时将混流后的数据推送给LSS直播服务器,LSS直播服务器直接下发直播流。 i. 优点:网络消耗更少,CPU和GPU压力小,能够适配低端机型。 ii. 缺点:RTC内部为了实时性会动态压缩画面质量,直播出去的清晰度可能不足;由普通推流直播和互动直播服务端转推切换时,观众端播放器需要进行重连拉流,造成卡顿。 b) 本地混流并分发直播:由RTC互动模块产出音视频数据,并由直播推流模块进行推流直播。 i. 优点:画面质量只与预设值相关,不会动态调整。由普通推流直播和互动直播本地混流切换时,观众端播放器可以流畅过度。 ii. 缺点:网络消耗更多,CPU和GPU压力答,需要高端机型适配。
1.1 设置鉴权信息appID
实时音视频通讯appId和token的获取:https://cloud.baidu.com/doc/RTC/s/Qjxbh7jpu 类型;参数 默认值:nil @property (nonatomic, copy) NSString *appId;
示例代码:
1. BDCloudAVRtcRoomParameter *room = [[BDCloudAVRtcRoomParameter alloc] init];
2. room.appId = settings.rtcAppID;
1.2 设置鉴权信息token
实时音视频通讯appId和token的获取:https://cloud.baidu.com/doc/RTC/s/Qjxbh7jpu 类型;参数 默认值:nil @property (nonatomic, copy) NSString *token;
示例代码:
1. room.token = settings.rtcToken;
1.3 设置房间信息roomName
主播和连麦观众必须加入到同一个互动房间才能进行超低延迟会话。因此roomName两个人必须保持一致。 类型;参数 默认值:nil @property (nonatomic, copy) NSString *roomName;
示例代码:
1. room.roomName = settings.roomName;
1.4 设置互动房间内自己的信息userId
为了区分互动房间内的不同人,我们使用userId来区别房间内的不同用户。 注意:同一个房间(roomName)内,一定不能使用两个相同的userId。 类型;参数 默认值:0 @property (nonatomic, assign) NSInteger userId;
示例代码:
1. room.userId = settings.userID;
1.5 设置互动房间内自己的信息userName
房间内不同的虽然不允许相同的userId,但是允许相同的userName。是为了显示房间内的用户更加的灵活。 类型;参数 默认值:nil @property (nonatomic, copy) NSString *userName;
示例代码:
1. room.userName= settings.userName;
1.6 设置纯音频互动
纯音频互动下,能看到对方画面和听到对方声音。但对方不能看到本端画面,只能听到本端声音。 类型;参数 默认值:NO @property (nonatomic, assign) BOOL isOnlyAudio;
示例代码:
1. output.isOnlyAudio = settings.isOnlyAudio;
1.7 设置允许多人互动
受移动端手机性能影响,我们不建议超过2人的音视频互动直播。SDK内我们的最大上限是房间内最多6人。但是在互动直播场景下,我们希望房间内视频通道最多2条(即最多两人开起视频通道,其他人都使用纯音频互动) 类型;参数 默认值:NO @property (nonatomic, assign) BOOL enableMutilVideoPlayer;
示例代码:
1. output.enableMutilVideoPlayer = NO;
1.8 设置输出视频混流模式
互动房间内的视频是多路视频,如果我们希望他们混合成一路视频画面,传递给下一个处理模块,此时就需要设置视频混流的模式。 当前我们支持左右、上下、内嵌三种模式将本地和远端的视频混合在一起。 类型:参数 默认值:BDCloudAVMetalBufferBlendTypeHorizontal @property (nonatomic, assign) BDCloudAVMetalBufferBlendType outputVideoBlendType;
示例代码:
1. // 这里我们设置成内嵌模式
2. output.outputVideoBlendType = BDCloudAVMetalBufferBlendTypeEmbedded;
1.9 设置输出视频混流内嵌模式下的起点坐标
当设置成了内嵌模式,远端画面相对于本地画面是可以设置起始位置的,更加的定制化。 注意:该参数仅适用于内嵌模式 类型:参数 默认值:{ 0 , 0 } @property (nonatomic, assign) CGPoint outputVideoBlendRemotePosition;
示例代码:
1. // 这里我们设置成内左上角
2. output.outputVideoBlendRemotePosition = CGPointMake(0, 0);
1.10 设置输出视频混流内嵌模式下的缩放系数
当设置成了内嵌模式,远端画面相对于本地画面是可以设置缩放比的,更加的定制化。 注意:该参数仅适用于内嵌模式 类型:参数 默认值:0.5 @property (nonatomic, assign) float outputVideoBlendRemoteScale;
示例代码:
1. // 这里我们设置0.3倍
2. output. outputVideoBlendRemoteScale = 0.3;