diff --git a/docker-compose.yml b/docker-compose.yml index e00bd61..35a4809 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,11 +6,11 @@ services: container_name: bridge-wyze restart: unless-stopped image: mrlt8/wyze-bridge:latest - # ports: - # - 1935:1935 # RTMP - # - 8554:8554 # RTSP - # - 8888:8888 # HLS - # - 5000:5000 # WEB-UI + ports: + - 1935:1935 # RTMP + - 8554:8554 # RTSP + - 8888:8888 # HLS + - 5000:5000 # WEB-UI environment: - WYZE_EMAIL=${WYZE_EMAIL} # Replace with wyze email - WYZE_PASSWORD=${WYZE_PASSWORD} # Replace with wyze password @@ -47,7 +47,7 @@ services: depends_on: - bridge # Use wait-for-it to wait for the bridge at port 8554 to be ready and then run /app/main.py - command: /bin/sh -c "wait-for-it.sh bridge:8554 --timeout=0 --strict -- python /app/main.py" + command: /bin/bash -c "wait-for-it.sh -h bridge -p 1935 --timeout=0 --strict -- echo "done" && python /app/main.py" # How can this be run and a .env file passed? diff --git a/main.py b/main.py index ee40485..708ceb8 100644 --- a/main.py +++ b/main.py @@ -6,6 +6,8 @@ from dotenv import load_dotenv import os import json import pathlib +import requests +import time load_dotenv() @@ -82,6 +84,27 @@ else: print(f"Current config: {config}") +# Try this 5 times, 5 seconds apart. If the stream is not available, exit +for i in range(5): + # Check if HLS stream is available using the requests library + # If it is not, print an error and exit + try: + # Replace rtsp with http and the port with 8888 + r = requests.get(URL.replace("rtsp", "http").replace(":8554", ":8888")) + if r.status_code != 200: + print("HLS stream not available, please check your URL") + exit() + except requests.exceptions.RequestException as e: + print("HLS stream not available, please check your URL") + if i == 4: + exit() + else: + print(f"Retrying in 5 seconds ({i+1}/5)") + time.sleep(5) + continue + + + for face in config["faces"]: # Load a sample picture and learn how to recognize it. image = face_recognition.load_image_file(config["faces"][face]["image"]) @@ -96,6 +119,9 @@ video_capture = cv2.VideoCapture(URL) # However, this means that the video may be choppy video_capture.set(cv2.CAP_PROP_BUFFERSIZE, 1) +# Print the resolution of the video +print(f"Video resolution: {video_capture.get(cv2.CAP_PROP_FRAME_WIDTH)}x{video_capture.get(cv2.CAP_PROP_FRAME_HEIGHT)}") + while True: # Grab a single frame of video ret, frame = video_capture.read() diff --git a/requirements.txt b/requirements.txt index c255f6e..dd892cc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,3 +7,5 @@ numpy==1.23.5 opencv-python==4.6.0.66 Pillow==9.3.0 python-dotenv==0.21.0 +urllib3==1.26.13 +requests==2.28.1