prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  [Config Support]: #backchannel=0 argument isn't being passed to go2rtc
  ### Describe the problem you are having
  
  Looks like the #backchannel=0 argument isn't being passed to go2rtc from the Frigate config file. 
  I've even added ' ' around the input as I'm aware that Frigate sees # as comments.
  
  This is causing my doorbell button press to not work. 
  
  ### Version
  
  0.12.0-0dbf909
  
  ### Frigate config file
  
  ```yaml
  cameras:
    frontdoor:
      ffmpeg:
        inputs:
          - path: 'rtsp://admin:supersecretpassword@192.168.0.25:554/cam/realmonitor?channel=1&subtype=0&#backchannel=0'
            roles:
              - restream
          - path: rtsp://localhost:8554/frontdoor
            roles:
              - record
  ```
  
  
  ### Relevant log output
  
  ```shell
  N/A
  ```
  
  
  ### Frigate stats
  
  _No response_
  
  ### Operating system
  
  Debian
  
  ### Install method
  
  Docker Compose
  
  ### Coral version
  
  CPU (no coral)
  
  ### Any other information that may be helpful
  
  _No response_
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `frigate/restream.py`
  Content:
  ```
  1 """Controls go2rtc restream."""
  2 
  3 
  4 import logging
  5 import requests
  6 
  7 from typing import Optional
  8 
  9 from frigate.config import FrigateConfig, RestreamCodecEnum
  10 from frigate.const import BIRDSEYE_PIPE
  11 from frigate.ffmpeg_presets import (
  12     parse_preset_hardware_acceleration_encode,
  13     parse_preset_hardware_acceleration_go2rtc_engine,
  14 )
  15 from frigate.util import escape_special_characters
  16 
  17 logger = logging.getLogger(__name__)
  18 
  19 
  20 def get_manual_go2rtc_stream(
  21     camera_url: str, codec: RestreamCodecEnum, engine: Optional[str]
  22 ) -> str:
  23     """Get a manual stream for go2rtc."""
  24     if codec == RestreamCodecEnum.copy:
  25         return f"ffmpeg:{camera_url}#video=copy#audio=aac#audio=opus"
  26 
  27     if engine:
  28         return (
  29             f"ffmpeg:{camera_url}#video={codec}#hardware={engine}#audio=aac#audio=opus"
  30         )
  31 
  32     return f"ffmpeg:{camera_url}#video={codec}#audio=aac#audio=opus"
  33 
  34 
  35 class RestreamApi:
  36     """Control go2rtc relay API."""
  37 
  38     def __init__(self, config: FrigateConfig) -> None:
  39         self.config: FrigateConfig = config
  40 
  41     def add_cameras(self) -> None:
  42         """Add cameras to go2rtc."""
  43         self.relays: dict[str, str] = {}
  44 
  45         for cam_name, camera in self.config.cameras.items():
  46             if not camera.restream.enabled:
  47                 continue
  48 
  49             for input in camera.ffmpeg.inputs:
  50                 if "restream" in input.roles:
  51                     if (
  52                         input.path.startswith("rtsp")
  53                         and not camera.restream.force_audio
  54                     ):
  55                         self.relays[cam_name] = escape_special_characters(input.path)
  56                     else:
  57                         # go2rtc only supports rtsp for direct relay, otherwise ffmpeg is used
  58                         self.relays[cam_name] = get_manual_go2rtc_stream(
  59                             escape_special_characters(input.path),
  60                             camera.restream.video_encoding,
  61                             parse_preset_hardware_acceleration_go2rtc_engine(
  62                                 self.config.ffmpeg.hwaccel_args
  63                             ),
  64                         )
  65 
  66         if self.config.restream.birdseye:
  67             self.relays[
  68                 "birdseye"
  69             ] = f"exec:{parse_preset_hardware_acceleration_encode(self.config.ffmpeg.hwaccel_args, f'-f rawvideo -pix_fmt yuv420p -video_size {self.config.birdseye.width}x{self.config.birdseye.height} -r 10 -i {BIRDSEYE_PIPE}', '-rtsp_transport tcp -f rtsp {output}')}"
  70 
  71         for name, path in self.relays.items():
  72             params = {"src": path, "name": name}
  73             requests.put("http://127.0.0.1:1984/api/streams", params=params)
  74
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/frigate/restream.py b/frigate/restream.py
  --- a/frigate/restream.py
  +++ b/frigate/restream.py
  @@ -52,7 +52,9 @@
                           input.path.startswith("rtsp")
                           and not camera.restream.force_audio
                       ):
  -                        self.relays[cam_name] = escape_special_characters(input.path)
  +                        self.relays[
  +                            cam_name
  +                        ] = f"{escape_special_characters(input.path)}#backchannel=0"
                       else:
                           # go2rtc only supports rtsp for direct relay, otherwise ffmpeg is used
                           self.relays[cam_name] = get_manual_go2rtc_stream(
  
verification_info: {"golden_diff": "diff --git a/frigate/restream.py b/frigate/restream.py\n--- a/frigate/restream.py\n+++ b/frigate/restream.py\n@@ -52,7 +52,9 @@\n                         input.path.startswith(\"rtsp\")\n                         and not camera.restream.force_audio\n                     ):\n-                        self.relays[cam_name] = escape_special_characters(input.path)\n+                        self.relays[\n+                            cam_name\n+                        ] = f\"{escape_special_characters(input.path)}#backchannel=0\"\n                     else:\n                         # go2rtc only supports rtsp for direct relay, otherwise ffmpeg is used\n                         self.relays[cam_name] = get_manual_go2rtc_stream(\n", "issue": "[Config Support]: #backchannel=0 argument isn't being passed to go2rtc\n### Describe the problem you are having\n\nLooks like the #backchannel=0 argument isn't being passed to go2rtc from the Frigate config file. \r\nI've even added ' ' around the input as I'm aware that Frigate sees # as comments.\r\n\r\nThis is causing my doorbell button press to not work. \n\n### Version\n\n0.12.0-0dbf909\n\n### Frigate config file\n\n```yaml\ncameras:\r\n  frontdoor:\r\n    ffmpeg:\r\n      inputs:\r\n        - path: 'rtsp://admin:supersecretpassword@192.168.0.25:554/cam/realmonitor?channel=1&subtype=0&#backchannel=0'\r\n          roles:\r\n            - restream\r\n        - path: rtsp://localhost:8554/frontdoor\r\n          roles:\r\n            - record\n```\n\n\n### Relevant log output\n\n```shell\nN/A\n```\n\n\n### Frigate stats\n\n_No response_\n\n### Operating system\n\nDebian\n\n### Install method\n\nDocker Compose\n\n### Coral version\n\nCPU (no coral)\n\n### Any other information that may be helpful\n\n_No response_\n", "before_files": [{"content": "\"\"\"Controls go2rtc restream.\"\"\"\n\n\nimport logging\nimport requests\n\nfrom typing import Optional\n\nfrom frigate.config import FrigateConfig, RestreamCodecEnum\nfrom frigate.const import BIRDSEYE_PIPE\nfrom frigate.ffmpeg_presets import (\n    parse_preset_hardware_acceleration_encode,\n    parse_preset_hardware_acceleration_go2rtc_engine,\n)\nfrom frigate.util import escape_special_characters\n\nlogger = logging.getLogger(__name__)\n\n\ndef get_manual_go2rtc_stream(\n    camera_url: str, codec: RestreamCodecEnum, engine: Optional[str]\n) -> str:\n    \"\"\"Get a manual stream for go2rtc.\"\"\"\n    if codec == RestreamCodecEnum.copy:\n        return f\"ffmpeg:{camera_url}#video=copy#audio=aac#audio=opus\"\n\n    if engine:\n        return (\n            f\"ffmpeg:{camera_url}#video={codec}#hardware={engine}#audio=aac#audio=opus\"\n        )\n\n    return f\"ffmpeg:{camera_url}#video={codec}#audio=aac#audio=opus\"\n\n\nclass RestreamApi:\n    \"\"\"Control go2rtc relay API.\"\"\"\n\n    def __init__(self, config: FrigateConfig) -> None:\n        self.config: FrigateConfig = config\n\n    def add_cameras(self) -> None:\n        \"\"\"Add cameras to go2rtc.\"\"\"\n        self.relays: dict[str, str] = {}\n\n        for cam_name, camera in self.config.cameras.items():\n            if not camera.restream.enabled:\n                continue\n\n            for input in camera.ffmpeg.inputs:\n                if \"restream\" in input.roles:\n                    if (\n                        input.path.startswith(\"rtsp\")\n                        and not camera.restream.force_audio\n                    ):\n                        self.relays[cam_name] = escape_special_characters(input.path)\n                    else:\n                        # go2rtc only supports rtsp for direct relay, otherwise ffmpeg is used\n                        self.relays[cam_name] = get_manual_go2rtc_stream(\n                            escape_special_characters(input.path),\n                            camera.restream.video_encoding,\n                            parse_preset_hardware_acceleration_go2rtc_engine(\n                                self.config.ffmpeg.hwaccel_args\n                            ),\n                        )\n\n        if self.config.restream.birdseye:\n            self.relays[\n                \"birdseye\"\n            ] = f\"exec:{parse_preset_hardware_acceleration_encode(self.config.ffmpeg.hwaccel_args, f'-f rawvideo -pix_fmt yuv420p -video_size {self.config.birdseye.width}x{self.config.birdseye.height} -r 10 -i {BIRDSEYE_PIPE}', '-rtsp_transport tcp -f rtsp {output}')}\"\n\n        for name, path in self.relays.items():\n            params = {\"src\": path, \"name\": name}\n            requests.put(\"http://127.0.0.1:1984/api/streams\", params=params)\n", "path": "frigate/restream.py"}], "after_files": [{"content": "\"\"\"Controls go2rtc restream.\"\"\"\n\n\nimport logging\nimport requests\n\nfrom typing import Optional\n\nfrom frigate.config import FrigateConfig, RestreamCodecEnum\nfrom frigate.const import BIRDSEYE_PIPE\nfrom frigate.ffmpeg_presets import (\n    parse_preset_hardware_acceleration_encode,\n    parse_preset_hardware_acceleration_go2rtc_engine,\n)\nfrom frigate.util import escape_special_characters\n\nlogger = logging.getLogger(__name__)\n\n\ndef get_manual_go2rtc_stream(\n    camera_url: str, codec: RestreamCodecEnum, engine: Optional[str]\n) -> str:\n    \"\"\"Get a manual stream for go2rtc.\"\"\"\n    if codec == RestreamCodecEnum.copy:\n        return f\"ffmpeg:{camera_url}#video=copy#audio=aac#audio=opus\"\n\n    if engine:\n        return (\n            f\"ffmpeg:{camera_url}#video={codec}#hardware={engine}#audio=aac#audio=opus\"\n        )\n\n    return f\"ffmpeg:{camera_url}#video={codec}#audio=aac#audio=opus\"\n\n\nclass RestreamApi:\n    \"\"\"Control go2rtc relay API.\"\"\"\n\n    def __init__(self, config: FrigateConfig) -> None:\n        self.config: FrigateConfig = config\n\n    def add_cameras(self) -> None:\n        \"\"\"Add cameras to go2rtc.\"\"\"\n        self.relays: dict[str, str] = {}\n\n        for cam_name, camera in self.config.cameras.items():\n            if not camera.restream.enabled:\n                continue\n\n            for input in camera.ffmpeg.inputs:\n                if \"restream\" in input.roles:\n                    if (\n                        input.path.startswith(\"rtsp\")\n                        and not camera.restream.force_audio\n                    ):\n                        self.relays[\n                            cam_name\n                        ] = f\"{escape_special_characters(input.path)}#backchannel=0\"\n                    else:\n                        # go2rtc only supports rtsp for direct relay, otherwise ffmpeg is used\n                        self.relays[cam_name] = get_manual_go2rtc_stream(\n                            escape_special_characters(input.path),\n                            camera.restream.video_encoding,\n                            parse_preset_hardware_acceleration_go2rtc_engine(\n                                self.config.ffmpeg.hwaccel_args\n                            ),\n                        )\n\n        if self.config.restream.birdseye:\n            self.relays[\n                \"birdseye\"\n            ] = f\"exec:{parse_preset_hardware_acceleration_encode(self.config.ffmpeg.hwaccel_args, f'-f rawvideo -pix_fmt yuv420p -video_size {self.config.birdseye.width}x{self.config.birdseye.height} -r 10 -i {BIRDSEYE_PIPE}', '-rtsp_transport tcp -f rtsp {output}')}\"\n\n        for name, path in self.relays.items():\n            params = {\"src\": path, \"name\": name}\n            requests.put(\"http://127.0.0.1:1984/api/streams\", params=params)\n", "path": "frigate/restream.py"}]}