Coder Social home page Coder Social logo

webrtc-cdn-client's Introduction

WebRTC CDN Client

npm version

Javascript client for webrtc-cdn.

Installation

If you are using a npm managed project use:

npm install @asanrom/webrtc-cdn-client

If you are using it in the browser, download the minified file from the Releases section and import it to your html:

<script type="text/javascript" src="/path/to/webrtc-cdn-client.js"></script>

Usage

// Websocket connection URL
const wsURL = "ws://localhost/ws";

// RTC configuration
const rtcConfig = {
    "iceServers": [
        { "urls": "stun:stun.l.google.com:19302" }
    ],
    "sdpSemantics": "unified-plan"
};

// Create a client to connect to WebRTC CDN
const client = new WebRTC_CDN.WebRTCClient(wsURL, rtcConfig);

client.on('open', () => {
    // Emitted when client connects to the WebRTC CDN node
    publishCamera(); // or playCamera()
});

client.on('close', () => {
    // Emitted when client connection close
    // You could reconnect or finish the session
});

client.on('error', e => {
    // Error messages such as connection errors
    console.error(e);
});

client.on('send', m => {
    // For debug purposes, you can log outgoing messages with the 'send' event
    console.log(">>> " + JSON.stringify(m));
});

client.on('message', m => {
    // For debug purposes, you can log incoming messages with the 'message' event
    console.log("<<< " + JSON.stringify(m));
});


function publishCamera() {
    navigator.mediaDevices.getUserMedia({video: true, audio: true}).then((stream) => {
        const req = client.publish(
            stream, // Media Stream to publish
            "camera", // Stream ID, needed also for other clients to play the stream
            "" // Authentication token (if required)
        );

        req.on('ok', () => {
            // Request success (after this, the publishing will start via WebRTC)
        });

        req.on('peer-connection-state-change', state => {
            // You can track the peer connection state with this event
            console.log("PeerConnection State: " + state);
        });

        req.on('error', e => {
            // Could not publish
            alert("Error: " + e.code + " / " + e.message);
        });

        req.on('close', () => {
            // Request closed
        });
    });
}

function playCamera() {
    const req = client.play(
        "camera", // Stream ID to play
        "" // Authentication token (if required)
    );

    req.on('ok', () => {
        // Request success (after this, the play will start via WebRTC)
    });

    req.on('standby', () => {
        // The stream is in STANDBY mode
        // This means there is no peer publishing yet
        // By default, the request will be waiting until a stream starts
        document.getElementById("test_video").pause();
        document.getElementById("test_video").srcObject = null;
    });

    req.on('stream', (mediaStream) => {
        // Received playable media stream
        // You may add it to some video element to show for the user
        document.getElementById("test_video").srcObject = mediaStream;
        document.getElementById("test_video").play();
    });

    req.on('peer-connection-state-change', state => {
        // You can track the peer connection state with this event
        console.log("PeerConnection State: " + state);
    });

    req.on('error', e => {
        // Could not play
        alert("Error: " + e.code + " / " + e.message);
    });

    req.on('close', () => {
        // Request closed
    });
}

Documentation

webrtc-cdn-client's People

Contributors

agustinsrg avatar

Stargazers

 avatar Roy Bersaky avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.