前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实时音视频SDK,如何实现类似微信的纯语音通话功能?

实时音视频SDK,如何实现类似微信的纯语音通话功能?

原创
作者头像
腾讯云-chaoli
修改2019-04-24 14:27:20
7.9K2
修改2019-04-24 14:27:20
举报
文章被收录于专栏:即时通信与音视频

简介

实时音视频TRTCSDK适用的业务场景是视频会议、坐席视频、在线教育等,如果您希望实现类似微信的语音通话、语音会议功能,TRTCSDK也是支持的,只需要微调几个参数就可以实现,将采集音视频的api,换成只采集音频。

官网开发文档已经给出了音视频会议场景的调用时序,参考官网开发文档,做如下修改即可。

1.初始化 SDK

使用 TRTC SDK 的第一步,是先创建一个 TRTCCloud 的实例对象,并注册监听 SDK 事件的回调。

  • 先继承TRTCCloudListener抽象类并重写您需要监听的事件(用户加入房间、用户退出房间、警告信息、错误信息等)。
  • 创建TRTCCloud实例对象,调用 setListener 方法设置TRTCCloudListener回调。
代码语言:javascript
复制
public class TRTCMainActivity extends Activity{

    private TRTCCloud trtcCloud;              /// TRTC SDK 实例对象
    private TRTCCloudListener trtcListener;    /// TRTC SDK 回调监听

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ....
        trtcListener = new TRTCCloudListenerImpl(this);
        trtcCloud = TRTCCloud.sharedInstance(this);
        trtcCloud.setListener(trtcListener);        
    }

    //静态内部类,重写监听事件
    static class TRTCCloudListenerImpl extends TRTCCloudListener {

        private WeakReference<TRTCMainActivity> mContext;
        public TRTCCloudListenerImpl(TRTCMainActivity activity) {
            super();
            mContext = new WeakReference<>(activity);
        }
     @Override
        public void onEnterRoom(long elapsed) {
            //TODO
        }
     @Override
        public void onExitRoom(int reason) {
            //TODO
        }
     @Override
        public void onError(int errCode, String errMsg, Bundle extraInfo) {
            //TODO
        }
     @Override
        public void onWarning(int warningCode, String warningMsg, Bundle extraInfo) {
            //TODO
        }
     @Override
        public void onUserEnter(String userId) {
            //TODO
        }
    }

    // 销毁 trtcCloud 实例
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //销毁 trtc 实例
        if (trtcCloud != null) {
            trtcCloud.setListener(null);
            trtcCloud.destroy();
        }
        trtcCloud = null;
    }
}

2.组装 TRTCParams

TRTCParams 是 SDK 最关键的一个参数,它包含如下四个必填的字段 SDKAppid,userId,userSig 和 roomId

  • SDKAppid

进入腾讯云实时音视频控制台,如果您还没有应用,请创建一个,即可看到 SDKAppid。

  • userId

您可以随意指定,由于是字符串类型,可以直接跟您现有的账号体系保持一致,但请注意,同一个音视频房间里不应该有两个同名的 userId

  • userSig

基于 sdkAppId 和 userId 可以计算出 userSig,计算方法请参考如何计算UserSig

  • roomId

房间号是数字类型,您可以随意指定,但请注意,同一个应用里的两个音视频房间不能分配同一个 roomId。

3.进入音频通话房间

调用 enterRoom 函数进入房间时,需要上文的 TRTCParams 参数

代码语言:javascript
复制
void enterRoom() {

     // 预览前配置默认参数
     setTRTCCloudParam();

    //TRTCParams 定义参考头文件TRTCCloudDef.java
    trtcParams = new TRTCCloudDef.TRTCParams();
    trtcParams.sdkAppId = sdkappid;
    trtcParams.userId   = userid;
    trtcParams.userSig  = usersig;
    trtcParams.roomId   = 908; //输入你想进入的房间
    trtcCloud.enterRoom(trtcParams, TRTC_APP_SCENE_VIDEOCALL);
}

4.开启本地声音采集,不打开本地视频采集。

TRTC SDK 并不会默认打开本地的麦克风采集,startLocalAudio可以开启本地的声音采集并将音视频数据广播出去,stopLocalAudio则会关闭之。 startLocalAudio 会检查麦克风使用权限,如果没有麦克风权限,SDK 会向用户申请开启。

TRTC SDK 并不会默认打开本地的摄像头采集,startLocalPreview 可以开启本地的摄像头并显示预览画面,stopLocalPreview 则会关闭之。

做音视频通话需要调用startLocalPreview,对于纯音频通话,则不需要调用startLocalPreview,您可以直接注释掉我们官方demo的相关代码。

代码语言:javascript
复制
void setTRTCCloudParam() {
     // 大画面的编码器参数设置
        // 设置视频编码参数,包括分辨率、帧率、码率等等,这些编码参数来自于 TRTCSettingDialog 的设置
        // 注意(1):不要在码率很低的情况下设置很高的分辨率,会出现较大的马赛克
        // 注意(2):不要设置超过25FPS以上的帧率,因为电影才使用24FPS,我们一般推荐15FPS,这样能将更多的码率分配给画质
/*        TRTCCloudDef.TRTCVideoEncParam encParam = new TRTCCloudDef.TRTCVideoEncParam();
        encParam.videoResolution = settingDlg.getResolution();
        encParam.videoFps = settingDlg.getVideoFps();
        encParam.videoBitrate = settingDlg.getVideoBitrate();
        encParam.videoResolutionMode = TRTCCloudDef.TRTC_VIDEO_RESOLUTION_MODE_PORTRAIT;
        trtcCloud.setVideoEncoderParam(encParam);*/

        // 不开启视频采集预览
       /* TXCloudVideoView localVideoView = mVideoViewLayout.getCloudVideoViewByIndex(0);
        localVideoView.setUserId(trtcParams.userId);
        localVideoView.setVisibility(View.VISIBLE);
        trtcCloud.setLocalViewFillMode(TRTCCloudDef.TRTC_VIDEO_RENDER_MODE_FILL);
        trtcCloud.startLocalPreview(true, localVideoView);*/
        //只开启音频采集
        trtcCloud.startLocalAudio();
        trtcCloud.setGSensorMode(TRTCCloudDef.TRTC_GSENSOR_MODE_UIFIXLAYOUT);
}

5.退出房间

调用exitRoom方法退出房间。不论当前是否还在通话中,调用该方法会把音频通话相关的所有资源释放掉。

在您调用exitRoom之后,SDK 会进入一个复杂的退房握手流程,当 SDK 回调 onExitRoom 方法时才算真正完成资源的释放。

代码语言:javascript
复制
private void exitRoom() {
    if (trtcCloud != null) {
        trtcCloud.exitRoom();
    }
}
...
@Override
public void onExitRoom(int reason) {
    TRTCMainActivity activity = mContext.get();
    if (activity != null) {
        activity.finishActivity();
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 1.初始化 SDK
  • 2.组装 TRTCParams
  • 3.进入音频通话房间
  • 4.开启本地声音采集,不打开本地视频采集。
  • 5.退出房间
相关产品与服务
实时音视频
实时音视频(Tencent RTC)基于腾讯21年来在网络与音视频技术上的深度积累,以多人音视频通话和低延时互动直播两大场景化方案,通过腾讯云服务向开发者开放,致力于帮助开发者快速搭建低成本、低延时、高品质的音视频互动解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档