Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"Connecting over 4G" is not working using "https://rtcbot.dev" #38

Open
marakhi opened this issue Jul 27, 2022 · 0 comments
Open

"Connecting over 4G" is not working using "https://rtcbot.dev" #38

marakhi opened this issue Jul 27, 2022 · 0 comments

Comments

@marakhi
Copy link

marakhi commented Jul 27, 2022

Hello @dkumor,

I was able to run all the program in tutorial till "Connecting over 4G" section on local network. For "Connecting over 4G" section I choose to use server you create which is "https://rtcbot.dev" but it is not working(Says no active connection). I have a feeling that I missing something here. I have laptop with Ubuntu OS and RTCBOT installed on it. I am running server side of the code on this laptop and it is connected to my home wifi. I have Raspberry PI with RTCBOT installed and connected to cellular 5G hotspot. I am running my Remote/Robot side of the code here on Raspberry Pi. I have also tested to see if my cellular network provider allow me to stream by running server and Remote/Robot code on local network using 5G data. Please see below my Server side and Remote/Robot side codes. "Connecting over 4G" section running fine on my local network be it my home wifi or 5G hotspot.

=============SERVER CODE ========================

from aiohttp import web
routes = web.RouteTableDef()

from rtcbot import Websocket, getRTCBotJS

# 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())

@routes.get("/")
async def index(request):
    return web.Response(
        content_type="text/html",
        text="""
    <html>
        <head>
            <title>RTCBot: Remote Video</title>
            <script src="/rtcbot.js"></script>
        </head>
        <body style="text-align: center;padding-top: 30px;">
            <video autoplay playsinline muted controls></video>
            <p>
            Open the browser's developer tools to see console messages (CTRL+SHIFT+C)
            </p>
            <script>
                var conn = new rtcbot.RTCConnection();

                conn.video.subscribe(function(stream) {
                    document.querySelector("video").srcObject = stream;
                });

                async function connect() {
                    let offer = await conn.getLocalDescription();

                    // POST the information to /connect
                    let response = await fetch("https://rtcbot.dev/Marakhi123", {
                        method: "POST",
                        cache: "no-cache",
                        body: JSON.stringify(offer)
                    });

                    await conn.setRemoteDescription(await response.json());

                    console.log("Ready!");
                }
                connect();

            </script>
        </body>
    </html>
    """)

async def cleanup(app=None):
    global ws
    if ws is not None:
        c = ws.close()
        if c is not None:
            await c

app = web.Application()
app.add_routes(routes)
app.on_shutdown.append(cleanup)
web.run_app(app)  

================Remote Code==================

import asyncio
from rtcbot import Websocket, RTCConnection, PiCamera

cam = PiCamera()
conn = RTCConnection()
conn.video.putSubscription(cam)

# Connect establishes a websocket connection to the server,
# and uses it to send and receive info to establish webRTC connection.
async def connect():
    ws = Websocket("https://rtcbot.dev/Marakhi123")
    remoteDescription = await ws.get()
    robotDescription = await conn.getLocalDescription(remoteDescription)
    ws.put_nowait(robotDescription)
    print("Started WebRTC")
    await ws.close()


asyncio.ensure_future(connect())
try:
    asyncio.get_event_loop().run_forever()
finally:
    cam.close()
    conn.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant