Commit 11ea3344 authored by sheteng's avatar sheteng

语音房间

parent 1f2ac88d
......@@ -25,6 +25,7 @@ import androidx.navigation.NavController;
import androidx.navigation.Navigation;
import com.ccwangluo.ccim.CCIMClient;
import com.ccwangluo.ccim.listener.AudioRoomListener;
import com.ccwangluo.ccim.listener.ResultEventCallback;
import com.ccwangluo.im.adapter.ChannelAdapter;
import com.ccwangluo.im.data.LoginViewModel;
......@@ -173,15 +174,25 @@ public class NotificationsFragment extends Fragment {
binding.joinRoom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CCIMClient.getInstance().joinAudioRoom(getContext(), 1234, new ResultEventCallback<Void>() {
CCIMClient.getInstance().joinAudioRoom(getContext(), 62, new AudioRoomListener() {
@Override
public void onSuccess(Void unused) {
ToastUtil.show(getContext(),"加入成功");
public void onJoinSuccess() {
ToastUtil.show(getContext(), "onJoinSuccess");
}
@Override
public void onFailed(int errorCode) {
ToastUtil.show(getContext(),"加入失败");
public void onJoinFailed(int code) {
ToastUtil.show(getContext(), "onJoinFailed");
}
@Override
public void onExit() {
ToastUtil.show(getContext(), "onExit");
}
@Override
public void onError(int code) {
ToastUtil.show(getContext(), "onError");
}
});
......
......@@ -13,6 +13,7 @@ import androidx.annotation.NonNull;
import com.ccwangluo.ccim.audio.JanusService;
import com.ccwangluo.ccim.audio.ServiceDelegate;
import com.ccwangluo.ccim.listener.AudioRoomListener;
import com.ccwangluo.ccim.listener.OnClientConnectListener;
import com.ccwangluo.ccim.listener.OnConnectListener;
import com.ccwangluo.ccim.listener.OnPlayAudioCallback;
......@@ -675,7 +676,7 @@ public class CCIMClient {
/**
* 加入房间
*/
public void joinAudioRoom(Context context, int roomId, ResultEventCallback<Void> callback) {
public void joinAudioRoom(Context context, int roomId, AudioRoomListener callback) {
JanusConfImpl conf = new JanusConfImpl();
conf.url(audioServer);
conf.plugin(JanusPlugins.VIDEOROOM);
......
package com.ccwangluo.ccim.audio;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.room.Room;
import android.os.Handler;
import android.os.Looper;
import com.ccwangluo.ccim.CCIMClient;
import com.ccwangluo.ccim.listener.AudioRoomListener;
import com.ccwangluo.ccim.listener.ResultEventCallback;
import com.ccwangluo.ccim.modle.User;
import com.ccwangluo.ccim.util.ErrorCode;
......@@ -29,81 +27,83 @@ import com.karumi.dexter.MultiplePermissionsReport;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
import org.webrtc.AudioTrack;
import org.webrtc.DataChannel;
import org.webrtc.EglBase;
import org.webrtc.VideoTrack;
import org.webrtc.Logging;
import org.webrtc.PeerConnection;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
public class JanusService extends JanusDelegate {
private final Logger logger = Logger.getLogger(CCIMClient.class.getName());
private Janus _janus;
private EglBase _rootEgl;
private User user;
private Integer roomId;
private Boolean isJoin = false;
private AppRTCAudioManager audioManager;
private ResultEventCallback<Void> callback;
private AudioRoomListener callback;
public JanusService(Context context, Integer roomId, User user, ResultEventCallback<Void> callback) {
audioManager = AppRTCAudioManager.create(context.getApplicationContext());
// private AppRTCAudioManager audioManager;
public JanusService(Context context, Integer roomId, User user, AudioRoomListener callback) {
this.user = user;
this.roomId = roomId;
this.callback = callback;
}
public void start(Context context, JanusConfImpl conf) {
Dexter.withContext(context).withPermissions(Manifest.permission.RECORD_AUDIO).withListener(new MultiplePermissionsListener() {
@Override
public void onPermissionsChecked(MultiplePermissionsReport report) {
JanusFactory factory = new JanusFactory();
_janus = factory.create(conf,JanusService.this , context.getApplicationContext());
Logging.enableLogToDebugOutput(Logging.Severity.LS_VERBOSE);
_rootEgl = factory.rootEgl();
_janus.init();
if (audioManager != null) {
audioManager.start((selectedAudioDevice, availableAudioDevices) -> {
}
);
}
// if (audioManager != null) {
// audioManager.start((selectedAudioDevice, availableAudioDevices) -> {
//
// }
// );
// }
}
@Override
public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
callback.onFailed(ErrorCode.ERROR_PERMISSION_DENIE);
callback.onJoinFailed(ErrorCode.ERROR_PERMISSION_DENIE);
}
}).check();
}
public void stop() {
this._janus.close();
}
public void hangup() {
this._janus.hangup();
if (_janus != null) {
this._janus.close();
}
}
@Override
public void onClose() {
if (audioManager != null) {
audioManager.stop();
}
logger.info("close");
// if (audioManager != null) {
// audioManager.stop();
// }
}
@Override
public void onError(JanusError error, Bundle context) {
logger.info("onError " + error.toString());
callback.onError(ErrorCode.ERRORCODE_NOT_EXISTS);
}
@Override
public void onReady() {
logger.info("onReady");
Bundle payload = Bundle.create();
payload.setInt("room", roomId);
payload.setString("display", new Gson().toJson(user));
......@@ -124,6 +124,30 @@ public class JanusService extends JanusDelegate {
public void onDatachannelMessage(DataChannel.Buffer buffer) {
}
private State state = State.INIT;
@Override
public void onIceConnectionChange(PeerConnection.IceConnectionState iceConnectionState) {
logger.info("onIceConnectionChange");
if (iceConnectionState == PeerConnection.IceConnectionState.DISCONNECTED) {
stop();
state = State.DISCONNECTED;
callback.onError(ErrorCode.NET_ERROR);
new Handler(Looper.getMainLooper()).postDelayed(() -> {
if (state != State.DISCONNECTED) {
return;
}
_janus.dispatch(JanusCommands.FORCE_DESTROY, Bundle.create());
}, 5000);
}
}
private enum State {
INIT,
STARTED,
DISCONNECTED,
STOPPED
}
@Override
public String onOffer(String sdp) {
......@@ -138,10 +162,12 @@ public class JanusService extends JanusDelegate {
@Override
public void onEvent(JanusEvent event, Bundle context) {
JanusData data = event.data();
logger.info("onEvent " + data.getString("janus",""));
logger.info("onEvent " + data.getString("videoroom",""));
if (data.getString("janus", "").equals("error") && context.getString("command", "").equals(JanusCommands.JOIN)) {
System.out.println("加入失败");
logger.info("加入失败");
if (callback!= null) {
callback.onFailed(ErrorCode.JOIN_AUDIO_FAILED);
callback.onJoinFailed(ErrorCode.JOIN_AUDIO_FAILED);
}
return;
}
......@@ -154,12 +180,12 @@ public class JanusService extends JanusDelegate {
payload.setBool("video", false);
payload.setBool("data", false);
this._janus.dispatch(JanusCommands.PUBLISH, payload);
System.out.println("加入成功");
List<JanusData> publishers = data.getList("publishers");
subscribePublishers(publishers);
if (callback!= null) {
callback.onSuccess(null);
}
logger.info("加入成功");
// List<JanusData> publishers = data.getList("publishers");
// subscribePublishers(publishers);
// if (callback!= null) {
// callback.onJoinSuccess();
// }
}
return;
}
......@@ -186,6 +212,7 @@ public class JanusService extends JanusDelegate {
}
}
}
}
package com.ccwangluo.ccim.listener;
public interface AudioRoomListener {
void onJoinSuccess();
void onJoinFailed(int code);
void onExit();
void onError(int code);
}
......@@ -17,5 +17,6 @@ public class ErrorCode {
public static final int START_VOICE_FAILED = 911; //录音创建失败
public static final int ERROR_PERMISSION_DENIE = 912; //权限拒绝
public static final int JOIN_AUDIO_FAILED = 913; //加入语音失败
public static final int SYSTEM_ERROR = 914; //未知错误
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment