Package

Source Code of PeerConnectionObserver

/**
* COPYRIGHT (C) 2013 Corvusoft. All Rights Reserved.
*/
import java.util.List;
import java.util.ArrayList;

import org.webrtc.AudioTrack;
import org.webrtc.VideoTrack;
import org.webrtc.VideoSource;
import org.webrtc.VideoCapturer;
import org.webrtc.VideoRenderer;

import org.webrtc.DataChannel;
import org.webrtc.MediaStream;
import org.webrtc.IceCandidate;
import org.webrtc.MediaConstraints;

import org.webrtc.PeerConnection;
import org.webrtc.PeerConnectionFactory;
import org.webrtc.PeerConnection.Observer;
import org.webrtc.PeerConnection.IceServer;
import org.webrtc.PeerConnection.SignalingState;
import org.webrtc.PeerConnection.IceGatheringState;
import org.webrtc.PeerConnection.IceConnectionState;

/**
* This class implements an abstract interface for an observer. It is up to this class to
* implement a derived class which implements the observer class. The observer is registered when the PeerConnection
* is created using the PeerConnectionFactoryInterface.
*/
public class PeerConnectionObserver implements Observer {
    private final PeerConnectionFactory factory = new PeerConnectionFactory();

    private MediaStream media_stream = null;

    private List<IceServer> ice_servers = null;

    private PeerConnection peer_connection = null;

    private VideoRenderer video_render = null;

    private DataChannel data_channel = null;

    public PeerConnectionObserver() {
        setup();
    }

    void setup() {
        setup_ice_servers();
        setup_media_streams();
        setup_peer_connection();
        setup_data_channel();
        setup_sdp_observer();
    }

    void setup_ice_servers() {
        ice_servers = new ArrayList();
        ice_servers.add(new IceServer("stun:stun.l.google.com:19302"));
    }

    void setup_media_streams() {
        media_stream = factory.createLocalMediaStream("Local Media Stream Label");

        setup_video_renderer();
        setup_video_stream();
        setup_audio_stream();
    }

    void setup_video_renderer() {
        //video_render = new VideoRenderer(new VideoRender());
        video_render = VideoRenderer.createGui(500, 500);
    }

    void setup_video_stream() {
        MediaConstraints media_constraints = new MediaConstraints();

        VideoCapturer video_capturer = VideoCapturer.create("");

        VideoSource video_source = factory.createVideoSource(video_capturer, media_constraints);

        VideoTrack video_track = factory.createVideoTrack("Local Video Track Label", video_source);

        video_track.addRenderer(video_render);

        media_stream.addTrack(video_track);
    }

    void setup_audio_stream() {
        AudioTrack audio_track = factory.createAudioTrack("Local Audio Track Label");

        media_stream.addTrack(audio_track);
    }

    void setup_peer_connection() {
        MediaConstraints media_constraints = new MediaConstraints();
        media_constraints.mandatory.add(new MediaConstraints.KeyValuePair("DtlsSrtpKeyAgreement", "true"));
        media_constraints.optional.add(new MediaConstraints.KeyValuePair("RtpDataChannels", "true"));

        peer_connection = factory.createPeerConnection(ice_servers, media_constraints, this);
        peer_connection.addStream(media_stream, new MediaConstraints());
    }

    void setup_data_channel() {
        data_channel = peer_connection.createDataChannel("Local Data Channel", new DataChannel.Init());

        data_channel.registerObserver(new DataChannelObserver());
    }

    void setup_sdp_observer() {
        MediaConstraints media_constraints = new MediaConstraints();

        SDPObserver sdp_observer = new SDPObserver();

        peer_connection.createOffer(sdp_observer, media_constraints);
    }

    @Override
    public synchronized void onSignalingChange(SignalingState signaling_state) {
        System.out.println("PeerConnectionObserver: onSignalingChange called with state: " + signaling_state.name());

        switch(signaling_state) {
            case HAVE_LOCAL_OFFER:
                break;
            case HAVE_LOCAL_PRANSWER:
                break;
            case HAVE_REMOTE_OFFER:
                break;
            case HAVE_REMOTE_PRANSWER:
                break;
            default:
                //unknown state error!
                break;
        }
    }

    @Override
    public synchronized void onAddStream(MediaStream media_stream) {
        System.out.println("PeerConnectionObserver: onAddStream called with media stream label: " + media_stream.label());
    }

    @Override
    public synchronized void onRemoveStream(MediaStream mediaStream) {
        System.out.println("PeerConnectionObserver: onRemoveStream called with media stream label: " + media_stream.label());
    }

    @Override
    public synchronized void onError() {
        System.out.println("PeerConnectionObserver: onError called.");
    }

    @Override
    public synchronized void onDataChannel(DataChannel data_channel) {
        System.out.println("PeerConnectionObserver: onDataChannel called with data channel label: " + data_channel.label());
    }

    @Override
    public synchronized void onIceCandidate(IceCandidate ice_candidate) {
        System.out.println("PeerConnectionObserver: onIceCandidate called.");
    }

    @Override
    public synchronized void onIceGatheringChange(IceGatheringState ice_gathering_state) {
        System.out.println("PeerConnectionObserver: onIceGatheringChange called with state: " + ice_gathering_state.name());
    }

    @Override
    public synchronized void onIceConnectionChange(IceConnectionState ice_connection_state) {
        System.out.println("PeerConnectionObserver: onIceConnectionChange called with state: " + ice_connection_state.name());
    }
}
TOP

Related Classes of PeerConnectionObserver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.