diff --git a/plugins/arlo/package-lock.json b/plugins/arlo/package-lock.json index 3f9168fa5..b0340f56b 100644 --- a/plugins/arlo/package-lock.json +++ b/plugins/arlo/package-lock.json @@ -1,34 +1,35 @@ { "name": "@scrypted/arlo", - "version": "0.4.5", + "version": "0.4.6", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@scrypted/arlo", - "version": "0.4.5", + "version": "0.4.6", "devDependencies": { "@scrypted/sdk": "file:../../sdk" } }, "../../sdk": { "name": "@scrypted/sdk", - "version": "0.2.28", + "version": "0.2.55", "dev": true, "license": "ISC", "dependencies": { - "@babel/preset-typescript": "^7.16.7", + "@babel/preset-typescript": "^7.18.6", "adm-zip": "^0.4.13", "axios": "^0.21.4", - "babel-loader": "^8.2.3", + "babel-loader": "^9.1.0", "babel-plugin-const-enum": "^1.1.0", "esbuild": "^0.15.9", "ncp": "^2.0.0", "raw-loader": "^4.0.2", "rimraf": "^3.0.2", "tmp": "^0.2.1", - "typescript": "^4.9.3", - "webpack": "^5.74.0", + "ts-loader": "^9.4.2", + "typescript": "^4.9.4", + "webpack": "^5.75.0", "webpack-bundle-analyzer": "^4.5.0" }, "bin": { @@ -41,7 +42,7 @@ "scrypted-webpack": "bin/scrypted-webpack.js" }, "devDependencies": { - "@types/node": "^18.11.9", + "@types/node": "^18.11.18", "@types/stringify-object": "^4.0.0", "stringify-object": "^3.3.0", "ts-node": "^10.4.0", @@ -57,12 +58,12 @@ "@scrypted/sdk": { "version": "file:../../sdk", "requires": { - "@babel/preset-typescript": "^7.16.7", - "@types/node": "^18.11.9", + "@babel/preset-typescript": "^7.18.6", + "@types/node": "^18.11.18", "@types/stringify-object": "^4.0.0", "adm-zip": "^0.4.13", "axios": "^0.21.4", - "babel-loader": "^8.2.3", + "babel-loader": "^9.1.0", "babel-plugin-const-enum": "^1.1.0", "esbuild": "^0.15.9", "ncp": "^2.0.0", @@ -70,10 +71,11 @@ "rimraf": "^3.0.2", "stringify-object": "^3.3.0", "tmp": "^0.2.1", + "ts-loader": "^9.4.2", "ts-node": "^10.4.0", "typedoc": "^0.23.21", - "typescript": "^4.9.3", - "webpack": "^5.74.0", + "typescript": "^4.9.4", + "webpack": "^5.75.0", "webpack-bundle-analyzer": "^4.5.0" } } diff --git a/plugins/arlo/package.json b/plugins/arlo/package.json index 788867fff..83878d707 100644 --- a/plugins/arlo/package.json +++ b/plugins/arlo/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/arlo", - "version": "0.4.5", + "version": "0.4.6", "description": "Arlo Plugin for Scrypted", "keywords": [ "scrypted", diff --git a/plugins/arlo/src/arlo_plugin/camera.py b/plugins/arlo/src/arlo_plugin/camera.py index 6988f029c..18de02d50 100644 --- a/plugins/arlo/src/arlo_plugin/camera.py +++ b/plugins/arlo/src/arlo_plugin/camera.py @@ -154,6 +154,26 @@ class ArloCamera(ScryptedDeviceBase, Camera, VideoCamera, Intercom, MotionSensor ffmpeg_params = json.loads(await scrypted_sdk.mediaManager.convertMediaObjectToBuffer(media, ScryptedMimeTypes.FFmpegInput.value)) self.logger.debug(f"Received ffmpeg params: {ffmpeg_params}") + endpoint = ffmpeg_params.get("url") + options = {} + current_key = None + for arg in ffmpeg_params["inputArguments"]: + if current_key is None and not arg.startswith("-"): + self.logger.warning(f"Ignoring unknown ffmpeg argument {arg}") + continue + if arg.startswith("-"): + current_key = arg.lstrip("-") + options[current_key] = "" + continue + options[current_key] = (options[current_key] + " " + arg).strip() + if current_key == "i": + endpoint = options[current_key] + + self.logger.debug(f"Parsed ffmpeg params: {options}") + + if endpoint is None: + raise Exception("Malformed ffmpeg arguments, input endpoint not provided") + session_id, ice_servers = self.provider.arlo.StartPushToTalk(self.arlo_basestation, self.arlo_device) self.logger.debug(f"Received ice servers: {[ice['url'] for ice in ice_servers]}") @@ -181,7 +201,7 @@ class ArloCamera(ScryptedDeviceBase, Camera, VideoCamera, Intercom, MotionSensor pc = self.pc = BackgroundRTCPeerConnection() self.sdp_answered = False - pc.add_rtsp_audio(ffmpeg_params["url"]) + pc.add_rtsp_audio(endpoint, options) offer = await pc.createOffer() self.logger.info(f"Arlo offer sdp:\n{offer.sdp}") diff --git a/plugins/arlo/src/arlo_plugin/rtcpeerconnection.py b/plugins/arlo/src/arlo_plugin/rtcpeerconnection.py index 61d93998f..2c2a59ba3 100644 --- a/plugins/arlo/src/arlo_plugin/rtcpeerconnection.py +++ b/plugins/arlo/src/arlo_plugin/rtcpeerconnection.py @@ -108,7 +108,7 @@ class BackgroundRTCPeerConnection: async def close(self): await self.__run_background(self.pc.close(), await_result=False, stop_loop=True) - def add_rtsp_audio(self, rtsp_url): + def add_rtsp_audio(self, endpoint, options): """Adds an audio track to the RTCPeerConnection given a source RTSP url. This constructs a MediaPlayer in the background thread's asyncio loop, @@ -118,7 +118,7 @@ class BackgroundRTCPeerConnection: server is not yet ready. """ def add_rtsp_audio_background(): - media_player = MediaPlayer(rtsp_url, format="rtsp") + media_player = MediaPlayer(endpoint, options=options) self.pc.addTrack(media_player.audio) self.background_loop.call_soon_threadsafe(add_rtsp_audio_background) \ No newline at end of file