Skip to content

Commit

Permalink
Time based keyframes #338
Browse files Browse the repository at this point in the history
  • Loading branch information
mrlt8 committed Apr 18, 2022
1 parent bb2b6c5 commit f38ffb7
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 30 deletions.
61 changes: 34 additions & 27 deletions app/rtsp_event.py
Expand Up @@ -35,35 +35,42 @@ def pub_start(self) -> None:
img_file = os.getenv("IMG_PATH", "/img/") + self.uri + ".jpg"
env_snap = os.getenv("SNAPSHOT", "NA").ljust(5, "0").upper()
self.send_mqtt("image", None)
if env_bool("HASS"):
import json

host = env_bool("HOSTNAME", "localhost")
self.send_mqtt(
"attributes",
json.dumps(
{
"stream": f"rtsp://{host}:8554/{self.uri}",
"image": f"http://{host}:8123/local/{self.uri}.jpg",
}
),
)
if env_snap[:4] == "RTSP":
from subprocess import Popen
# if env_bool("HASS"):
# import json

# if (host := env_bool("HOSTNAME", "localhost")) == "homeassistant":
# host += ".local"
# self.send_mqtt(
# "attributes",
# json.dumps(
# {
# "stream": f"rtsp://{host}:8554/{self.uri}",
# "image": f"http://{host}:8123/local/{self.uri}.jpg",
# }
# ),
# )
if rtsp := (env_snap[:4] == "RTSP"):
from subprocess import Popen, TimeoutExpired

rtsp_addr = "127.0.0.1:8554"
if env_bool(f"RTSP_PATHS_{self.uri.upper()}_READUSER"):
rtsp_addr = (
env_bool(f"RTSP_PATHS_{self.uri.upper()}_READUSER")
+ ":"
+ env_bool(f"RTSP_PATHS_{self.uri.upper()}_READPASS")
+ f"@{rtsp_addr}"
)
ffmpeg_cmd = f"ffmpeg -loglevel fatal -skip_frame nokey -rtsp_transport tcp -i rtsp://{rtsp_addr}/{self.uri} -vframes 1 -y {img_file}"
while True:
self.send_mqtt("state", "online")
if env_snap[:4] == "RTSP":
rtsp_addr = "127.0.0.1:8554"
if env_bool(f"RTSP_PATHS_{self.uri.upper()}_READUSER"):
rtsp_addr = (
env_bool(f"RTSP_PATHS_{self.uri.upper()}_READUSER")
+ ":"
+ env_bool(f"RTSP_PATHS_{self.uri.upper()}_READPASS")
+ f"@{rtsp_addr}"
)
Popen(
f"ffmpeg -loglevel fatal -skip_frame nokey -rtsp_transport tcp -i rtsp://{rtsp_addr}/{self.uri} -vframes 1 -y {img_file}".split()
).wait(10)
if rtsp:
ffmpeg_sub = Popen(ffmpeg_cmd.split())
try:
ffmpeg_sub.wait(25)
except TimeoutExpired:
ffmpeg_sub.kill()
self.write_log("snapshot timed out")
continue
if os.path.exists(img_file) and os.path.getsize(img_file) > 1:
with open(img_file, "rb") as img:
self.send_mqtt("image", img.read())
Expand Down
6 changes: 3 additions & 3 deletions app/wyze_bridge.py
Expand Up @@ -20,7 +20,7 @@

class WyzeBridge:
def __init__(self) -> None:
print("🚀 STARTING DOCKER-WYZE-BRIDGE v1.3.4 DEV 1\n")
print("🚀 STARTING DOCKER-WYZE-BRIDGE v1.3.4 DEV 2\n")
signal.signal(signal.SIGTERM, lambda n, f: self.clean_up())
self.hass: bool = bool(os.getenv("HASS"))
self.on_demand: bool = bool(os.getenv("ON_DEMAND"))
Expand Down Expand Up @@ -542,9 +542,9 @@ def get_ffmpeg_cmd(uri: str, cam_model: str = None) -> list:
lib264 = (
["libx264", "-vf", "transpose=1"]
+ ["-tune", "zerolatency", "-preset", "ultrafast"]
+ ["-x264-params", "keyint=20:min-keyint=10:scenecut=-1"]
+ ["-force_key_frames", "expr:gte(t,n_forced*2)"]
)
flags = "-fflags +genpts+flush_packets+nobuffer -flags low_delay"
flags = "-fflags +genpts+flush_packets+nobuffer -flags +low_delay"
rotate = cam_model == "WYZEDB3" and env_bool("ROTATE_DOOR", False)
rtsp_ss = f"[select=v:f=rtsp]rtsp://0.0.0.0:8554/{uri.lower()}"
livestream = get_livestream_cmd(uri)
Expand Down

0 comments on commit f38ffb7

Please sign in to comment.