38 lines
1.4 KiB
Python
Executable File
38 lines
1.4 KiB
Python
Executable File
#!/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) |