文档

主播PK场景实现静音功能

更新时间:

本文为您介绍主播PK场景下如何实现静音和取消静音功能的操作方法。

操作步骤

说明

静音或取消静音调用setLiveMixTranscodingConfig接口不宜特别频繁,建议两次调用间隔应大于1秒。

实现静音功能

房间A的主播A和房间B的主播B进行PK , PK过程中 , 主播A想要将主播B的音频静掉,房间A内的主播和观众 , 均听不到主播B的声音。而主播B在B房间的发言不受影响 ,想要完成这样的静音功能,需要分两个操作:

  • 主播A调用AlivcLivePlayer接口pauseAudioPlaying在本地静音掉主播B的声音。

  • 房间A对应的混流时需要将主播B的声音去掉,主播A调用setLiveMixTranscodingConfig接口,在参数AlivcLiveMixStream中将主播B的streamType从AlivcLiveMixStreamTypeAudioVideo修改成AlivcLiveMixStreamTypePureVideo。

Android示例代码:

if (alivcLivePlayer != null) {
    alivcLivePlayer.pauseAudioPlaying();
}

AlivcLiveTranscodingConfig transcodingConfig = new AlivcLiveTranscodingConfig();
AlivcLiveMixStream anchorMixStream = new AlivcLiveMixStream();
if (mAlivcLivePushConfig != null) {
    anchorMixStream.setUserId(anchorId);
    anchorMixStream.setX(0);
    anchorMixStream.setY(0);
    anchorMixStream.setWidth(mAlivcLivePushConfig.getWidth() / 2);
    anchorMixStream.setHeight(mAlivcLivePushConfig.getHeight() / 2);
    anchorMixStream.setZOrder(1);
    anchorMixStream.setMixStreamType(AlivcLiveMixStreamType.AUDIO_VIDEO);
}
AlivcLiveMixStream pkAnchorMixStream = new AlivcLiveMixStream();
if (mAudienceFrameLayout != null) {
    pkAnchorMixStream.setUserId(pkAnchor);
    pkAnchorMixStream.setX(mAlivcLivePushConfig.getWidth() / 2);
    pkAnchorMixStream.setY(0);
    pkAnchorMixStream.setWidth(mAlivcLivePushConfig.getWidth() / 2);
    pkAnchorMixStream.setHeight(mAlivcLivePushConfig.getHeight() / 2);
    pkAnchorMixStream.setZOrder(2);
    pkAnchorMixStream.setMixStreamType(AlivcLiveMixStreamType.PURE_VIDEO);
}
ArrayList<AlivcLiveMixStream> mixStreams = new ArrayList<>();
mixStreams.add(anchorMixStream);
mixStreams.add(pkAnchorMixStream);
transcodingConfig.setMixStreams(mixStreams);
if (mAlivcLivePusher != null) {
    mAlivcLivePusher.setLiveMixTranscodingConfig(transcodingConfig);
}

iOS示例代码:

[self.rtcPlayer pauseAudioPlaying];

AlivcLiveTranscodingConfig *liveTranscodingConfig = [[AlivcLiveTranscodingConfig alloc] init];
    
AlivcLiveMixStream *anchorMixStream = [[AlivcLiveMixStream alloc] init];
anchorMixStream.userId = userA;
anchorMixStream.x = 0;
anchorMixStream.y = 0;
anchorMixStream.width = [self.rtcPushConfig getPushResolution].width;
anchorMixStream.height = [self.rtcPushConfig getPushResolution].height;
anchorMixStream.zOrder = 1;
anchorMixStream.streamType = AlivcLiveMixStreamTypeAudioVideo;

AlivcLiveMixStream *audienceMixStream = [[AlivcLiveMixStream alloc] init];
audienceMixStream.userId = userB;
audienceMixStream.x = 100;
audienceMixStream.y = 200;
audienceMixStream.width = 200;
audienceMixStream.height = 300;
audienceMixStream.zOrder = 2;
audienceMixStream.streamType = AlivcLiveMixStreamTypePureVideo;

liveTranscodingConfig.mixStreams = [NSArray arrayWithObjects:anchorMixStream, audienceMixStream, nil];
[self.rtcPusher setLiveMixTranscodingConfig:liveTranscodingConfig];

取消静音功能

取消静音需求,也需要分两个操作:

  • 主播A调用AlivcLivePlayer的接口resumeAudioPlaying取消静掉本地播放。

  • 主播A调用setLiveMixTranscodingConfig接口,在参数AlivcLiveMixStream中将主播B的streamType从AlivcLiveMixStreamTypePureVideo修改成AlivcLiveMixStreamTypeAudioVideo

Android示例代码:

if (alivcLivePlayer != null) {
    alivcLivePlayer.resumeAudioPlaying();
}

AlivcLiveTranscodingConfig transcodingConfig = new AlivcLiveTranscodingConfig();
AlivcLiveMixStream anchorMixStream = new AlivcLiveMixStream();
if (mAlivcLivePushConfig != null) {
    anchorMixStream.setUserId(anchorId);
    anchorMixStream.setX(0);
    anchorMixStream.setY(0);
    anchorMixStream.setWidth(mAlivcLivePushConfig.getWidth() / 2);
    anchorMixStream.setHeight(mAlivcLivePushConfig.getHeight() / 2);
    anchorMixStream.setZOrder(1);
    anchorMixStream.setMixStreamType(AlivcLiveMixStreamType.AUDIO_VIDEO);
}
AlivcLiveMixStream pkAnchorMixStream = new AlivcLiveMixStream();
if (mAudienceFrameLayout != null) {
    pkAnchorMixStream.setUserId(pkAnchor);
    pkAnchorMixStream.setX(mAlivcLivePushConfig.getWidth() / 2);
    pkAnchorMixStream.setY(0);
    pkAnchorMixStream.setWidth(mAlivcLivePushConfig.getWidth() / 2);
    pkAnchorMixStream.setHeight(mAlivcLivePushConfig.getHeight() / 2);
    pkAnchorMixStream.setZOrder(2);
    pkAnchorMixStream.setMixStreamType(AlivcLiveMixStreamType.AUDIO_VIDEO);
}
ArrayList<AlivcLiveMixStream> mixStreams = new ArrayList<>();
mixStreams.add(anchorMixStream);
mixStreams.add(pkAnchorMixStream);
transcodingConfig.setMixStreams(mixStreams);
if (mAlivcLivePusher != null) {
    mAlivcLivePusher.setLiveMixTranscodingConfig(transcodingConfig);
}

iOS示例代码:

[self.rtcPlayer resumeAudioPlaying];

AlivcLiveTranscodingConfig *liveTranscodingConfig = [[AlivcLiveTranscodingConfig alloc] init];

AlivcLiveMixStream *anchorMixStream = [[AlivcLiveMixStream alloc] init];
anchorMixStream.userId = userA;
anchorMixStream.x = 0;
anchorMixStream.y = 0;
anchorMixStream.width = [self.rtcPushConfig getPushResolution].width;
anchorMixStream.height = [self.rtcPushConfig getPushResolution].height;
anchorMixStream.zOrder = 1;
anchorMixStream.streamType = AlivcLiveMixStreamTypeAudioVideo;

AlivcLiveMixStream *audienceMixStream = [[AlivcLiveMixStream alloc] init];
audienceMixStream.userId = userB;
audienceMixStream.x = 100;
audienceMixStream.y = 200;
audienceMixStream.width = 200;
audienceMixStream.height = 300;
audienceMixStream.zOrder = 2;
audienceMixStream.streamType = AlivcLiveMixStreamTypeAudioVideo;

liveTranscodingConfig.mixStreams = [NSArray arrayWithObjects:anchorMixStream, audienceMixStream, nil];
[self.rtcPusher setLiveMixTranscodingConfig:liveTranscodingConfig];
  • 本页导读 (1)
文档反馈