mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-11-21 19:07:46 +01:00
d8123d2497
* Pull go2rtc dependency * Add go2rtc to local services and add to s6 * Add relay controller for go2rtc * Add restream role * Add restream role * Add restream to nginx * Add camera live source config * Disable RTMP by default and use restream * Use go2rtc for camera config * Fix go2rtc move * Start restream on frigate start * Send restream to camera level * Fix restream * Make sure jsmpeg works as expected * Make view rspect live size config * Tweak player options to fit live view * Adjust VideoPlayer to accept live option which disables irrelevant controls * Add multiple options from restream live view * Add base for webrtc option * Setup specific restream modules * Make mp4 the default streaming for now * Expose 8554 for rtsp relay from go2rtc * Formatting * Update docs to suggest new restream method. * Update docs to reflect restream role * Update docs to reflect restream role * Add webrtc player * Improvements to webRTC * Support webrtc * Cleanup * Adjust rtmp test and add restream test * Fix tests * Add restream tests * Add live view docs and show different options * Small docs tweak * Support all stream types * Update to beta 9 of go2rtc * Formatting * Make jsmpeg the default * Support wss if made from https * Support wss if made from https * Use onEffect * Set url outside onEffect * Fix passed deps * Update docs about required host mode * Try memo instead * Close websocket on changing camera * Formatting * Close pc connection * Set video source to null on cleanup * Use full path since go2rtc can't see PATH var * Adjust audio codec to enable browser audio by default * Cleanup stream creation * Add restream tests * Format tests * Mock requests * Adjust paths * Move stream configs to restream * Remove live source * Remove live config * Use live persistence for which view to use on each camera * Fix live sizes * Only use jsmpeg sizes for jsmpeg live * Set max live size * Remove access of live config * Add selector for live view source in web view * Remove RTMP from default list of roles * Update docs * Fix tests * Fix docs for live view modes * make default undefined to avoid race condition * Wait until camera source is loaded to avoid race condition * Fix tests * Add config to go2rtc * Work with config * Set full path for config * Set to use stun * Check for mounted file * Look for frigate-go2rtc * Update docs to reflect webRTC configuration. * Add link to go2rtc config * Update docs to be more clear * Update docs to be more clear * Update format Co-authored-by: Felipe Santos <felipecassiors@gmail.com> * Update live docs * Improve bash startup script * Add option to force audio compatibility * Formatting * Fix mapping * Fix broken link * Update go2rtc version * Get go2rtc webui working * Add support for mse * Remove mp4 option * Undo changes to video player * Update docs for new live view options * Make separate path for mse * Remove unused * Remove mp4 path * Try to get go2rtc proxy working * Try to get go2rtc proxy working * Remove unused callback * Allow websocket on restrea dashboard * Make mse default stream option * Fix mse sizing * don't assume roles is defined * Remove nginx mapping to go2rtc ui Co-authored-by: Felipe Santos <felipecassiors@gmail.com> Co-authored-by: Blake Blackshear <blakeb@blakeshome.com>
45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
"""Controls go2rtc restream."""
|
|
|
|
|
|
import logging
|
|
import requests
|
|
|
|
from frigate.config import FrigateConfig
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def get_manual_go2rtc_stream(camera_url: str) -> str:
|
|
"""Get a manual stream for go2rtc."""
|
|
return f"exec: /usr/lib/btbn-ffmpeg/bin/ffmpeg -i {camera_url} -c:v copy -c:a libopus -rtsp_transport tcp -f rtsp {{output}}"
|
|
|
|
|
|
class RestreamApi:
|
|
"""Control go2rtc relay API."""
|
|
|
|
def __init__(self, config: FrigateConfig) -> None:
|
|
self.config: FrigateConfig = config
|
|
|
|
def add_cameras(self) -> None:
|
|
"""Add cameras to go2rtc."""
|
|
self.relays: dict[str, str] = {}
|
|
|
|
for cam_name, camera in self.config.cameras.items():
|
|
if not camera.restream.enabled:
|
|
continue
|
|
|
|
for input in camera.ffmpeg.inputs:
|
|
if "restream" in input.roles:
|
|
if (
|
|
input.path.startswith("rtsp")
|
|
and not camera.restream.force_audio
|
|
):
|
|
self.relays[cam_name] = input.path
|
|
else:
|
|
# go2rtc only supports rtsp for direct relay, otherwise ffmpeg is used
|
|
self.relays[cam_name] = get_manual_go2rtc_stream(input.path)
|
|
|
|
for name, path in self.relays.items():
|
|
params = {"src": path, "name": name}
|
|
requests.put("http://127.0.0.1:1984/api/streams", params=params)
|