简介

实时音视频TRTCSDK适用的业务场景是视频会议、坐席通话、在线教育等,也可以实现类似微信的语音通话、语音会议功能,

官网开发文档已经给出了音视频通话的调用示例,本专栏的《实现类似微信的纯语音通话》也提供了纯音频通话示例。接下来就是本文重点:怎么把通话的纯音频流,从实时音视频后台,旁推到直播后台,提供海量用户使用CDN地址播放收听??

实现

把音视频数据流旁推到直播后台,直播后台接收流的依据是以画面数据为准的,纯音频流里面没有画面数据,这就需要额外的信令通道来提醒直播后台:“这条是音频流,麻烦接收一下”。下面我们就来看,如何通过TRTCSDK的终端接口,实现传信令的功能。

Android:

1.构造音频推流参数

音频推流参数需要填充到TRTCParams.businessInfo字段中,因为音频推流参数是一个 JSON 字符串,所以需要构造一个JSON数据。

JSONObject Str_uc_params = new JSONObject();
JSONObject pure_audio_push_mod = new JSONObject();

try {
    pure_audio_push_mod.put("pure_audio_push_mod", 1); 
    // 1: 允许纯音频推流,2: 允许纯音频推流+录制
    Str_uc_params.put("Str_uc_params", pure_audio_push_mod);
    Log.i(TAG, "纯音频推流参数: " + Str_uc_params.toString());
} catch (JSONException e) {
    e.printStackTrace();
}

iOS、Windows、Mac、Linux端也是适用,小程序端看文档进阶:小程序实时音视频参数透传

2.设置频推流参数

然后赋值给 TRTCParams.businessInfo

private TRTCCloudDef.TRTCParams trtcParams;     
// TRTC SDK 视频通话房间进入所必须的参数
Intent intent       = getIntent();
int sdkAppId        = intent.getIntExtra("sdkAppId", 0);
int roomId          = intent.getIntExtra("roomId", 0);
String selfUserId   = intent.getStringExtra("userId");
String userSig      = intent.getStringExtra("userSig");

trtcParams = new TRTCCloudDef.TRTCParams(sdkAppId, selfUserId, userSig, roomId, "", 
Str_uc_params.toString());
  1. 进入房间
trtcCloud.startLocalAudio();
//进房
trtcCloud.enterRoom(trtcParams, TRTCCloudDef.TRTC_APP_SCENE_VIDEOCALL);

iOS:

// 设置纯音频旁路参数
self.param.bussInfo = @"{\"Str_uc_params\":{\"pure_audio_push_mod\":1}}";
// 进房
[_trtc enterRoom:self.param appScene:TRTCAppSceneVideoCall];

注意:传给SDK的json字符串参数注意大小写一致,参数名错误会导致进房失败。

补充:

纯音频推流参数完整说明:

{
  "Str_uc_params": {
    "record_id": 43567,   //可选字段,自动录制时业务自定义id,int32,录制回调时给到用户.注意:同一个房间中的成员,这个字段要么全带,要么不带.且值需要一致
    "pure_audio_push_mod": 1,  //可选字段,纯音频推流模式。 1表示旁路推流;2表示旁路推流+录制
    "recordfile_storage_time": 10000   //录制文件保存时长,单位秒
  }
}

文章来源于腾讯云开发者社区,点击查看原文