Teleport - is the platform for decentralized delivery of video streaming content.

Teleport gives you the opportunity to significantly reduce CDN costs while building a more reliable and scalable infrastructure of a self-deploying network of the same manifest connected peers.

How it works

Teleport includes a server and an SDK. The solution allows browsers to connect to the p2p-network using WebRTC and switch the receiving source of each streaming chunk for each node between the media server and P2P. Teleport supports adaptive HTTP-based transport protocols only, such as HLS and DASH.

To use the Teleport SDK, you can use one of the proposed plugins. They take all the work on initializing the script and integrating it with a media player.

When initialized, the Teleport SDK establishes a connection to the tracker server. It is used for coordinating peer connections. Communication with the tracker server occurs via the WebSocket protocol using an encrypted connection. After connecting to the tracker server, the peer receives a message with unique peer IDs to establish a connection with them. After the connections are established, the peers exchange messages and make their own decisions on the exchange of segments.

To perform resource-intensive operations, the Teleport.js client script uses Web Workers. Storage of received data in memory on user devices is organized in such a way that each piece of video, regardless of the source of receipt (P2P or server) is stored on the device, specified by the "TTL time" parameter (default TTL = 180 sec). After this time, the piece is removed from the device. Data transfer in the P2P network via the WebRTC channel occurs with the breakdown of the transmitted data into pieces of 16KB, their reassembly on the receiving side and integrity check (hash-sum from the content).

Teleport is compatible with any CAS / DRM system but requires additional integration with them.

Plugins list

The list of plugins will be updated.

Integrating Teleport

Domain confirmation

Sequencing:

  1. Go through the signup process on cabinet.teleport.media.
  2. Proceed your domain confirmation in the "Integration" section.
  3. After the domain is confirmed, in the "Domains" tab you'll get the Teleport API key for running the script.
  4. Now you can connect Teleport in accordance with the documentation, and use the key given to you by the API.

In-code changes

To integrate with Teleport, you need to install a JavaScript library

<script src="https://cdn.teleport.media/stable/teleport.js"></script>

and initialize it.

Example of Teleport script initialization:

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>TELEPORT SHAKA EXAMPLE</title>
    <script src="//cdnjs.cloudflare.com/ajax/libs/shaka-player/2.2.5/shaka-player.compiled.debug.js"></script>
</head>
<body>
<video id="video" width="640" muted poster="//shaka-player-demo.appspot.com/assets/poster.jpg" controls autoplay></video>

<!-- Include main SDK -->
<script src="https://cdn.teleport.media/stable/teleport.js"></script>
<!-- Include Shaka Player plugin -->
<script src="https://cdn.teleport.media/stable/teleport.shaka.js"></script>
<!-- Setup -->
<script>
    var tlprt;
    var STREAM_URL = "<manifest URL";
    var API_KEY = "<YOUR APIKEY>"
    function initApp() {
        shaka.polyfill.installAll();
        var video = document.getElementById("video");
        var player = new shaka.Player(video);
        player.addEventListener("error", onErrorEvent);

        // Init Teleport
        teleport.initialize({
                    apiKey: API_KEY,
                    loader: {               // Loader configuration
                        type: "shaka",      // Plugin ID
                        params: {
                            player: player  // Player instance
                        }
                    }
                })
                .then(function (instance) {
                    // load a manifest and save teleport instance
                    tlprt = instance;

                    return player.load(manifestUri);
                })
                .then(function () {
                    console.log('The video has now been loaded!');
                    // Subscribe to on close window event for free used resources
                    window.addEventListener("unload", function () {
                        if (tlprt) {
                            tlprt.dispose();
                            tlprt = null;
                        }
                    });
                })
                .catch(onError);
    }

    function onErrorEvent(event) {
        // Extract the shaka.util.Error object from the event.
        onError(event.detail);
    }

    function onError(error) {
        // Log the error
        console.error("Error code", error.code, "object", error);
    }

    document.addEventListener("DOMContentLoaded", initApp);
</script>
</body>
</html>