diff --git a/raspberry/roberto/__init__.py b/raspberry/roberto/__init__.py index e9a4ca2..e978d38 100644 --- a/raspberry/roberto/__init__.py +++ b/raspberry/roberto/__init__.py @@ -16,8 +16,8 @@ from flask_socketio import SocketIO login = LoginManager() login.login_view = "users.login" socketio = SocketIO() -from roberto.camera.camera_opencv import Camera -camera = Camera() +#from roberto.camera.camera_opencv import Camera +#camera = Camera() from roberto.camera.camera_gstreamer_webrtc import WebRTCCamera webrtccamera = WebRTCCamera() from roberto.Serial import Serial diff --git a/raspberry/roberto/camera/camera_gstreamer_webrtc.py b/raspberry/roberto/camera/camera_gstreamer_webrtc.py index 4e9ce0c..874301e 100644 --- a/raspberry/roberto/camera/camera_gstreamer_webrtc.py +++ b/raspberry/roberto/camera/camera_gstreamer_webrtc.py @@ -18,6 +18,13 @@ from gi.repository import GstSdp import json +platform = None +try: + import RPi.GPIO as gpio + platform = 'raspberry' +except (ImportError, RuntimeError): + platform = 'generic' + #PIPELINE_DESC = ''' #webrtcbin name=sendrecv bundle-policy=max-bundle stun-server=stun://stun.l.google.com:19302 # videotestsrc is-live=true pattern=ball ! videoconvert ! queue ! vp8enc deadline=1 ! rtpvp8pay ! @@ -49,6 +56,15 @@ webrtcbin name=sendrecv bundle-policy=max-bundle stun-server=stun://stun.l.googl # rpicamsrc name=src preview=0 fullscreen=0 ! h264parse ! omxh264dec ! glimagesink sync=0 +if platform == 'raspberry': + PIPELINE_DESC = ''' + webrtcbin name=sendrecv bundle-policy=max-bundle stun-server=stun://stun.l.google.com:19302 + v4l2src device=/dev/video0 ! videoconvert ! queue ! vp8enc deadline=1 ! rtpvp8pay ! + queue ! application/x-rtp,media=video,encoding-name=VP8,payload=97 ! sendrecv. + audiotestsrc is-live=true wave=red-noise ! audioconvert ! audioresample ! queue ! opusenc !rtpopuspay ! + queue ! application/x-rtp,media=audio,encoding-name=OPUS,payload=96 ! sendrecv. + ''' + class WebRTCCamera(Thread): def __init__(self): self.sid = None diff --git a/raspberry/roberto/views/frontend/routes.py b/raspberry/roberto/views/frontend/routes.py index b9e6427..4d4c76c 100644 --- a/raspberry/roberto/views/frontend/routes.py +++ b/raspberry/roberto/views/frontend/routes.py @@ -11,23 +11,23 @@ from flask import Response def index(): return render_template('index.html') -def gen(camera): - """Video streaming generator function.""" - while True: - frame = camera.get_frame() - yield (b'--frame\r\n' - b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') - - -@frontend_blueprint.route('/video_feed') -def video_feed(): - """Video streaming route. Put this in the src attribute of an img tag.""" - from roberto import camera - camera.__init__() - response = Response(gen(camera), - mimetype='multipart/x-mixed-replace; boundary=frame') - response.headers.add('X-Accel-Buffering', 'no') - return response +#def gen(camera): +# """Video streaming generator function.""" +# while True: +# frame = camera.get_frame() +# yield (b'--frame\r\n' +# b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') +# +# +#@frontend_blueprint.route('/video_feed') +#def video_feed(): +# """Video streaming route. Put this in the src attribute of an img tag.""" +# from roberto import camera +# camera.__init__() +# response = Response(gen(camera), +# mimetype='multipart/x-mixed-replace; boundary=frame') +# response.headers.add('X-Accel-Buffering', 'no') +# return response @frontend_blueprint.route('/gamepad.js') diff --git a/raspberry/roberto/views/frontend/templates/gamepad.js b/raspberry/roberto/views/frontend/templates/gamepad.js index 6b8271e..d261a32 100644 --- a/raspberry/roberto/views/frontend/templates/gamepad.js +++ b/raspberry/roberto/views/frontend/templates/gamepad.js @@ -8,10 +8,10 @@ */ namespace = '/gamepad'; -var socket = io(namespace); +var gp_socket = io(namespace, { transports: [ 'websocket' ] }); -socket.on('connect', function() { - socket.emit('my_event', {data: 'I\'m connected!'}); +gp_socket.on('connect', function() { + gp_socket.emit('my_event', {data: 'I\'m connected!'}); }); var haveEvents = 'GamepadEvent' in window; @@ -110,7 +110,7 @@ function updateStatus() { } } if (axesChanged) { - socket.emit('axes', {0: controller.axes[0], 1: controller.axes[1], 3: controller.axes[3], 4: controller.axes[4]}); + gp_socket.emit('axes', {0: controller.axes[0], 1: controller.axes[1], 3: controller.axes[3], 4: controller.axes[4]}); } } rAF(updateStatus); diff --git a/raspberry/roberto/views/frontend/templates/index.html b/raspberry/roberto/views/frontend/templates/index.html index 026698b..8cef378 100644 --- a/raspberry/roberto/views/frontend/templates/index.html +++ b/raspberry/roberto/views/frontend/templates/index.html @@ -9,7 +9,11 @@

Video Streaming Demonstration

- + {# #} + +
+ +

Send:

@@ -30,18 +34,121 @@ + + + +