From c484270c246753aa8a3c2000d762a72fcb7b1589 Mon Sep 17 00:00:00 2001 From: Hendrik Langer Date: Sat, 25 Jul 2020 21:05:19 +0200 Subject: [PATCH] working webrtc --- raspberry/roberto/views/websocket/routes.py | 79 +--- .../views/websocket/templates/camera.html | 431 ++++-------------- 2 files changed, 105 insertions(+), 405 deletions(-) diff --git a/raspberry/roberto/views/websocket/routes.py b/raspberry/roberto/views/websocket/routes.py index 971fcb7..3328a87 100644 --- a/raspberry/roberto/views/websocket/routes.py +++ b/raspberry/roberto/views/websocket/routes.py @@ -1,7 +1,7 @@ from . import websocket_blueprint -from flask import current_app, render_template -from flask_socketio import SocketIO, emit +from flask import current_app, render_template, request +from flask_socketio import SocketIO, emit, join_room, leave_room from roberto import socketio @@ -53,69 +53,30 @@ def applyDeadZone(value, threshold): return new_value -connected_particpants = {} +# https://pfertyk.me/2020/03/webrtc-a-working-example/ + +ROOM = 'default' @websocket_blueprint.route('/camera') def camera(): return render_template('camera.html', room='default') -@socketio.on('message', namespace='/webrtc') -def webrtc_message(sid, data): - sio.emit('message', data=data) +@socketio.on('data', namespace='/webrtc') +def webrtc_message(data): + sid = request.sid + print('Message from {}: {}'.format(sid, data)) + socketio.emit('data', data=data, room=ROOM, namespace='/webrtc', skip_sid=sid) @socketio.on('disconnect', namespace='/webrtc') -def disconnect(sid): +def disconnect(): + sid = request.sid print("Received Disconnect message from %s" % sid) - for room, clients in connected_particpants.iteritems(): - try: - clients.remove(sid) - print("Removed %s from %s \n list of left participants is %s" %(sid, room, clients)) - except ValueError: - print("Remove %s from %s \n list of left participants is %s has failed" %(sid, room, clients)) - -@socketio.on('create or join', namespace='/webrtc') -def create_or_join(sid, data): - sio.enter_room(sid, data) - try: - connected_particpants[data].append(sid) - except KeyError: - connected_particpants[data] = [sid] - numClients = len(connected_particpants[data]) - if numClients == 1: - sio.emit('created', data) - elif numClients > 2: - sio.emit('full') - elif numClients == 2: - sio.emit('joined') - sio.emit('join') - print (sid, data, len(connected_particpants[data])) - -@websocket_blueprint.route('/') -def room(room): - return render_template('camera.html', room=room) - - - - - - - - - - - - - - - - - - - - - - - - - + leave_room(ROOM) + +@socketio.on('connect', namespace='/webrtc') +def connect(): + sid = request.sid + print("Received Connect message from %s" % sid) + socketio.emit('ready', room=ROOM, namespace='/webrtc', skip_sid=sid) + join_room(ROOM) diff --git a/raspberry/roberto/views/websocket/templates/camera.html b/raspberry/roberto/views/websocket/templates/camera.html index 9922e6d..a72304e 100644 --- a/raspberry/roberto/views/websocket/templates/camera.html +++ b/raspberry/roberto/views/websocket/templates/camera.html @@ -1,9 +1,9 @@ - + - + - Video Streaming Demonstration + WebRTC working example @@ -22,379 +22,118 @@