Android遊戲語音SDK及功能實現流程
阿新 • • 發佈:2018-12-15
在上一篇文章中我們介紹了在iOS環境下如何利用即構遊戲語音SDK快速實現實時語音對話功能。今天我們繼續講在Android環境下用SDK在遊戲過程中,實現同一房間內的成員,進行實時語音對話的功能。
下載 SDK
如果要實現播放本地音訊、視訊檔案的功能(可用於播放背景音樂,播放MV,播放直播音效等場景),請下載包含 MediaPlayer 功能的 SDK,請下載 ZegoAudioRoom_MediaPlayer iOS。
功能實現流程
以 2 人間的遊戲語音為例,主要流程如下:
請注意:
上面流程中以 2 名房間成員間的遊戲語音為例,實際上 Zego SDK 支援多人遊戲語音。建議開發者按需設計。
為了便於開發者更快理解 AudioLive 中的邏輯,下述每節會將功能核心原始碼片段挑出來並加以講解。開發者亦可直接閱讀 AudioLive 原始碼,兩者是一致的。
1、登入房間
使用者間進行實時語音對話前,需要先登入到同一個房間。
AudioLive 中登入相關原始碼片段演實時語音示如下,僅供參考:
SessionActivity.java // 登入房間,登入成功後會自動拉流 private void login(String roomId) { tvEventTips.setText(getString(R.string.zg_tip_begin_login_room, roomId)); zegoAudioRoom.setUserStateUpdate(true); boolean success = zegoAudioRoom.loginRoom(roomId, new ZegoLoginAudioRoomCallback() { @Override public void onLoginCompletion(int state) { 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、釋出直播
房間內成員均可釋出直播,但釋出直播有兩種方式:
自動釋出直播和手動釋出直播,請注意,如果使用者選擇自動釋出直播,登入成功後,SDK 會自動開始推流,使用者無需手動觸發。
AudioLive 中手動釋出直播相關原始碼片段演示如下,僅供參考:
SessionActivity.java // 使用者主動點擊發布直播按鈕 private void handleCommunicate() { 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 介面時
@Override
public void onBackPressed() {
if (hasLogin) {
logout();
}
removeCallbacks();
super.onBackPressed();
}
// 退出房間
private void logout() {
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);
}
// 移除所有回撥
private void removeCallbacks() {
zegoAudioRoom.setAudioRoomDelegate(null);
zegoAudioRoom.setAudioPublisherDelegate(null);
zegoAudioRoom.setAudioPlayerDelegate(null);
zegoAudioRoom.setAudioLiveEventDelegate(null);
zegoAudioRoom.setAudioRecordDelegate(null);
zegoAudioRoom.setAudioDeviceEventDelegate(null);
zegoAudioRoom.setAudioPrepareDelegate(null);
zegoAudioRoom.setAudioAVEngineDelegate(null);
}