some include magic; add tools/ipcam_stream.py

This commit is contained in:
Evgeny Zinoviev 2024-02-27 00:01:50 +03:00
parent d638bb4f58
commit 7092c79b56
59 changed files with 96 additions and 64 deletions

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python3
import asyncio
import time
import __py_include
import include_homekit
from homekit.config import config
from homekit.media import MediaNodeServer, ESP32CameraRecordStorage, CameraRecorder

View File

@ -3,7 +3,7 @@ import logging
import os
import sys
import inspect
import __py_include
import include_homekit
from homekit.config import config # do not remove this import!
from datetime import datetime, timedelta

View File

@ -2,7 +2,7 @@
import asyncio
import logging
import os.path
import __py_include
import include_homekit
from argparse import ArgumentParser
from homekit.camera.esp32 import WebClient

View File

@ -3,7 +3,7 @@ import asyncio
import logging
import os.path
import tempfile
import __py_include
import include_homekit
import homekit.telegram.aio as telegram
from homekit.config import config

View File

@ -2,7 +2,7 @@
import logging
import os
import sys
import __py_include
import include_homekit
from argparse import ArgumentParser
from homekit.util import Addr

1
bin/include_homekit.py Symbolic link
View File

@ -0,0 +1 @@
../include_homekit.py

View File

@ -6,7 +6,7 @@ import json
import itertools
import sys
import asyncio
import __py_include
import include_homekit
from inverterd import Format, InverterError
from html import escape

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from argparse import ArgumentParser
from homekit.config import config

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3
import logging
import __py_include
import include_homekit
from homekit.inverter.emulator import InverterEmulator

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
import sys
import os
import subprocess

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
import hikvision, xmeye
from enum import Enum, auto

View File

@ -4,7 +4,7 @@ import os
import asyncio
import time
import shutil
import __py_include
import include_homekit
import homekit.telegram.aio as telegram

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3
import datetime
import __py_include
import include_homekit
from enum import Enum
from typing import Optional

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3
import os.path
import __py_include
import include_homekit
from time import sleep
from typing import Optional

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
import homekit.telegram as telegram
from homekit.telegram.config import TelegramChatsConfig

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3
import os
import __py_include
import include_homekit
from datetime import datetime
from typing import Tuple, List, Optional

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
if __name__ == '__main__':
print('TODO')

View File

@ -2,7 +2,7 @@
import os
import yaml
import re
import __py_include
import include_homekit
from argparse import ArgumentParser, ArgumentError
from homekit.pio import get_products, platformio_ini

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python3
from __future__ import annotations
import __py_include
import include_homekit
import logging
import locale
import queue

View File

@ -4,7 +4,7 @@
import logging
import sys
import paho.mqtt.client as mqtt
import __py_include
import include_homekit
from typing import Optional
from argparse import ArgumentParser

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
import sys
import asyncio

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3
import datetime
import __py_include
import include_homekit
from enum import Enum
from typing import Optional

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3
import sys
import __py_include
import include_homekit
from enum import Enum
from typing import Optional, Union

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3
import logging
import __py_include
import include_homekit
from aiohttp import web
from homekit import http

View File

@ -4,7 +4,7 @@ import socket
import logging
import re
import gc
import __py_include
import include_homekit
from io import BytesIO
from typing import Optional

View File

@ -2,7 +2,7 @@
import logging
import os
import tempfile
import __py_include
import include_homekit
from enum import Enum
from datetime import datetime, timedelta

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3
import os
import __py_include
import include_homekit
from typing import Optional

View File

@ -2,7 +2,7 @@
import logging
import os
import sys
import __py_include
import include_homekit
from homekit.config import config
from homekit.util import Addr

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python3
import logging
import threading
import __py_include
import include_homekit
from time import sleep
from typing import Optional, List, Dict, Tuple

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from homekit.config import config
if __name__ == '__main__':

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
import asyncio
import logging

View File

@ -1,7 +1,7 @@
#!/usr/bin/env python3
import paho.mqtt.client as mqtt
import re
import __py_include
import include_homekit
from homekit.config import config
from homekit.mqtt import MqttWrapper, MqttNode

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from homekit.mqtt.temphum import MqttTempHumNodes

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from argparse import ArgumentParser
from homekit.temphum import SensorType

View File

@ -2,7 +2,7 @@
import asyncio
import json
import logging
import __py_include
import include_homekit
from typing import Optional

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
import re
from html import escape

View File

@ -2,7 +2,7 @@
import asyncio
import json
import os
import __py_include
import include_homekit
from datetime import datetime, timedelta

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
import asyncio
import logging
import jinja2

View File

@ -25,16 +25,16 @@ class CameraType(Enum):
elif channel == 2:
if self.is_hikvision():
return '/Streaming/Channels/2'
elif self.value == CameraType.XMEYE:
elif self.is_xmeye():
return '/?stream=1.sdp'
else:
raise ValueError(f'unsupported camera type {self.value}')
def get_codec(self, channel: int) -> VideoCodecType:
if channel == 1:
return VideoCodecType.H264 if self.value == CameraType.HIKVISION_264 else VideoCodecType.H265
return VideoCodecType.H264 if self == CameraType.HIKVISION_264 else VideoCodecType.H265
elif channel == 2:
return VideoCodecType.H265 if self.value == CameraType.XMEYE else VideoCodecType.H264
return VideoCodecType.H265 if self == CameraType.XMEYE else VideoCodecType.H264
else:
raise ValueError(f'unexpected channel {channel}')

View File

@ -1,9 +0,0 @@
import sys
import os.path
for _name in ('include/py',):
sys.path.extend([
os.path.realpath(
os.path.join(os.path.dirname(os.path.join(__file__)), '..', _name)
)
])

1
test/include_homekit.py Symbolic link
View File

@ -0,0 +1 @@
../include_homekit.py

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from homekit.config import config

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from argparse import ArgumentParser
from homekit.config import config

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from argparse import ArgumentParser
from homekit.config import config

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from homekit.api import WebApiClient
from homekit.config import config

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from pprint import pprint
from argparse import ArgumentParser

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from enum import Enum, auto
from typing import Optional

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
import logging
import os
import shutil

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from homekit.modem import E3372, ModemsConfig

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
import syncleo

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
import logging
import time

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from argparse import ArgumentParser
from homekit.util import send_datagram, stringify, Addr

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
from homekit.api.errors import ApiResponseError
from homekit.media import SoundNodeClient

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
import threading
from time import sleep

View File

@ -1,4 +1,4 @@
import __py_include
import include_homekit
from homekit.util import Stopwatch, StopwatchError
from time import sleep

View File

@ -1,5 +1,5 @@
#!/usr/bin/env python3
import __py_include
import include_homekit
import asyncio
import homekit.telegram.aio as telegram

1
tools/include_homekit.py Symbolic link
View File

@ -0,0 +1 @@
../include_homekit.py

38
tools/ipcam_stream.py Executable file
View File

@ -0,0 +1,38 @@
#!/usr/bin/env python3
import include_homekit
import subprocess
import sys
from argparse import ArgumentParser, ArgumentError
from homekit.camera import IpcamConfig
if __name__ == '__main__':
players = ('mpv', 'vlc')
parser = ArgumentParser()
parser.add_argument('--tcp', action='store_true',
help='use tcp for rtsp')
parser.add_argument('--player', type=str, choices=players, default=players[0],
help='player to use')
parser.add_argument('--low', action='store_true',
help='use second channel')
parser.add_argument('camera', metavar='CAMERA', type=int, nargs=1,
help='number of camera to stream')
args = parser.parse_args()
ic = IpcamConfig()
camera = args.camera[0]
if not ic.has_camera(camera):
raise ArgumentError(None, f'invalid camera {camera}')
cmd = [args.player]
if args.tcp:
cmd.extend(['--rtsp-transport=tcp', '--force-seekable=yes'])
ip = ic.get_camera_ip(camera)
username, password = ic.get_rtsp_creds()
uri = f'rtsp://{username}:{password}@{ip}:554'
uri += ic.get_camera_type(camera).get_channel_url(1 if not args.low else 2)
cmd.append(uri)
p = subprocess.run(cmd, capture_output=False)
if p.returncode != 0:
print(f'error: {args.player} returned {p.returncode}', file=sys.stderr)