mirror of
https://github.com/blakeblackshear/frigate.git
synced 2024-12-23 19:11:14 +01:00
ea7d1aabba
* Add video codec to restream config * Add handling of encode engine and video codec * Add test for video encoding * Set in main configuration docs as well * Add example to restream docs * Put back patch
83 lines
2.8 KiB
Python
83 lines
2.8 KiB
Python
"""Test restream.py."""
|
|
|
|
from unittest import TestCase, main
|
|
from unittest.mock import patch
|
|
|
|
from frigate.config import FrigateConfig
|
|
from frigate.restream import RestreamApi
|
|
|
|
|
|
class TestRestream(TestCase):
|
|
def setUp(self) -> None:
|
|
"""Setup the tests."""
|
|
self.config = {
|
|
"mqtt": {"host": "mqtt"},
|
|
"restream": {"enabled": False},
|
|
"cameras": {
|
|
"back": {
|
|
"ffmpeg": {
|
|
"inputs": [
|
|
{
|
|
"path": "rtsp://10.0.0.1:554/video",
|
|
"roles": ["detect", "restream"],
|
|
},
|
|
]
|
|
},
|
|
"restream": {
|
|
"enabled": True,
|
|
"force_audio": False,
|
|
},
|
|
},
|
|
"front": {
|
|
"ffmpeg": {
|
|
"inputs": [
|
|
{
|
|
"path": "http://10.0.0.1:554/video/stream",
|
|
"roles": ["detect", "restream"],
|
|
},
|
|
]
|
|
},
|
|
"restream": {
|
|
"enabled": True,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
@patch("frigate.restream.requests")
|
|
def test_rtsp_stream(
|
|
self, mock_request
|
|
) -> None: # need to ensure restream doesn't try to call API
|
|
"""Test that the normal rtsp stream is sent plainly."""
|
|
frigate_config = FrigateConfig(**self.config)
|
|
restream = RestreamApi(frigate_config)
|
|
restream.add_cameras()
|
|
assert restream.relays["back"].startswith("rtsp")
|
|
|
|
@patch("frigate.restream.requests")
|
|
def test_http_stream(
|
|
self, mock_request
|
|
) -> None: # need to ensure restream doesn't try to call API
|
|
"""Test that the http stream is sent via ffmpeg."""
|
|
frigate_config = FrigateConfig(**self.config)
|
|
restream = RestreamApi(frigate_config)
|
|
restream.add_cameras()
|
|
assert not restream.relays["front"].startswith("rtsp")
|
|
|
|
@patch("frigate.restream.requests")
|
|
def test_restream_codec_change(
|
|
self, mock_request
|
|
) -> None: # need to ensure restream doesn't try to call API
|
|
"""Test that the http stream is sent via ffmpeg."""
|
|
self.config["cameras"]["front"]["restream"]["video_encoding"] = "h265"
|
|
self.config["ffmpeg"] = {"hwaccel_args": "preset-nvidia-h264"}
|
|
frigate_config = FrigateConfig(**self.config)
|
|
restream = RestreamApi(frigate_config)
|
|
restream.add_cameras()
|
|
assert "#hardware=cuda" in restream.relays["front"]
|
|
assert "#video=h265" in restream.relays["front"]
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main(verbosity=2)
|