/**
*
*/
package video.clientProxy;
import java.net.InetSocketAddress;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import video.lib.RtpPacket;
/**
* @author yuezhu
*
*/
public class ClientRtpPacketHandler extends IoHandlerAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(ClientRtpPacketHandler.class);
@Override
public void sessionCreated(IoSession session) throws Exception {
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
IoBuffer buffer = (IoBuffer) message;
if (buffer.remaining() < 12) {
LOGGER.debug("Discard a RTP packet due to header size < 12 bytes");
return;
}
RtpPacket packet = new RtpPacket(buffer);
LOGGER.debug("Received RTP packet: " + packet.getSequence());
ClientTrack clientTrack = ClientTrack.getByClientSocketAddress((InetSocketAddress) session.getRemoteAddress());
if (clientTrack == null) {
// drop packet
LOGGER.debug("Packet received from unknown client: " + session.getRemoteAddress());
return;
}
clientTrack.forwardRtpToServer(packet);
}
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
LOGGER.error(cause.toString());
cause.printStackTrace();
// CloseFuture future = session.close(false);
// future.awaitUninterruptibly();
// session.close(true);
// session.getService().dispose();
}
@Override
public void sessionClosed(IoSession session) {
LOGGER.debug("ClientRtpPacketHandler sessionClosed() is invoked.");
}
}