package computician.janusclient;
import android.content.Context;
import android.opengl.EGLContext;
import android.util.Log;
import org.json.JSONObject;
import org.webrtc.MediaStream;
import org.webrtc.PeerConnection;
import org.webrtc.VideoRenderer;
import org.webrtc.VideoRendererGui;
import java.util.ArrayList;
import java.util.List;
import computician.janusclientapi.IJanusGatewayCallbacks;
import computician.janusclientapi.IJanusPluginCallbacks;
import computician.janusclientapi.IPluginHandleWebRTCCallbacks;
import computician.janusclientapi.JanusMediaConstraints;
import computician.janusclientapi.JanusPluginHandle;
import computician.janusclientapi.JanusServer;
import computician.janusclientapi.JanusSupportedPluginPackages;
import computician.janusclientapi.PluginHandleSendMessageCallbacks;
/**
* Created by ben.trent on 7/24/2015.
*/
//TODO create message classes unique to this plugin
public class EchoTest {
private final String JANUS_URI = "ws://192.168.1.197:8188";
private JanusPluginHandle handle = null;
private final VideoRenderer.Callbacks localRender, remoteRender;
private final JanusServer janusServer;
public class JanusGlobalCallbacks implements IJanusGatewayCallbacks {
@Override
public void onSuccess() {
janusServer.Attach(new JanusPluginCallbacks());
}
@Override
public void onDestroy() {
}
@Override
public String getServerUri() {
return JANUS_URI;
}
@Override
public List<PeerConnection.IceServer> getIceServers() {
return new ArrayList<PeerConnection.IceServer>();
}
@Override
public Boolean getIpv6Support() {
return Boolean.FALSE;
}
@Override
public Integer getMaxPollEvents() {
return 0;
}
@Override
public void onCallbackError(String error) {
}
}
public class JanusPluginCallbacks implements IJanusPluginCallbacks {
@Override
public void success(JanusPluginHandle pluginHandle) {
EchoTest.this.handle = pluginHandle;
JSONObject msg = new JSONObject();
JSONObject obj = new JSONObject();
try {
obj.put("audio", true);
obj.put("video", true);
msg.put("message", obj);
handle.sendMessage(new PluginHandleSendMessageCallbacks(msg));
} catch (Exception ex) {
}
handle.createOffer(new IPluginHandleWebRTCCallbacks() {
@Override
public JSONObject getJsep() {
return null;
}
@Override
public void onCallbackError(String error) {
}
@Override
public Boolean getTrickle() {
return true;
}
@Override
public JanusMediaConstraints getMedia() {
return new JanusMediaConstraints();
}
@Override
public void onSuccess(JSONObject obj) {
Log.d("JANUSCLIENT", "OnSuccess for CreateOffer called");
try {
JSONObject body = new JSONObject();
JSONObject msg = new JSONObject();
body.put("audio", true);
body.put("video", true);
msg.put("message", body);
msg.put("jsep", obj);
handle.sendMessage(new PluginHandleSendMessageCallbacks(msg));
} catch (Exception ex) {
}
}
});
}
@Override
public void onMessage(JSONObject msg, final JSONObject jsepLocal) {
if(jsepLocal != null)
{
handle.handleRemoteJsep(new IPluginHandleWebRTCCallbacks() {
final JSONObject myJsep = jsepLocal;
@Override
public void onSuccess(JSONObject obj) {
}
@Override
public JSONObject getJsep() {
return myJsep;
}
@Override
public JanusMediaConstraints getMedia() {
return null;
}
@Override
public Boolean getTrickle() {
return Boolean.FALSE;
}
@Override
public void onCallbackError(String error) {
}
});
}
}
@Override
public void onLocalStream(MediaStream stream) {
stream.videoTracks.get(0).addRenderer(new VideoRenderer(localRender));
VideoRendererGui.update(localRender, 0, 0, 25, 25, VideoRendererGui.ScalingType.SCALE_ASPECT_FILL, false);
}
@Override
public void onRemoteStream(MediaStream stream) {
stream.videoTracks.get(0).setEnabled(true);
if(stream.videoTracks.get(0).enabled())
Log.d("JANUSCLIENT", "video tracks enabled");
stream.videoTracks.get(0).addRenderer(new VideoRenderer(remoteRender));
VideoRendererGui.update(remoteRender, 0, 0, 25, 25, VideoRendererGui.ScalingType.SCALE_ASPECT_FILL, true);
VideoRendererGui.update(localRender, 72, 72, 25, 25, VideoRendererGui.ScalingType.SCALE_ASPECT_FILL, false);
}
@Override
public void onDataOpen(Object data) {
}
@Override
public void onData(Object data) {
}
@Override
public void onCleanup() {
}
@Override
public JanusSupportedPluginPackages getPlugin() {
return JanusSupportedPluginPackages.JANUS_ECHO_TEST;
}
@Override
public void onCallbackError(String error) {
}
@Override
public void onDetached() {
}
}
public EchoTest(VideoRenderer.Callbacks localRender, VideoRenderer.Callbacks remoteRender) {
this.localRender = localRender;
this.remoteRender = remoteRender;
janusServer = new JanusServer(new JanusGlobalCallbacks());
}
public boolean initializeMediaContext(Context context, boolean audio, boolean video, boolean videoHwAcceleration, EGLContext eglContext){
return janusServer.initializeMediaContext(context, audio, video, videoHwAcceleration, eglContext);
}
public void Start() {
janusServer.Connect();
}
}