Skip to content

TetherCam v0.2.1

Choose a tag to compare

@github-actions github-actions released this 09 Sep 18:47
· 42 commits to main since this release

Added

  • macOS virtual camera (preview, mac-app/, MIT). A menu bar host app embeds a
    CoreMediaIO Camera Extension that publishes the iPhone as the system camera "TetherCam"
    (1920x1080 NV12 30 fps) for Zoom, Teams, FaceTime, browsers and ffmpeg; the host receives
    over usbmux like the plugin, decodes with VideoToolbox, letterboxes every geometry into
    the one format and pushes into the extension's sink stream with host-clock timestamps.
    --headless and --debug-tcp flags, scripts/install-local.sh for the developer
    install. Video only (a camera extension carries no audio); the phone serves one receiver,
    so the Mac app and the OBS plugin are not used at the same time. Verified on 2026-09-09
    with a real iPhone 15 Pro Max in QuickTime Player, Photo Booth, FaceTime, Google Meet
    (Chrome), Safari, Chrome and ffmpeg, portrait and landscape, reconnect after an app
    restart. Ships as the Developer ID signed and notarized TetherCam-mac.dmg on the
    GitHub release (scripts/mac-app-release.sh); drag to Applications, open, approve the
    camera extension once in System Settings, then pick "TetherCam" in any app. (#12, #13, #14)
  • tools/vcam-test.sh: end to end check of the virtual camera without a phone
    (usbcam-sim → host app headless → ffmpeg avfoundation capture → resolution, fps and
    motion assertions, optional browser getUserMedia via VCAM_BROWSER=1). Verified
    green on 2026-09-09 with the extension approved: 1920x1080, 30.3 fps, Chrome lists the
    camera.

Fixed

  • Plugin: black source with the App Store app 0.1.0. Plugin 0.2.0 sent the 12-byte
    START (audio wish) to every phone; the shipped 1.0 app drops it as a decode error and
    never starts the camera, so OBS showed a black source with no error. The audio bit is
    now only sent when HELLO announces protocol 1.1 or later; against a 1.0 app the plugin
    logs "audio needs 1.1, starting video only" and streams video. usbcam-recv gates the
    same way and fails after 8 s without CONFIG instead of hanging on STATS. PROTOCOL.md 4.2
    carries the dated note. Found with the real device on 2026-09-09.
  • iOS: a message the parser frames but cannot decode is now logged
    ([usbcam] dropped undecodable message) instead of vanishing silently.
  • iOS: switching the camera decides on the session queue, so a lens change during a take
    no longer races the capture session's format selection. (#11)

Assets: TetherCam-mac.dmg (macOS virtual camera app, Developer ID signed and notarized, macOS 14+), TetherCam-obs-plugin.pkg / .zip (OBS plugin). Install guide: https://tethercam.app/install