All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.lastbamboo.common.ice.IceMediaStreamFactoryImpl Maven / Gradle / Ivy

package org.lastbamboo.common.ice;

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;

import org.lastbamboo.common.ice.GeneralIceMediaStreamFactory;
import org.lastbamboo.common.ice.GeneralIceMediaStreamFactoryImpl;
import org.lastbamboo.common.ice.IceAgent;
import org.lastbamboo.common.ice.IceMediaStream;
import org.lastbamboo.common.ice.IceMediaStreamFactory;
import org.lastbamboo.common.ice.IceUdpConnectException;
import org.lastbamboo.common.offer.answer.IceMediaStreamDesc;
import org.lastbamboo.common.turn.client.TurnClientListener;
import org.lastbamboo.common.turn.http.server.ServerDataFeeder;
import org.littleshoot.util.CandidateProvider;
import org.littleshoot.util.NetworkUtils;
import org.littleshoot.util.ShootConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * ICE media stream factory class for creating streams where the ultimate
 * media exchanged can happen over RUDP or TCP.  This is packaged this way
 * because the ICE code does not know about RUDP.
 */
public class IceMediaStreamFactoryImpl implements IceMediaStreamFactory {

    private final Logger m_log = LoggerFactory.getLogger(getClass());
    private final CandidateProvider m_stunServerCandidateProvider;

    /**
     * Creates a new ICE media stream factory.
     * 
     * @param streamDesc The description of the media stream to create.
     * @param rudpService The service for RUDP connections.
     */
    public IceMediaStreamFactoryImpl(
            final CandidateProvider stunServerCandidateProvider) {
        this.m_stunServerCandidateProvider = stunServerCandidateProvider;
    }

    public IceMediaStream newStream(final IceAgent iceAgent,
            final IceMediaStreamDesc streamDesc)
            throws IceUdpConnectException {
        final InetAddress serverAddress;
        try {
            serverAddress = NetworkUtils.getLocalHost();
        } catch (final UnknownHostException e) {
            m_log.warn("Could not get local host!!", e);
            return null;
        }
        final InetSocketAddress httpServerAddress = new InetSocketAddress(
                serverAddress, ShootConstants.FILES_PORT);
        final TurnClientListener delegateListener = new ServerDataFeeder(
                httpServerAddress);

        final GeneralIceMediaStreamFactory streamFactory = 
            new GeneralIceMediaStreamFactoryImpl(
                this.m_stunServerCandidateProvider);
        final IceMediaStream stream = streamFactory.newIceMediaStream(
                streamDesc, iceAgent, delegateListener);
        return stream;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy