No internet connection
  1. Home
  2. Technical Support

Audio issue with Macbook Pro (macOS Monterey)

By @ravi1234
    2023-06-26 03:56:00.925Zassigned to
    • @david

    Hi ,
    I am trying set up TinyPilot with my Macbook Pro(macOS Monterey) but audio is not working via HDMI.

    screen and keyboard/mouse work well but no audio receiving it.

    I also tried select "Sound" output as HDMI but it says " The selected device has no output controls".

    I am attaching the screen shot of the same.

    can you offer some quick help or fix on it.?

    I

    • 5 replies
    1. David @david2023-06-26 12:11:50.101Z

      Hi @ravi1234, sorry that you're running into this audio issue.

      If you haven't seen it yet, our audio FAQ goes into detail about some of the common issues with audio on TinyPilot. I'd recommend reading though that first.

      Audio will only work when you use TinyPilot's H.264 streaming mode. On the bottom left-hand side of the TinyPilot web interface there is a streaming mode indicator. The indicator will say 'MJPEG' or 'H.264'. If your streaming mode is set to MJPEG, click System > Video Settings on your TinyPilot's web UI. Then in the video settings dialog, change "Streaming Mode" to "H.264."

      Are you also able to share a log from your TinyPilot? On your TinyPilot's web interface, navigate to System > Logs and click Get Shareable URL. Then share the URL in your reply.

      1. R@ravi1234
          2023-06-26 23:12:07.211Z

          Hi David,

          Yes. I selected TinyPilot's H.264 streaming mode but still no luck.

          Please find attached log as requested.

          note : I have removed linke https: tinypilot/js/app.js from below log as I was not able to post it.

          TinyPilot Pro log dump
          https://tinypilotkvm.com
          Timestamp: 2023-06-26T23:56:07+01:00
          
          Software versions
          TinyPilot version: 2.6.0
          uStreamer version: 5.38
          OS version: Linux tinypilot 5.15.84-v7l+ #1613 SMP Thu Jan 5 12:01:26 GMT 2023 armv7l GNU/Linux
          Distribution name: Raspbian
          Distribution version: 11
          
          Hardware information
          Hardware: BCM2711
          Revision: b03115
          Model: Raspberry Pi 4 Model B Rev 1.5
          
          TinyPilot state
          Read-only filesystem: off
          SSH access: disabled
          temp=47.2'C
          throttled=0x0
          
          voltage logs
          
          TinyPilot settings.yml
          ustreamer_persistent: true
          ustreamer_port: 8001
          
          TinyPilot configuration
          [Unit]
          Description=TinyPilot - RPi-based virtual KVM
          After=syslog.target network.target
          StartLimitIntervalSec=0
          
          [Service]
          Type=simple
          User=tinypilot
          WorkingDirectory=/opt/tinypilot
          ExecStart=/opt/tinypilot/venv/bin/python app/main.py
          Environment=HOST=127.0.0.1
          Environment=PORT=8000
          Environment=APP_SETTINGS_FILE=/home/tinypilot/app_settings.cfg
          Restart=always
          
          [Install]
          WantedBy=multi-user.target
          
          TinyPilot logs
          -- Journal begins at Mon 2023-06-26 22:07:08 BST, ends at Mon 2023-06-26 23:56:07 BST. --
          Jun 26 22:07:12 tinypilot systemd[1]: Started TinyPilot - RPi-based virtual KVM.
          Jun 26 22:07:17 tinypilot python[526]: 2023-06-26 22:07:17.296 __main__        INFO Starting app
          Jun 26 22:07:24 tinypilot python[526]: 2023-06-26 22:07:24.868 db.store        INFO Loading database migrations from /opt/tinypilot/app/db/migrations/*.sql
          Jun 26 22:07:24 tinypilot python[526]: 2023-06-26 22:07:24.874 db.store        INFO Read 7 database migrations from disk
          Jun 26 22:07:24 tinypilot python[526]: 2023-06-26 22:07:24.937 socket_api      INFO Client Lx-OL9IjwdTXnbuuAAAC connected
          Jun 26 22:07:27 tinypilot python[526]: 2023-06-26 22:07:27.220 socket_api      INFO Client Lx-OL9IjwdTXnbuuAAAC disconnected
          Jun 26 22:07:27 tinypilot python[526]: 2023-06-26 22:07:27.423 socket_api      INFO Client IdKszXFH0yxMGauJAAAF connected
          Jun 26 22:08:19 tinypilot python[526]: 2023-06-26 22:08:19.815 socket_api      INFO Client IdKszXFH0yxMGauJAAAF disconnected
          Jun 26 22:27:41 tinypilot python[526]: 2023-06-26 22:27:41.103 socket_api      INFO Client vffTXCzVdc3Lp3q1AAAH connected
          Jun 26 22:27:44 tinypilot python[526]: 2023-06-26 22:27:44.880 socket_api      INFO Client vffTXCzVdc3Lp3q1AAAH disconnected
          Jun 26 22:27:45 tinypilot python[526]: 2023-06-26 22:27:45.078 socket_api      INFO Client tx_OuwYvzf01ykRnAAAJ connected
          Jun 26 22:27:50 tinypilot python[526]: 2023-06-26 22:27:50.243 socket_api      INFO Client tx_OuwYvzf01ykRnAAAJ disconnected
          Jun 26 23:19:20 tinypilot python[526]: 2023-06-26 23:19:20.700 socket_api      INFO Client GRS-gUjW4BoH_gugAAAL connected
          Jun 26 23:24:24 tinypilot sudo[18458]: tinypilot : PWD=/opt/tinypilot ; USER=root ; COMMAND=/opt/tinypilot-privileged/scripts/collect-debug-logs -q
          Jun 26 23:24:24 tinypilot sudo[18458]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=110)
          Jun 26 23:24:25 tinypilot sudo[18458]: pam_unix(sudo:session): session closed for user root
          Jun 26 23:30:14 tinypilot python[526]: 2023-06-26 23:30:14.271 local_system    INFO Retrieving local system's kernel version
          Jun 26 23:30:14 tinypilot python[526]: 2023-06-26 23:30:14.294 local_system    INFO Retrieved local system's kernel version as 5.15.84-v7l+
          Jun 26 23:30:14 tinypilot python[526]: 2023-06-26 23:30:14.299 local_system    INFO Retrieving local system's distribution name
          Jun 26 23:30:14 tinypilot python[526]: 2023-06-26 23:30:14.472 local_system    INFO Retrieved local system's distribution name as Raspbian
          Jun 26 23:30:14 tinypilot python[526]: 2023-06-26 23:30:14.473 local_system    INFO Retrieving local system's distribution version
          Jun 26 23:30:14 tinypilot python[526]: 2023-06-26 23:30:14.643 local_system    INFO Retrieved local system's distribution version as 11
          Jun 26 23:31:09 tinypilot python[526]: 2023-06-26 23:31:09.034 socket_api      INFO Client 6t3S2KuGgv7tKUAOAAAN connected
          Jun 26 23:32:41 tinypilot python[526]: 2023-06-26 23:32:41.259 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:32:41 tinypilot python[526]: 2023-06-26 23:32:41.617 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:32:43 tinypilot python[526]: 2023-06-26 23:32:43.981 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:32:44 tinypilot python[526]: 2023-06-26 23:32:44.198 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:32:50 tinypilot python[526]: 2023-06-26 23:32:50.054 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:32:50 tinypilot python[526]: 2023-06-26 23:32:50.263 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:33:28 tinypilot python[526]: 2023-06-26 23:33:28.502 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:33:29 tinypilot python[526]: 2023-06-26 23:33:29.581 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:33:33 tinypilot python[526]: 2023-06-26 23:33:33.048 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:33:33 tinypilot python[526]: 2023-06-26 23:33:33.301 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:33:52 tinypilot python[526]: 2023-06-26 23:33:52.671 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:33:53 tinypilot python[526]: 2023-06-26 23:33:53.730 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:33:53 tinypilot python[526]: 2023-06-26 23:33:53.914 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:33:54 tinypilot python[526]: 2023-06-26 23:33:54.102 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:33:54 tinypilot python[526]: 2023-06-26 23:33:54.250 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:34:26 tinypilot python[526]: 2023-06-26 23:34:26.338 socket_api      INFO Client GRS-gUjW4BoH_gugAAAL disconnected
          Jun 26 23:36:01 tinypilot python[526]: 2023-06-26 23:36:01.869 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:36:03 tinypilot python[526]: 2023-06-26 23:36:03.279 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:36:03 tinypilot python[526]: 2023-06-26 23:36:03.508 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:36:03 tinypilot python[526]: 2023-06-26 23:36:03.694 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:36:03 tinypilot python[526]: 2023-06-26 23:36:03.861 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:36:04 tinypilot python[526]: 2023-06-26 23:36:04.029 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:36:04 tinypilot python[526]: 2023-06-26 23:36:04.203 socket_api      WARNING [SENSITIVE] Unrecognized key: Unidentified (keycode=) [/SENSITIVE]
          Jun 26 23:37:16 tinypilot python[526]: 2023-06-26 23:37:16.031 socket_api      INFO Client KZE1ANtQC92C4aFjAAAP connected
          Jun 26 23:44:34 tinypilot python[526]: 2023-06-26 23:44:34.796 socket_api      INFO Client nI2v9p9Ek0pzHeacAAAR connected
          Jun 26 23:44:48 tinypilot python[526]: 2023-06-26 23:44:48.476 socket_api      INFO Client nI2v9p9Ek0pzHeacAAAR disconnected
          Jun 26 23:44:48 tinypilot python[526]: 2023-06-26 23:44:48.729 socket_api      INFO Client muIePzxb8wYQXv5RAAAT connected
          Jun 26 23:47:11 tinypilot python[526]: 2023-06-26 23:47:11.775 socket_api      INFO Client gcnXZkXDEEK3KfZHAAAV connected
          Jun 26 23:47:16 tinypilot python[526]: 2023-06-26 23:47:16.937 socket_api      INFO Client muIePzxb8wYQXv5RAAAT disconnected
          Jun 26 23:47:53 tinypilot python[526]: 2023-06-26 23:47:53.460 socket_api      INFO Client gcnXZkXDEEK3KfZHAAAV disconnected
          Jun 26 23:50:33 tinypilot python[26423]: 2023-06-26 23:50:33.333 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:47 tinypilot python[26479]: 2023-06-26 23:50:47.685 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:47 tinypilot python[26480]: 2023-06-26 23:50:47.731 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:47 tinypilot python[26481]: 2023-06-26 23:50:47.767 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:47 tinypilot python[26482]: 2023-06-26 23:50:47.803 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:47 tinypilot python[26483]: 2023-06-26 23:50:47.828 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:47 tinypilot python[26484]: 2023-06-26 23:50:47.853 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:47 tinypilot python[26485]: 2023-06-26 23:50:47.882 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:47 tinypilot python[26486]: 2023-06-26 23:50:47.907 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:47 tinypilot python[26487]: 2023-06-26 23:50:47.931 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:47 tinypilot python[26488]: 2023-06-26 23:50:47.956 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:47 tinypilot python[26489]: 2023-06-26 23:50:47.980 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:48 tinypilot python[26490]: 2023-06-26 23:50:48.005 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:48 tinypilot python[26491]: 2023-06-26 23:50:48.030 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:48 tinypilot python[26492]: 2023-06-26 23:50:48.054 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:48 tinypilot python[26493]: 2023-06-26 23:50:48.079 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:50:48 tinypilot python[26494]: 2023-06-26 23:50:48.103 hid.write       ERROR Failed to write to HID interface: /dev/hidg1. Is USB cable connected?
          Jun 26 23:51:17 tinypilot python[526]: 2023-06-26 23:51:17.285 socket_api      INFO Client KZE1ANtQC92C4aFjAAAP disconnected
          Jun 26 23:52:30 tinypilot python[526]: 2023-06-26 23:52:30.740 socket_api      INFO Client 6t3S2KuGgv7tKUAOAAAN disconnected
          Jun 26 23:54:03 tinypilot python[526]: 2023-06-26 23:54:03.575 socket_api      INFO Client TComIXZOAeXJaN-yAAAX connected
          Jun 26 23:56:07 tinypilot sudo[27784]: tinypilot : PWD=/opt/tinypilot ; USER=root ; COMMAND=/opt/tinypilot-privileged/scripts/collect-debug-logs -q
          Jun 26 23:56:07 tinypilot sudo[27784]: pam_unix(sudo:session): session opened for user root(uid=0) by (uid=110)
          
          TinyPilot update logs
          ok: [localhost]
          TASK [ansible-role-ustreamer : create Janus config files] **********************
          ok: [localhost] => (item=janus.jcfg)
          ok: [localhost] => (item=janus.transport.websockets.jcfg)
          TASK [ansible-role-ustreamer : get multi-arch target triplet (i.e., machine-vendor-operatingsystem)] ***
          ok: [localhost]
          TASK [ansible-role-ustreamer : determine Janus plugins directory] **************
          ok: [localhost]
          TASK [ansible-role-ustreamer : create ustreamer group] *************************
          ok: [localhost]
          TASK [ansible-role-ustreamer : create ustreamer user] **************************
          ok: [localhost]
          TASK [ansible-role-ustreamer : check for a boot config file] *******************
          ok: [localhost]
          TASK [ansible-role-ustreamer : save whether boot config file exists] ***********
          ok: [localhost]
          TASK [ansible-role-ustreamer : check whether this machine has a uStreamer settings file] ***
          ok: [localhost]
          TASK [ansible-role-ustreamer : read uStreamer settings file] *******************
          ok: [localhost]
          TASK [ansible-role-ustreamer : decode settings file] ***************************
          ok: [localhost]
          TASK [ansible-role-ustreamer : read ustreamer_capture_device from config file if it's not already defined] ***
          ok: [localhost]
          TASK [ansible-role-ustreamer : enable TC358743 overlay in /boot/config.txt] ****
          ok: [localhost]
          TASK [ansible-role-ustreamer : enable TC358743-audio overlay in /boot/config.txt] ***
          ok: [localhost]
          TASK [ansible-role-ustreamer : set GPU memory to 256MB in /boot/config.txt] ****
          ok: [localhost]
          TASK [ansible-role-ustreamer : check for a boot cmdline file] ******************
          ok: [localhost]
          TASK [ansible-role-ustreamer : read /boot/cmdline.txt] *************************
          ok: [localhost]
          TASK [ansible-role-ustreamer : decode command-line string] *********************
          ok: [localhost]
          TASK [ansible-role-ustreamer : change cma to 128M if it's set to a different value] ***
          skipping: [localhost]
          TASK [ansible-role-ustreamer : add cma=128M to cmdline.txt if it's missing] ****
          skipping: [localhost]
          TASK [ansible-role-ustreamer : create EDIDs folder] ****************************
          ok: [localhost]
          TASK [ansible-role-ustreamer : copy TC358743 EDID file] ************************
          changed: [localhost]
          TASK [ansible-role-ustreamer : install TC358743 initializer service] ***********
          ok: [localhost]
          TASK [ansible-role-ustreamer : use custom settings for TC358743 chip for any facts not already defined] ***
          ok: [localhost]
          TASK [ansible-role-ustreamer : remove TC358743 initializer service file] *******
          skipping: [localhost]
          TASK [ansible-role-ustreamer : disable TC358743 overlay in /boot/config.txt] ***
          skipping: [localhost]
          TASK [ansible-role-ustreamer : disable TC358743-audio overlay in /boot/config.txt] ***
          skipping: [localhost]
          TASK [ansible-role-ustreamer : collect universal required apt packages] ********
          ok: [localhost]
          TASK [ansible-role-ustreamer : collect Raspberry Pi OS specific required apt packages] ***
          ok: [localhost]
          TASK [ansible-role-ustreamer : collect Raspberry Pi OS and Debian specific required apt packages for audio] ***
          ok: [localhost]
          TASK [ansible-role-ustreamer : collect Debian-specific required apt packages] ***
          skipping: [localhost]
          TASK [ansible-role-ustreamer : collect Ubuntu-specific required apt packages] ***
          skipping: [localhost]
          TASK [ansible-role-ustreamer : collect Janus WebRTC plugin specific required apt packages] ***
          ok: [localhost]
          TASK [ansible-role-ustreamer : install uStreamer pre-requisite packages] *******
          ok: [localhost]
          TASK [ansible-role-ustreamer : install uStreamer Debian package] ***************
          changed: [localhost]
          TASK [ansible-role-ustreamer : create uStreamer folder] ************************
          skipping: [localhost]
          TASK [ansible-role-ustreamer : get uStreamer repo] *****************************
          skipping: [localhost]
          TASK [ansible-role-ustreamer : clean uStreamer repository] *********************
          skipping: [localhost]
          TASK [ansible-role-ustreamer : build uStreamer] ********************************
          skipping: [localhost]
          TASK [ansible-role-ustreamer : fix uStreamer folder permissions] ***************
          changed: [localhost]
          TASK [ansible-role-ustreamer : install uStreamer as a service] *****************
          ok: [localhost]
          TASK [ansible-role-ustreamer : enable systemd uStreamer service file] **********
          ok: [localhost]
          TASK [ansible-role-ustreamer : save uStreamer settings file] *******************
          ok: [localhost]
          TASK [ansible-role-ustreamer : create uStreamer Janus plugin config] ***********
          ok: [localhost]
          TASK [ansible-role-ustreamer : install uStreamer Janus plugin] *****************
          skipping: [localhost]
          TASK [ansible-role-ustreamer : define ansible to yq architecture mapping] ******
          ok: [localhost]
          TASK [ansible-role-ustreamer : canonicalize yq binary architecture] ************
          ok: [localhost]
          TASK [ansible-role-ustreamer : install yq] *************************************
          ok: [localhost]
          TASK [ansible-role-ustreamer : create uStreamer launcher directories] **********
          ok: [localhost] => (item=/opt/ustreamer-launcher)
          ok: [localhost] => (item=/opt/ustreamer-launcher/configs.d)
          TASK [ansible-role-ustreamer : create runtime variables dictionary] ************
          ok: [localhost]
          TASK [ansible-role-ustreamer : collect non-null runtime variables] *************
          ok: [localhost] => (item=ustreamer_interface)
          ok: [localhost] => (item=ustreamer_port)
          skipping: [localhost] => (item=ustreamer_video_path)
          ok: [localhost] => (item=ustreamer_encoder)
          ok: [localhost] => (item=ustreamer_format)
          skipping: [localhost] => (item=ustreamer_resolution)
          skipping: [localhost] => (item=ustreamer_desired_fps)
          ok: [localhost] => (item=ustreamer_workers)
          skipping: [localhost] => (item=ustreamer_quality)
          skipping: [localhost] => (item=ustreamer_brightness)
          ok: [localhost] => (item=ustreamer_persistent)
          ok: [localhost] => (item=ustreamer_use_dv_timings)
          ok: [localhost] => (item=ustreamer_drop_same_frames)
          skipping: [localhost] => (item=ustreamer_tcp_nodelay)
          ok: [localhost] => (item=ustreamer_h264_sink)
          ok: [localhost] => (item=ustreamer_h264_sink_mode)
          ok: [localhost] => (item=ustreamer_h264_sink_rm)
          skipping: [localhost] => (item=ustreamer_h264_bitrate)
          TASK [ansible-role-ustreamer : print uStreamer runtime variables] **************
          ok: [localhost] => {
              "ustreamer_runtime_vars": {
                  "ustreamer_drop_same_frames": "30",
                  "ustreamer_encoder": "m2m-image",
                  "ustreamer_format": "uyvy",
                  "ustreamer_h264_sink": "tinypilot::ustreamer::h264",
                  "ustreamer_h264_sink_mode": 777,
                  "ustreamer_h264_sink_rm": true,
                  "ustreamer_interface": "127.0.0.1",
                  "ustreamer_persistent": true,
                  "ustreamer_port": 8001,
                  "ustreamer_use_dv_timings": true,
                  "ustreamer_workers": "3"
              }
          }
          TASK [ansible-role-ustreamer : write uStreamer runtime variables to file] ******
          ok: [localhost]
          TASK [ansible-role-ustreamer : install uStreamer launcher script] **************
          ok: [localhost]
          TASK [ansible-role-tinypilot-pro : install TinyPilot Debian package] ***********
          changed: [localhost]
          TASK [ansible-role-tinypilot-pro : install TinyPilot as a service] *************
          ok: [localhost]
          TASK [ansible-role-tinypilot-pro : enable systemd TinyPilot service file] ******
          ok: [localhost]
          TASK [ansible-role-tinypilot-pro : generate nginx ca keys] *********************
          ok: [localhost]
          TASK [ansible-role-tinypilot-pro : generate nginx tls keys] ********************
          ok: [localhost]
          TASK [ansible-role-nginx : Include OS-specific variables.] *********************
          ok: [localhost]
          TASK [ansible-role-nginx : Define nginx_user.] *********************************
          ok: [localhost]
          TASK [ansible-role-nginx : include_tasks] **************************************
          skipping: [localhost]
          TASK [ansible-role-nginx : include_tasks] **************************************
          skipping: [localhost]
          TASK [ansible-role-nginx : include_tasks] **************************************
          included: /mnt/tinypilot-installer/roles/ansible-role-nginx/tasks/setup-Debian.yml for localhost
          TASK [ansible-role-nginx : Update apt cache.] **********************************
          ok: [localhost]
          TASK [ansible-role-nginx : Ensure nginx is installed.] *************************
          ok: [localhost]
          TASK [ansible-role-nginx : include_tasks] **************************************
          skipping: [localhost]
          TASK [ansible-role-nginx : include_tasks] **************************************
          skipping: [localhost]
          TASK [ansible-role-nginx : include_tasks] **************************************
          skipping: [localhost]
          TASK [ansible-role-nginx : Remove default nginx vhost config file (if configured).] ***
          ok: [localhost]
          TASK [ansible-role-nginx : Ensure nginx_vhost_path exists.] ********************
          ok: [localhost]
          TASK [ansible-role-nginx : Add managed vhost config files.] ********************
          ok: [localhost] => (item={'listen': [80, '443 ssl http2'], 'server_name': 'tinypilot', 'filename': 'tinypilot.conf', 'root': '/opt/tinypilot', 'index': 'index.html', 'error_page': '497 =307 https://$http_host$request_uri', 'extra_parameters': 'ssl_certificate "/etc/ssl/certs/tinypilot-nginx.crt";\nssl_certificate_key "/etc/ssl/private/tinypilot-nginx.key";\nssl_protocols TLSv1.2;\nssl_prefer_server_ciphers on;\nssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384;\nssl_ecdh_curve secp384r1;\nssl_session_timeout  10m;\nssl_session_cache shared:SSL:10m;\nssl_session_tickets off;\nproxy_buffers 16 16k;\nproxy_buffer_size 16k;\nproxy_set_header Host $http_host;\nproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\nproxy_set_header X-Forwarded-Proto $scheme;\nproxy_http_version 1.1;\nlocation /socket.io {\n  proxy_pass http://tinypilot;\n  proxy_set_header Upgrade $http_upgrade;\n  proxy_set_header Connection "Upgrade";\n  # Since this is a connection upgrade, we don\'t inherit the settings from\n  # above. We need these so that nginx forwards requests properly to\n  # Flask-SocketIO.\n  # See: https://github.com/miguelgrinberg/Flask-SocketIO/issues/1501#issuecomment-802082048\n  proxy_set_header Host $http_host;\n  proxy_set_header X-Forwarded-Host $http_host;\n  proxy_set_header X-Forwarded-Proto $scheme;\n}\nlocation /state {\n  auth_request     /auth;\n  auth_request_set $auth_status $upstream_status;\n  proxy_pass http://ustreamer;\n}\nlocation /stream {\n  auth_request     /auth;\n  auth_request_set $auth_status $upstream_status;\n  postpone_output 0;\n  proxy_buffering off;\n  proxy_ignore_headers X-Accel-Buffering;\n  proxy_pass http://ustreamer;\n}\nlocation /snapshot {\n  auth_request     /auth;\n  auth_request_set $auth_status $upstream_status;\n  proxy_pass http://ustreamer;\n}\nlocation /janus/ws {\n  auth_request     /auth;\n  auth_request_set $auth_status $upstream_status;\n  proxy_pass http://janus-ws;\n  proxy_set_header Upgrade $http_upgrade;\n  proxy_set_header Connection "Upgrade";\n  proxy_set_header Host $http_host;\n  proxy_set_header X-Real-IP $remote_addr;\n  proxy_set_header X-Scheme $scheme;\n  proxy_set_header X-Forwarded-Proto $scheme;\n  proxy_set_header X-Forwarded-Port $server_port;\n  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n}\nlocation /ca.crt {\n  alias "/etc/ssl/certs/tinypilot-ca.crt";\n}\nlocation / {\n  proxy_pass http://tinypilot;\n}\nlocation /api/massStorage/backingFiles {\n  # Allow large file transfers without buffering them.\n  client_max_body_size 0;\n  proxy_request_buffering off;\n  proxy_read_timeout 1d;\n  proxy_pass http://tinypilot;\n}\nlocation ~* ^/.+\\.(html|js|js.map|css|woff|woff2)$ {\n  root "/opt/tinypilot/app/static";\n\n  # We cache assets to prevent the browser from making redundant\n  # requests to the same files while loading the page. (Observed on\n  # Chrome 91.) We don’t want caching otherwise, though, in order to\n  # avoid stale files after users update their device. Note, that in\n  # addition to `max-age`, the browser’s caching behaviour is relative\n  # to the `Last-Modified` header, so we make that seem recent.\n  add_header Last-Modified $date_gmt;\n  add_header Cache-Control \'public, max-age=10s\';\n}\nlocation ~* ^/.+\\.(jpg|jpeg|png|ico)$ {\n  root "/opt/tinypilot/app/static";\n}\n# Authenticate any protected routes that are outside of the core\n# TinyPilot web app.\nlocation = /auth {\n  internal;\n  proxy_pass              http://tinypilot/api/auth;\n  proxy_pass_request_body off;\n  proxy_set_header        Content-Length "";\n  proxy_set_header        X-Original-URI $request_uri;\n\n  # Redefine header directives, as they are not inherited here:\n  # See http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header\n  proxy_set_header        X-Forwarded-Proto $scheme;\n}\n'})
          TASK [ansible-role-nginx : Remove managed vhost config files.] *****************
          skipping: [localhost] => (item={'listen': [80, '443 ssl http2'], 'server_name': 'tinypilot', 'filename': 'tinypilot.conf', 'root': '/opt/tinypilot', 'index': 'index.html', 'error_page': '497 =307 https://$http_host$request_uri', 'extra_parameters': 'ssl_certificate "/etc/ssl/certs/tinypilot-nginx.crt";\nssl_certificate_key "/etc/ssl/private/tinypilot-nginx.key";\nssl_protocols TLSv1.2;\nssl_prefer_server_ciphers on;\nssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384;\nssl_ecdh_curve secp384r1;\nssl_session_timeout  10m;\nssl_session_cache shared:SSL:10m;\nssl_session_tickets off;\nproxy_buffers 16 16k;\nproxy_buffer_size 16k;\nproxy_set_header Host $http_host;\nproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\nproxy_set_header X-Forwarded-Proto $scheme;\nproxy_http_version 1.1;\nlocation /socket.io {\n  proxy_pass http://tinypilot;\n  proxy_set_header Upgrade $http_upgrade;\n  proxy_set_header Connection "Upgrade";\n  # Since this is a connection upgrade, we don\'t inherit the settings from\n  # above. We need these so that nginx forwards requests properly to\n  # Flask-SocketIO.\n  # See: https://github.com/miguelgrinberg/Flask-SocketIO/issues/1501#issuecomment-802082048\n  proxy_set_header Host $http_host;\n  proxy_set_header X-Forwarded-Host $http_host;\n  proxy_set_header X-Forwarded-Proto $scheme;\n}\nlocation /state {\n  auth_request     /auth;\n  auth_request_set $auth_status $upstream_status;\n  proxy_pass http://ustreamer;\n}\nlocation /stream {\n  auth_request     /auth;\n  auth_request_set $auth_status $upstream_status;\n  postpone_output 0;\n  proxy_buffering off;\n  proxy_ignore_headers X-Accel-Buffering;\n  proxy_pass http://ustreamer;\n}\nlocation /snapshot {\n  auth_request     /auth;\n  auth_request_set $auth_status $upstream_status;\n  proxy_pass http://ustreamer;\n}\nlocation /janus/ws {\n  auth_request     /auth;\n  auth_request_set $auth_status $upstream_status;\n  proxy_pass http://janus-ws;\n  proxy_set_header Upgrade $http_upgrade;\n  proxy_set_header Connection "Upgrade";\n  proxy_set_header Host $http_host;\n  proxy_set_header X-Real-IP $remote_addr;\n  proxy_set_header X-Scheme $scheme;\n  proxy_set_header X-Forwarded-Proto $scheme;\n  proxy_set_header X-Forwarded-Port $server_port;\n  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n}\nlocation /ca.crt {\n  alias "/etc/ssl/certs/tinypilot-ca.crt";\n}\nlocation / {\n  proxy_pass http://tinypilot;\n}\nlocation /api/massStorage/backingFiles {\n  # Allow large file transfers without buffering them.\n  client_max_body_size 0;\n  proxy_request_buffering off;\n  proxy_read_timeout 1d;\n  proxy_pass http://tinypilot;\n}\nlocation ~* ^/.+\\.(html|js|js.map|css|woff|woff2)$ {\n  root "/opt/tinypilot/app/static";\n\n  # We cache assets to prevent the browser from making redundant\n  # requests to the same files while loading the page. (Observed on\n  # Chrome 91.) We don’t want caching otherwise, though, in order to\n  # avoid stale files after users update their device. Note, that in\n  # addition to `max-age`, the browser’s caching behaviour is relative\n  # to the `Last-Modified` header, so we make that seem recent.\n  add_header Last-Modified $date_gmt;\n  add_header Cache-Control \'public, max-age=10s\';\n}\nlocation ~* ^/.+\\.(jpg|jpeg|png|ico)$ {\n  root "/opt/tinypilot/app/static";\n}\n# Authenticate any protected routes that are outside of the core\n# TinyPilot web app.\nlocation = /auth {\n  internal;\n  proxy_pass              http://tinypilot/api/auth;\n  proxy_pass_request_body off;\n  proxy_set_header        Content-Length "";\n  proxy_set_header        X-Original-URI $request_uri;\n\n  # Redefine header directives, as they are not inherited here:\n  # See http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header\n  proxy_set_header        X-Forwarded-Proto $scheme;\n}\n'})
          TASK [ansible-role-nginx : Remove legacy vhosts.conf file.] ********************
          ok: [localhost]
          TASK [ansible-role-nginx : Copy nginx configuration in place.] *****************
          changed: [localhost]
          TASK [ansible-role-nginx : Ensure nginx service is running as configured.] *****
          ok: [localhost]
          RUNNING HANDLER [ansible-role-nginx : reload nginx] ****************************
          changed: [localhost]
          PLAY RECAP *********************************************************************
          localhost                  : ok=69   changed=6    unreachable=0    failed=0    skipped=19   rescued=0    ignored=0
          + cp /mnt/tinypilot-installer/tmp/tmp.G4V2HRMJUP.yml /home/tinypilot/settings.yml
          + chown tinypilot:tinypilot /home/tinypilot/settings.yml
          + chmod 0644 /home/tinypilot/settings.yml
          + clean_up
          + rm -rf /mnt/tinypilot-installer/tmp/tmp.G4V2HRMJUP.yml
          + clean_up
          + sudo umount --lazy /mnt/tinypilot-installer
          + sudo rm -rf /opt/tinypilot-updater /mnt/tinypilot-installer
          + exit 0
          2023-06-26 21:41:37.623 __main__        INFO Update completed successfully
          2023-06-26 21:41:37.623 update.result_store INFO Writing result file to /home/tinypilot/logs/latest-update-result.json
          2023-06-26 21:41:37.625 update.target_version INFO Clearing target version file /home/tinypilot/target-version
          
          uStreamer configuration
          ==> /opt/ustreamer-launcher/configs.d/000-defaults.yml <==
          ---
          ustreamer_drop_same_frames: '30'
          ustreamer_encoder: m2m-image
          ustreamer_format: uyvy
          ustreamer_h264_sink: tinypilot::ustreamer::h264
          ustreamer_h264_sink_mode: 777
          ustreamer_h264_sink_rm: true
          ustreamer_interface: 127.0.0.1
          ustreamer_persistent: true
          ustreamer_port: 8001
          ustreamer_use_dv_timings: true
          ustreamer_workers: '3'
          
          ==> /opt/ustreamer-launcher/configs.d/100-tinypilot.yml <==
          ustreamer_persistent: true
          ustreamer_port: 8001
          
          uStreamer logs
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.883    stream] -- Destroying workers pool JPEG ...
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.909    stream] -- Capturing stopped
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.913    stream] -- Device fd=10 closed
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.913    stream] -- Changed video frame to BLANK
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.916    stream] -- H264: Configuring encoder: DMA=0 ...
          Jun 26 23:50:54 tinypilot launch[528]: ================================================================================
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.935    stream] -- Device fd=10 opened
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.935    stream] -- Using input channel: 0
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.942    stream] -- Got new DV-timings: 1920x1080p50.00, pixclk=148500000, vsync=45, hsync=720
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.979    stream] -- Using resolution: 1920x1080
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.979    stream] -- Using format: UYVY
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.979    stream] -- Querying HW FPS changing is not supported
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.979    stream] -- Using IO method: MMAP
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.989    stream] -- Requested 5 device buffers, got 5
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.996    stream] -- Capturing started
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.996    stream] -- Using JPEG quality: 80%
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.996    stream] -- Creating pool JPEG with 3 workers ...
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6218.996    stream] -- Capturing ...
          Jun 26 23:50:54 tinypilot launch[528]: -- INFO  [6219.012    stream] -- H264: Configuring encoder: DMA=1 ...
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.570    stream] -- Got V4L2 event
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.570    stream] -- Got V4L2_EVENT_SOURCE_CHANGE: source changed
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.570    stream] -- Destroying workers pool JPEG ...
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.590    stream] -- Capturing stopped
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.594    stream] -- Device fd=10 closed
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.594    stream] -- Changed video frame to BLANK
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.597    stream] -- H264: Configuring encoder: DMA=0 ...
          Jun 26 23:51:13 tinypilot launch[528]: ================================================================================
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.617    stream] -- Device fd=10 opened
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.617    stream] -- Using input channel: 0
          Jun 26 23:51:13 tinypilot launch[528]: -- ERROR [6237.638    stream] -- Requested resolution=640x480 is unavailable
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.658    stream] -- Using resolution: 1920x1080
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.658    stream] -- Using format: UYVY
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.659    stream] -- Querying HW FPS changing is not supported
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.659    stream] -- Using IO method: MMAP
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.668    stream] -- Requested 5 device buffers, got 5
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.676    stream] -- Capturing started
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.676    stream] -- Using JPEG quality: 80%
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.676    stream] -- Creating pool JPEG with 3 workers ...
          Jun 26 23:51:13 tinypilot launch[528]: -- INFO  [6237.676    stream] -- Capturing ...
          Jun 26 23:51:14 tinypilot launch[528]: -- ERROR [6238.678    stream] -- Persistent device timeout (unplugged)
          Jun 26 23:51:16 tinypilot launch[528]: -- INFO  [6241.348      http] -- HTTP: NEW client (now=1): [2601:86:103:40b0:a0cc:4ce0:2286:7c44]:34404, id=a6bebd25a0d2f8f2
          Jun 26 23:51:17 tinypilot launch[528]: -- INFO  [6241.811      http] -- HTTP: DEL client (now=0): [2601:86:103:40b0:a0cc:4ce0:2286:7c44]:34404, id=a6bebd25a0d2f8f2, Resource temporarily unavailable (reading,eof)
          Jun 26 23:51:17 tinypilot launch[528]: -- INFO  [6242.300      http] -- HTTP: NEW client (now=1): [10.0.0.253]:34406, id=9c7547a6759abe43
          Jun 26 23:51:44 tinypilot launch[528]: -- INFO  [6269.354    stream] -- H264: Configuring encoder: DMA=1 ...
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.453    stream] -- H264: Requested keyframe by a sink client
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.746    stream] -- H264: Requested keyframe by a sink client
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.747      http] -- HTTP: DEL client (now=0): [10.0.0.253]:34406, id=9c7547a6759abe43, Resource temporarily unavailable (reading,eof)
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.796    stream] -- H264: Requested keyframe by a sink client
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.846    stream] -- Got V4L2 event
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.847    stream] -- Got V4L2_EVENT_SOURCE_CHANGE: source changed
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.847    stream] -- Destroying workers pool JPEG ...
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.873    stream] -- Capturing stopped
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.877    stream] -- Device fd=10 closed
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.878    stream] -- Changed video frame to BLANK
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.881    stream] -- H264: Configuring encoder: DMA=0 ...
          Jun 26 23:51:45 tinypilot launch[528]: ================================================================================
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.904    stream] -- Device fd=10 opened
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.904    stream] -- Using input channel: 0
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.911    stream] -- Got new DV-timings: 1920x1080p50.00, pixclk=148500000, vsync=45, hsync=720
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.931    stream] -- Using resolution: 1920x1080
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.931    stream] -- Using format: UYVY
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.931    stream] -- Querying HW FPS changing is not supported
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.931    stream] -- Using IO method: MMAP
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.941    stream] -- Requested 5 device buffers, got 5
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.948    stream] -- Capturing started
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.948    stream] -- Using JPEG quality: 80%
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.948    stream] -- Creating pool JPEG with 3 workers ...
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.949    stream] -- Capturing ...
          Jun 26 23:51:45 tinypilot launch[528]: -- INFO  [6269.954    stream] -- H264: Configuring encoder: DMA=1 ...
          Jun 26 23:54:03 tinypilot launch[528]: -- INFO  [6407.972      http] -- HTTP: NEW client (now=1): [2601:86:103:40b0:214d:8bcc:7c36:7c54]:49200, id=455a99be0d6b84d4
          Jun 26 23:54:05 tinypilot launch[528]: -- INFO  [6409.879    stream] -- H264: Requested keyframe by a sink client
          Jun 26 23:54:05 tinypilot launch[528]: -- INFO  [6410.427    stream] -- H264: Requested keyframe by a sink client
          Jun 26 23:54:06 tinypilot launch[528]: -- INFO  [6410.482    stream] -- H264: Requested keyframe by a sink client
          Jun 26 23:54:06 tinypilot launch[528]: -- INFO  [6411.021      http] -- HTTP: DEL client (now=0): [2601:86:103:40b0:214d:8bcc:7c36:7c54]:49200, id=455a99be0d6b84d4, Resource temporarily unavailable (reading,eof)
          Jun 26 23:54:06 tinypilot launch[528]: -- INFO  [6411.089    stream] -- H264: Requested keyframe by a sink client
          Jun 26 23:54:06 tinypilot launch[528]: -- INFO  [6411.149    stream] -- H264: Requested keyframe by a sink client
          Jun 26 23:54:07 tinypilot launch[528]: -- INFO  [6411.451    stream] -- H264: Requested keyframe by a sink client
          Jun 26 23:54:07 tinypilot launch[528]: -- INFO  [6411.503    stream] -- H264: Requested keyframe by a sink client
          Jun 26 23:54:07 tinypilot launch[528]: -- INFO  [6412.177    stream] -- H264: Requested keyframe by a sink client
          Jun 26 23:54:07 tinypilot launch[528]: -- INFO  [6412.245    stream] -- H264: Requested keyframe by a sink client
          
          nginx logs
          -- Journal begins at Mon 2023-06-26 22:07:08 BST, ends at Mon 2023-06-26 23:56:07 BST. --
          Jun 26 22:07:12 tinypilot systemd[1]: Starting A high performance web server and a reverse proxy server...
          Jun 26 22:07:13 tinypilot systemd[1]: Started A high performance web server and a reverse proxy server.
          
          
          2023/06/26 21:41:21 [notice] 30467#30467: signal process started
          2023/06/26 22:07:07 [error] 30468#30468: *937 upstream prematurely closed connection while reading response header from upstream, client: 2601:86:103:40b0:dd18:2b3a:e0c0:431e, server: tinypilot, request: "POST /api/restart HTTP/2.0", upstream: "http://127.0.0.1:8000/api/restart", host: "tinypilot.local", referrer: "https://tinypilot.local/"
          
          
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /js/clipboard.js HTTP/2.0" 200 889 "https://tinypilot/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /js/mouse.js HTTP/2.0" 200 8492 "https://tinypilot/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /third-party/socket.io/3.1.3/socket.io.min.js HTTP/2.0" 200 61701 "https://tinypilot/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /js/app.js HTTP/2.0" 200 14083 "https://tinypilot/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /third-party/webrtc-adapter/8.1.1/adapter.min.js HTTP/2.0" 200 59549 "https://tinypilot/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /third-party/janus-gateway/1.0.0/janus.js HTTP/2.0" 200 134759 "https://tinypilot/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /js/webrtc-video.js HTTP/2.0" 200 6806 "https://tinypilot/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /third-party/fonts/overpass-light.woff2 HTTP/2.0" 200 26568 "https://tinypilot/third-party/fonts/fonts.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /js/keycodes.js HTTP/2.0" 200 3205 "https://tinypilot/js/app.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /js/keyboardstate.js HTTP/2.0" 200 3164 "https://tinypilot/js/app.js" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /js/keystrokes.js HTTP/2.0" 200 362 "https:" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /js/paste.js HTTP/2.0" 200 2096 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /js/overlays.js HTTP/2.0" 200 495 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /css/icons.css HTTP/2.0" 200 841 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /css/toggle.css HTTP/2.0" 200 1005 " "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /img/logo.svg HTTP/2.0" 200 5550 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /img/video-stream-icon.svg HTTP/2.0" 200 840 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /img/warning-icon.svg HTTP/2.0" 200 2177 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /img/clipboard-icon.svg HTTP/2.0" 200 855 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /img/angle-down-icon.svg HTTP/2.0" 200 516 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /img/external-link-icon.svg HTTP/2.0" 200 1223 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /third-party/fonts/overpass-mono-light.woff2 HTTP/2.0" 200 50112 "https://tinypilot/third-party/fonts/fonts.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /third-party/fonts/overpass-semibold.woff2 HTTP/2.0" 200 25032 "https://tinypilot/third-party/fonts/fonts.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /socket.io/?EIO=4&transport=polling&t=OZvwdN8 HTTP/2.0" 200 96 "https://tinypilot/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "POST /socket.io/?EIO=4&transport=polling&t=OZvwdNm&sid=TVVHv22AeivIq59GAAAW HTTP/2.0" 200 2 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /socket.io/?EIO=4&transport=polling&t=OZvwdNp&sid=TVVHv22AeivIq59GAAAW HTTP/2.0" 200 32 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:03 +0100] "GET /favicon.ico HTTP/2.0" 200 1213 "https://tinypilot/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:04 +0100] "GET /socket.io/?EIO=4&transport=polling&t=OZvwdRD&sid=TVVHv22AeivIq59GAAAW HTTP/2.0" 200 1 "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:06 +0100] "GET /stream?advance_headers=1 HTTP/2.0" 200 16574366 "https://tinypilot/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          2601:86:103:40b0:214d:8bcc:7c36:7c54 - - [26/Jun/2023:23:54:06 +0100] "GET /apple-touch-icon.png HTTP/2.0" 200 3571 "https://tinypilot/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.21412.111 Safari/537.36 AVG/114.0.21412.111" "-"
          
          
          
          1. David @david2023-06-27 11:48:56.587Z

            Thanks for sharing that log! I can't see any obvious issues in there.

            I've just done a quick test. I connected my old Macbook Pro running macOS Mojave (10.14) to my TinyPilot 2a and it also lists the output settings as "The selected device has no output controls". This appears to be the expected behavior. I can confirm that sound output via my TinyPilot 2a works in this setup.

            "Output controls" in this situation seems to be referring to adjustments like master volume and left/right balance. It just means you can't make those adjustments with TinyPilot as the output device. Since you're still not hearing audio, I suspect there's some other issue in your setup. Perhaps with volume or mute settings in the apps you're using on both your target machine (MacBook Pro) and client machine (the device you're using to access your TinyPilot's web interface.

            Could you double-check that your Macbook plays audio via its speakers in the apps you're using? And then could you double-check that your client machine also plays audio via your browser? Your browser might need you to explicitly enable audio for the TinyPilot web interface if you have options like autoplay disabled.

            1. R@ravi1234
                2023-06-27 21:44:37.387Z

                Hello David,
                I double checked my Macbook it plays audio via its speakers without any issue.
                but when select TinyPilot HDMI as sound out put , there is no audio (tried youtube too, the video get stuck when selected HDMI as output, but built-in speaker has no issue).
                I checked browser and everything looks good.

                Also checked with Windows machine in fact everything works with Windows in browser but not with Macbook Pro.

                I am kind stuck now as I bought this TinyPilot for my macbook pro to access remotely but it does not seems work (audio) in any case.

                Kindly, advise the solution!!

                1. David @david2023-06-28 14:23:22.990Z

                  Thanks for testing all of that, @ravi1234!

                  Based on your reply, it sounds like your TinyPilot is handling sound correctly since it's working with a different PC (Windows). That suggests this is an issue with the Macbook.

                  Are you able to test whether your Macbook can output both video and sound over HDMI to a different device? Perhaps a TV? If you could test with the same HDMI cable that you use with your TinyPilot, that would be ideal.