tencent cloud

文档反馈

iOS

最后更新时间:2023-09-26 16:53:49

    具体代码实现

    1. 创建主子实例

    // 创建 TRTCCloud 主实例(人声实例)
    TRTCCloud *trtcCloud = [TRTCCloud sharedInstance];
    // 创建 TRTCCloud 子实例(伴奏实例)
    TRTCCloud *subCloud = [trtcCloud createSubCloud];
    注意:
    实时合唱方案中,主唱端需要分别创建主实例-人声实例和子实例-伴奏实例,分别用于上行人声及伴奏音乐。

    2. 人声实例进房推流

    TRTCParams *params = [[TRTCParams alloc] init];
    params.sdkAppId = sdkAppId;
    params.userId = userId;
    params.userSig = userSign;
    params.role = TRTCRoleAnchor;
    params.roomId = roomIdIntValue;
    [trtcCloud enterRoom:params appScene:TRTCAppSceneLIVE];
    // 打开音频上行,设置音质
    [trtcCloud startLocalAudio:TRTCAudioQualityMusic];
    // 设置媒体类型
    [trtcCloud setSystemVolumeType:TRTCSystemVolumeTypeMedia];
    // 静音远端伴奏音乐
    [trtcCloud muteRemoteAudio:remoteAudioId mute:YES];
    注意:
    纯 RTC 音频场景下,进房场景推荐选用 VOICE_CHATROOM。
    若有视频或转推 CDN 需求,进房场景则须选用 LIVE,VOICE_CHATROOM 会在转推时添加纯音频参数,从而导致 SEI 消息无法透传。
    主唱/合唱端需要 muteRemoteAudio(true) 取消订阅伴奏实例上行的音频流,否则会重复播放本地及远端的伴奏音乐。

    3. 伴奏实例进房推流

    TRTCParams *bgmParams = [[TRTCParams alloc] init];
    bgmParams.sdkAppId = sdkAppId;
    bgmParams.userId = [NSString stringWithFormat:@"%@%@",userId,@"_bgm"];
    bgmParams.userSig = bgmUserSign;
    bgmParams.role = TRTCRoleAnchor;
    bgmParams.roomId = roomIdIntValue;
    [subCloud enterRoom:bgmParams appScene:TRTCAppSceneLIVE];
    //设置媒体类型
    [subCloud setSystemVolumeType:TRTCSystemVolumeTypeMedia];
    // 开启预加载
    NSDictionary *jsonDict = @{
    @"api": @"preloadMusic",
    @"params": @{
    @"musicId": @(self.currentPlayMusicID),
    @"path": path,
    @"startTimeMS": @(startMs),
    }
    };
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:0 error:NULL];
    NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    [subCloud callExperimentalAPI:jsonString];
    // 播放伴奏音乐并推流(在约定时间播放)
    TXAudioMusicParam *musicParam = [[TXAudioMusicParam alloc] init];
    musicParam.ID = musicID;
    musicParam.path = url;
    musicParam.loopCount = 0;
    musicParam.publish = YES;
    // 将伴奏音乐传到远端
    param.publish = YES;
    [[subCloud getAudioEffectManager] startPlayMusic:musicParam onStart:startBlock onProgress:progressBlock onComplete:completedBlock]
    注意:
    注意区分主实例和子实例的 userId,确保不重复且容易辨别。
    伴奏实例播放背景音乐参数 musicParam 设置:
    publish:YES(音乐在本地播放的同时,远端用户也能听到该音乐)
    publish:NO(默认值,只能在本地听到该音乐,远端用户听不到)

    4. 发起混流转码回推

    // 创建 TRTCPublishTarget 对象
    TRTCPublishTarget *publishTarget = [[TRTCPublishTarget alloc] init];
    // 混流后回推到房间,若发布到 CDN 应填 TRTCPublishMixStreamToCdn
    publishTarget.mode = TRTCPublishMixStreamToRoom;
    // 混流机器人的 userid,不能和房间内其他用户的 userid 重复
    publishTarget.mixStreamIdentity = [NSString stringWithFormat:@"%@%@",userId,@"_mix"];
    // 设置转码后的音频流的编码参数
    TRTCStreamEncoderParam *streamEncoderParam = [[TRTCStreamEncoderParam alloc] init];
    streamEncoderParam.videoEncodedFPS = 15;
    streamEncoderParam.videoEncodedGOP = 3;
    streamEncoderParam.videoEncodedKbps = 30;
    streamEncoderParam.audioEncodedSampleRate = 48000;
    streamEncoderParam.audioEncodedChannelNum = 2;
    streamEncoderParam.audioEncodedKbps = 64;
    streamEncoderParam.audioEncodedCodecType = 2;
    
    // 设置音频混流参数
    TRTCStreamMixingConfig *streamMixingConfig = [[TRTCStreamMixingConfig alloc] init];
    // 支持填写空值,会自动将所有主播的音频混合输出
    streamMixingConfig.audioMixUserList = @[];
    
    // 发起混流转推请求
    [trtcCloud startPublishMediaStream:publishTarget encoderParam:streamEncoderParam mixingConfig:streamMixingConfig];
    注意:
    优先选择主唱通过混流机器人向后台发起混流转推,将伴奏音乐和各路人声混合后回推至 TRTC 房间,或转推至直播 CDN。
    自动订阅模式下,参与混流转码的主播默认互相拉取单流,不接收回推房间的混流;观众自动拉取回推房间的混流,不再接收单流。
    这里的混流转推方法 startPublishMediaStream 采用全新的后台架构,旧版应用需提供 SdkAppId 申请升级后方可使用。
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持