parse endpoint and ffmpeg args

This commit is contained in:
Brett Jia
2023-01-11 09:00:12 -05:00
parent 217007a7b2
commit 6f8ffde343
4 changed files with 39 additions and 17 deletions

View File

@@ -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"
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "@scrypted/arlo",
"version": "0.4.5",
"version": "0.4.6",
"description": "Arlo Plugin for Scrypted",
"keywords": [
"scrypted",

View File

@@ -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}")

View File

@@ -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)