package com.jcumulus.server.rtmfp.client; /** * jCumulus is a Java port of Cumulus OpenRTMP * * Copyright 2011 OpenRTMFP * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License received along this program for more * details (or else see http://www.gnu.org/licenses/). * * * This file is a part of jCumulus. */ import com.jcumulus.server.rtmfp.Client; import com.jcumulus.server.rtmfp.packet.*; import com.jcumulus.server.rtmfp.application.Publication; import com.jcumulus.server.rtmfp.application.Listener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sun.voip.server.*; import com.sun.voip.*; public class ClientHandler implements IClientHandler { private static Logger log = LoggerFactory.getLogger(ClientHandler.class); private short counter = 0; public boolean onConnection(Client client, com.jcumulus.server.rtmfp.flow.B b, com.jcumulus.server.rtmfp.flow.A a) { log.info("onConnect "); return true; } public void onFailed(Client client, String s) { log.info("onFailed " + s); } public void onDisconnection(Client client) { log.info("onDisconnection "); } public boolean onPublish(Client client, Publication b) { log.info("onPublish " + b.C()); return true; } public void onUnpublish(Client client, Publication b) { log.info("onUnPublish " + b.C()); } public boolean onSubscribe(Client client, Listener i) { log.info("onSubscribe " + i.getPublication().C()); String publishName = i.getPublication().C(); if (RtmfpCallAgent.publishHandlers.containsKey(publishName) == false) { RtmfpCallAgent.publishHandlers.put(publishName, com.jcumulus.server.rtmfp.publisher.E.I.getStreams().A(publishName)); } return true; } public void onUnsubscribe(Client client, Listener i) { log.info("onUnsubscribe " + i.getPublication().C()); String publishName = i.getPublication().C(); if (RtmfpCallAgent.publishHandlers.containsKey(publishName)) { Publication publication = RtmfpCallAgent.publishHandlers.remove(publishName); publication = null; } } public void onDataPacket(Client client, Publication b, String s, Packet a) { log.info("onDataPacket "); } public void onPacket(Client client, Publication b, int i, Packet a) { String streamName = b.C(); if (RtmfpCallAgent.playHandlers.containsKey(streamName)) { MemberReceiver memberReceiver = RtmfpCallAgent.playHandlers.get(streamName); if (memberReceiver != null) { if (counter < 20) log.info("onPacket " + streamName); byte[] stream = a.G(); int[] l16Buffer = new int[stream.length - 1]; AudioConversion.ulawToLinear(stream, 1, stream.length - 1, l16Buffer); l16Buffer = MemberSender.normalize(l16Buffer); memberReceiver.handleWebRtcMedia(l16Buffer, counter++); } } } public void onVideoPacket(Client client, Publication b, int i, Packet a) { log.info("onVideoPacket "); } public void sendDigit(Client client, com.jcumulus.server.rtmfp.flow.B b) { String stream = b.E(); String digit = b.E(); //Application.component.sendDigit(stream, digit); } }