Example #1
0
    async def test_multipleDataChannels(self):
        c1 = RTCConnection()
        c2 = RTCConnection()

        dcs1 = c1.onDataChannel()
        dcs2 = c2.onDataChannel()

        # CONTINUE...
        await c1.close()
        await c2.close()
Example #2
0
def set_up_components():
    global cam, conn
    cam = cameras.MicroCamera(
        type="remote_usb")  # !!! CHANGE FOR CUSTOM CAMERA OBJ
    conn = RTCConnection()
    conn.video.putSubscription(cam)
    conn.subscribe(onMessage)
Example #3
0
    def __init__(self, cam, stop_event):
        self.thread = None
        self.conn = RTCConnection()
        self.cam = cam
        self.stop_event = stop_event
        self.conn.video.putSubscription(cam)

        asyncio.ensure_future(self.connect())
        self.loop = asyncio.get_event_loop()
Example #4
0
    async def test_basic(self):
        """
        Creates a connection, and ensures that multiple messages go through
        in both directions.
        """
        testmsg1 = "Testy mc test-test"
        testmsg2 = "Hai wrld"

        c1 = RTCConnection()
        c2 = RTCConnection()

        q1 = c1.subscribe()
        q2 = c2.subscribe()

        offer = await c1.getLocalDescription()
        response = await c2.getLocalDescription(offer)
        await c1.setRemoteDescription(response)

        c1.put_nowait(testmsg1)
        c2.put_nowait(testmsg2)

        c1.send("OMG")  # Just to check
        c2.put_nowait("OMG2")

        msg1 = await asyncio.wait_for(q1.get(), 5)
        msg2 = await asyncio.wait_for(q2.get(), 5)

        self.assertEqual(msg1, testmsg2)
        self.assertEqual(msg2, testmsg1)

        msg1 = await asyncio.wait_for(q1.get(), 5)
        msg2 = await asyncio.wait_for(q2.get(), 5)

        self.assertEqual(msg1, "OMG2")
        self.assertEqual(msg2, "OMG")

        await c1.close()
        await c2.close()
Example #5
0
async def registerOnServerAndAwaitRtcConnections():
    print("sending /registerRobot")
    ws = Websocket(REMOTE_WEB_SERVER + '/registerRobot')
    while True:
        remoteDescription = await ws.get()
        print("{:%Y-%m-%d %H:%M:%S}: new web user requested connect".format(datetime.datetime.now()))

        connection = RTCConnection()
        connection.video.putSubscription(videoFrameSubscription)
        connection.subscribe(onMessage)
        connection.putSubscription(cv2ColorSubscription)
        connection.put_nowait({
            "action": "hsv",
            "hsv": hsv
        })
        @connection.onClose
        def close():
            print("{:%Y-%m-%d %H:%M:%S}: Connection Closed".format(datetime.datetime.now()))
            connections.remove(connection)

        connections.append(connection)
        robotDescription = await connection.getLocalDescription(remoteDescription)
        ws.put_nowait(robotDescription)
# desktop.py

import asyncio
import aiohttp
import cv2
import json
from rtcbot import RTCConnection, Gamepad, CVDisplay

disp = CVDisplay()
#g = Gamepad()
conn = RTCConnection()


@conn.video.subscribe
def onFrame(frame):
    # Show a 4x larger image so that it is easy to see
    resized = cv2.resize(frame, (frame.shape[1] * 4, frame.shape[0] * 4))
    disp.put_nowait(resized)


async def connect():
    localDescription = await conn.getLocalDescription()
    async with aiohttp.ClientSession() as session:
        async with session.post("http://192.168.0.3:8080/connect",
                                data=json.dumps(localDescription)) as resp:
            response = await resp.json()
            await conn.setRemoteDescription(response)
    # Start sending gamepad controls
    #g.subscribe(conn)

Example #7
0
# %% imports
from MQTTDevice import MQTTDevice
import paho.mqtt.client as mqtt
from random import randint
from time import time, sleep

import sys
import asyncio
from rtcbot import Websocket, RTCConnection, PiCamera
from aiortc import RTCConfiguration, RTCIceServer

cam = PiCamera()

conn = RTCConnection(rtcConfiguration=RTCConfiguration([
    RTCIceServer(urls="stun:stun.l.google.com:19302"),
    RTCIceServer(urls="turn:io.scilifelab.se:5349",
                 username="******",
                 credential="3a53d013d9996594d591")
]))

# set parameters
setup_name = "S015"
device_ID = "RAS01"
device_MQTT_name = "RASPI_" + str(randint(0, 100000))
mqtt_broker_ip = "localhost"
mqtt_client_name = "raspi1"  # not necessary
mqtt_client_pass = "******"  # not necessary
mqtt_port = 1883
mqtt_keepalive = 60
mqtt_uselogin = False

# conn = RTCConnection()
Example #8
0
from collections import OrderedDict

codec_parameters = OrderedDict([
    ("packetization-mode", "1"),
    ("level-asymmetry-allowed", "1"),
    ("profile-level-id", "42001f"),
])
pi_capability = RTCRtpCodecCapability(mimeType="video/H264",
                                      clockRate=90000,
                                      channels=None,
                                      parameters=codec_parameters)
preferences = [pi_capability]

camera = PiCamera(fps=15, width=640, height=480)
# For this example, we use just one global connection
conn = RTCConnection(video_codec_preference=preferences)
conn.video.putSubscription(camera)


# Serve the RTCBot javascript library at /rtcbot.js
@routes.get("/rtcbot.js")
async def rtcbotjs(request):
    return web.Response(content_type="application/javascript",
                        text=getRTCBotJS())


# This sets up the connection
@routes.post("/connect")
async def connect(request):
    clientOffer = await request.json()
    serverResponse = await conn.getLocalDescription(clientOffer)
Example #9
0
from aiohttp import web

routes = web.RouteTableDef()

from rtcbot import RTCConnection, getRTCBotJS

conn = RTCConnection()  # For this example, we use just one global connection


@conn.subscribe
def onMessage(msg):  # Called when messages received from browser
    print("Got message:", msg["data"])
    conn.put_nowait({"data": "pong"})


# Serve the RTCBot javascript library at /rtcbot.js
@routes.get("/rtcbot.js")
async def rtcbotjs(request):
    return web.Response(content_type="application/javascript",
                        text=getRTCBotJS())


# This sets up the connection
@routes.post("/connect")
async def connect(request):
    clientOffer = await request.json()
    serverResponse = await conn.getLocalDescription(clientOffer)
    return web.json_response(serverResponse)


@routes.get("/")
Example #10
0
    SubscriptionClosed,
)
import logging
from contextlib import suppress
import signal

logging.basicConfig(level=logging.DEBUG)

m = Microphone()
s = Speaker()
d = CVDisplay()
cam = CVCamera()

# cam.subscribe(d)

c1 = RTCConnection()
c2 = RTCConnection()

c1.video.putSubscription(cam)
c1.audio.putSubscription(m)

c2.video.subscribe(d)
c2.audio.subscribe(s)


async def testMe():
    offer = await c1.getLocalDescription()
    response = await c2.getLocalDescription(offer)
    await c1.setRemoteDescription(response)