资源行业动态Android语音通话SDK接入和实现流程(实时语音通话三)

Android语音通话SDK接入和实现流程(实时语音通话三)

2019-10-22 | |  140 |   0

原标题:Android语音通话SDK接入和实现流程(实时语音通话三)       来源:简书  [ 水上漂88 ]    

链接:https://www.jianshu.com/p/ab48e9c6bad1


实时语音通话系列文章三。本篇讲述Android环境下如何接入即构科技语音通话SDK,实现语音通话功能流程。


一、SDK接入指引


1、准备环境

请确保开发环境满足以下技术要求:

Android Studio 2.1 或以上版本

已经下载好 Android SDK 25、Android SDK Build-Tools 25.0.2、Android SDK Platform-Tools 25.*.*

Android 版本不低于 4.0.3 且支持音视频的 Android 设备或模拟器(推荐使用真机)

Android 设备已经连接到 Internet


2、下载SDK

请从 ZegoAudioRoom Android下载 SDK。

如果要实现播放本地音频、视频文件的功能(可用于播放背景音乐,播放MV,播放直播音效等场景),请下载包含 MediaPlayer 功能的 SDK,请下载ZegoAudioRoom_MediaPlayer Android


3、集成 SDK

3.1 新建示例工程(此处以新工程为例,如果是集成到已有项目,可忽略此步)

1、打开Android Studio,选择菜单 File-->New-->New Project。


1571687769346097.jpg

2、填写项目名及项目存储路径。

1571687835415987.jpg

3、其它按照默认设置一路 Next,最后点击"Finish"完成新工程创建。

3.2 导入 SDK

注意,目前我们仅提供 .jar 和 .so 形式的SDK,暂不支持 .aar形式的SDK。目前支持的平台

架构包括:armeabi、armeabi-v7a、arm64-v8a。


解压 SDK 至项目目录,如 app/zego_libs。

03.webp.jpg

添加SDK引用。打开 app/build.gradle 文件,添加如下内容:

·在 defaultConfig 节点添加 ndk 节点,指定支持的平台类型

ndk {

    abiFilters 'armeabi' , 'armeabi-v7a', 'arm64-v8a'    }

04.webp.jpg


·在 android 节点添加 sourceSets 节点,指定 zego jni libs 目录

sourceSets {

    main {

        jniLibs.srcDirs = ['zego_libs']

    }

}

05.webp.jpg

·在 dependencies 节点添加

compile fileTree(dir: 'zego_libs', include: ['*.jar'])

06.webp.jpg


添加权限申明。打开 app/AndroidManifest.xml 文件,添加如下内容:


07.webp.jpg

3.3 使用 SDK

参见 API说明-Android API


二、功能实现流程

实时语音场景的典型之一是,同一房间中的成员进行实时语音对话。

以 2 人间的实时语音为例,主要流程如下:

08.webp.jpg


1、登录房间

用户间进行实时语音对话前,需要先登录到同一个房间。

AudioLive 中登录相关源码片段演实时语音示如下,仅供参考:

SessionActivity.java// 登录房间,登录成功后会自动拉流privatevoidlogin(String roomId){

    tvEventTips.setText(getString(R.string.zg_tip_begin_login_room, roomId));

    zegoAudioRoom.setUserStateUpdate(true);

    boolean success = zegoAudioRoom.loginRoom(roomId, new ZegoLoginAudioRoomCallback() {

        @Override        publicvoidonLoginCompletion(intstate){

            MainActivity.ZGLog.d("onLoginCompletion: 0x%1$x", state);

            if (state == 0) {

                hasLogin = true;

                btnAux.setEnabled(true);

                btnMute.setEnabled(true);

                btnRecorder.setEnabled(true);

                btnMicrophone.setEnabled(true);

                if (PrefUtils.isManualPublish()) {

                    btnCommunicate.setEnabled(true);

                }

                tvEventTips.setText(R.string.zg_tip_login_success);

            } else {

                Toast.makeText(SessionActivity.this, String.format("Login Error: 0x%1$x", state), Toast.LENGTH_LONG).show();

                tvEventTips.setText(getString(R.string.zg_tip_login_failed_state, state));

            }

        }

    });

    MainActivity.ZGLog.d("login: %s", success);

    if (!success) {

        tvEventTips.setText(R.string.zg_tip_login_failed);

    }

}


2、发布直播

房间内成员均可发布直播,发布直播有两种方式:自动发布直播和手动发布直播。这里介绍AudioLive 中手动发布直播相关源码片段演示如下,仅供参考:

SessionActivity.java// 用户主动点击发布直播按钮privatevoidhandleCommunicate(){

    if (!PrefUtils.isManualPublish()) return;

    if (hasPublish) {

        zegoAudioRoom.stopPublish();

        btnCommunicate.setText(R.string.zg_start_communicate);

        ZegoAudioStream myStream = new ZegoAudioStream(publishStreamId, PrefUtils.getUserId(), PrefUtils.getUserName());

        streamAdapter.removeItem(myStream);

        publishStreamId = null;

        hasPublish = false;

        tvEventTips.setText(R.string.zg_tip_stop_publish);

    } else {

        btnCommunicate.setEnabled(false);

        zegoAudioRoom.startPublish();

    }

}


3、播放直播

房间内成员均可播放直播,登录房间成功后,SDK 会自动拉流播放直播。用户无需手动触发拉流。


4、结束音频直播

音频通话结束后的操作主要是登出房间、清理视图或数据等。开发者可按需调用。

AudioLive 中结束音频直播相关源码片段演示如下,仅供参考:

SessionActivity.java// 用户退出 SessionActivity 界面时@OverridepublicvoidonBackPressed(){

    if (hasLogin) {

        logout();

    }

    removeCallbacks();

    super.onBackPressed();

}// 退出房间privatevoidlogout(){

    boolean success = zegoAudioRoom.logoutRoom();

    streamAdapter.clear();

    hasLogin = false;

    hasPublish = false;

    btnAux.setEnabled(false);

    btnMute.setEnabled(false);

    btnRecorder.setEnabled(false);

    btnMicrophone.setEnabled(false);

    btnCommunicate.setText(R.string.zg_start_communicate);

    if (PrefUtils.isManualPublish()) {

        btnCommunicate.setEnabled(false);

    }

    MainActivity.ZGLog.d("logout: %s", success);

}// 移除所有回调privatevoidremoveCallbacks(){

    zegoAudioRoom.setAudioRoomDelegate(null);

    zegoAudioRoom.setAudioPublisherDelegate(null);

    zegoAudioRoom.setAudioPlayerDelegate(null);

    zegoAudioRoom.setAudioLiveEventDelegate(null);

    zegoAudioRoom.setAudioRecordDelegate(null);

    zegoAudioRoom.setAudioDeviceEventDelegate(null);

    zegoAudioRoom.setAudioPrepareDelegate(null);

    zegoAudioRoom.setAudioAVEngineDelegate(null);

}

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:2019年深度学习自然语言处理十大发展趋势

下一篇:实时语音音效

用户评价
全部评价

热门资源

  • 国内人才报告:机...

    近日,BOSS 直聘职业科学实验室 &BOSS 直聘研究院...

  • AI使物联网更智能...

    看到微软对物联网和人工智能的结合感兴趣是一个明...

  • 推荐一批学习自然...

    这里推荐一批学习自然语言处理相关的书籍,当然,...

  • 安防智能化大势下...

    大部分传统安防设备不仅拍摄视野有限,而且无法事...

  • 20亿创业基金、10...

    近日,杭州举办了建设国家新一代人工智能创新发展...