mirror of
https://github.com/koush/scrypted.git
synced 2026-02-17 04:02:14 +00:00
parse endpoint and ffmpeg args
This commit is contained in:
28
plugins/arlo/package-lock.json
generated
28
plugins/arlo/package-lock.json
generated
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scrypted/arlo",
|
||||
"version": "0.4.5",
|
||||
"version": "0.4.6",
|
||||
"description": "Arlo Plugin for Scrypted",
|
||||
"keywords": [
|
||||
"scrypted",
|
||||
|
||||
@@ -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}")
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user