diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index bc1e20b..f2e3462 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -50,7 +50,7 @@ jobs: - name: Run Android unit tests and lint, then build APK working-directory: android env: - OPENSTREAM_VERSION_NAME: 1.0.0 + OPENSTREAM_VERSION_NAME: 1.0.1 OPENSTREAM_VERSION_CODE: ${{ steps.version.outputs.code }} run: | chmod +x ./gradlew diff --git a/.github/workflows/obs-plugin-windows.yml b/.github/workflows/obs-plugin-windows.yml index d5053f7..ae33345 100644 --- a/.github/workflows/obs-plugin-windows.yml +++ b/.github/workflows/obs-plugin-windows.yml @@ -74,7 +74,7 @@ jobs: - name: Build plugin installer shell: powershell env: - OPENSTREAM_VERSION: ci + OPENSTREAM_VERSION: 1.0.1 run: | $iscc = "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe" & $iscc "tools\installer\openstream-obs-plugin.iss" ` diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 26024ea..e4d17df 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,7 @@ on: workflow_dispatch: inputs: tag: - description: Release tag, for example v1.0.0 + description: Release tag, for example v1.0.1 required: true type: string diff --git a/AGENTS.md b/AGENTS.md index 06609bf..10af09f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,6 +1,6 @@ # OpenStream Repository Rules -These rules apply to every OpenStream V4 change. +These rules apply to every OpenStream change. 1. Never replace source timestamps with arrival time. 2. Never re-encode ISO video. @@ -14,14 +14,13 @@ These rules apply to every OpenStream V4 change. 10. Never create a second phone video encoder in standard mode. 11. Never mix all microphones automatically. 12. Never promise genlock or guaranteed frame-perfect sync. -13. Never combine multiple major phases into one PR. +13. Keep unrelated changes in separate PRs. 14. Every performance change must include before-and-after measurements. 15. Every media change must include behavioural tests. 16. Every queue must declare its capacity and overflow policy. 17. Every recording gap must be surfaced and logged. 18. Hardware acceleration must have an explicit fallback and warning. 19. Preserve legacy compatibility through adapters, not core contamination. -20. Virtual microphone work is outside the initial V4 release. ## Completion workflow diff --git a/README.md b/README.md index b46cfec..7604a0a 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,12 @@ - OpenStream V1.0.0 Banner + OpenStream V1.0.1 Banner ### Turn any Android phone into a wireless camera source for OBS Studio -[![Version](https://img.shields.io/badge/version-1.0.0-00D4AA?style=flat-square&labelColor=1a1a2e)](https://github.com/YashasVM/OpenStream/releases/tag/v1.0.0) +[![Version](https://img.shields.io/badge/version-1.0.1-00D4AA?style=flat-square&labelColor=1a1a2e)](https://github.com/YashasVM/OpenStream/releases/tag/v1.0.1) [![Platform](https://img.shields.io/badge/platform-Android%20%2B%20Windows-green?style=flat-square&labelColor=1a1a2e)](https://github.com/YashasVM/OpenStream) [![OBS](https://img.shields.io/badge/OBS-Studio%20Plugin-purple?style=flat-square&labelColor=1a1a2e)](https://obsproject.com) [![Website](https://img.shields.io/badge/website-openstream.pages.dev-00D4AA?style=flat-square&labelColor=1a1a2e)](https://openstream.pages.dev) @@ -19,7 +19,7 @@ > [!IMPORTANT] -> OpenStream V1.0.0 is the first public release for local Wi-Fi camera workflows. Device-specific camera behavior and network quality can still vary; please report bugs in [GitHub Issues](https://github.com/YashasVM/OpenStream/issues). +> OpenStream V1.0.1 is a fixed patch release for local Wi-Fi camera workflows. Device-specific camera behavior and network quality can still vary; please report bugs in [GitHub Issues](https://github.com/YashasVM/OpenStream/issues). ## Quick Downloads @@ -35,41 +35,20 @@ Need the non-technical walkthrough with screenshots? Start with [`docs/set-up.md ## What is OpenStream? -OpenStream V1.0.0 sends your Android phone camera directly into OBS Studio over local Wi-Fi. It uses Camera2, MediaCodec video/audio encoding, MPEG-TS muxing, SRT transport, two-way LAN discovery, source-slot pairing, and a native OBS source plugin. +OpenStream V1.0.1 sends your Android phone camera directly into OBS Studio over local Wi-Fi. It uses Camera2, MediaCodec video/audio encoding, MPEG-TS muxing, SRT transport, two-way LAN discovery, source-slot pairing, and a native OBS source plugin. ```text Phone camera -> HEVC/H.264 + AAC -> SRT over Wi-Fi -> OpenStream camera slot in OBS ``` -### V1.0.0 Release +### V1.0.1 Release -| Area | V1.0.0 release detail | +| Area | V1.0.1 release detail | |---|---| | **OBS setup** | The OpenStream Camera Control dock provides the legacy connection and camera controls. | | **Scene compatibility** | Existing `OpenStream V7` scene sources keep loading while new sources appear as `OpenStream V8`. | | **Pairing clarity** | OBS and Android both describe slots as production camera positions instead of raw listener ports. | -| **Release polish** | Version defaults, release notes, and setup docs are aligned around V1.0.0. | - -### OpenStream vs DroidCam - -DroidCam is a mature phone-as-webcam product with Wi-Fi, USB, desktop webcam clients, and an OBS plugin. OpenStream is an open-source alternative focused on local OBS camera slots, SRT transport, high-bitrate video, and a repo-controlled release path. - -| Feature | OpenStream | DroidCam / DroidCam OBS | -|---|---|---| -| **Project model** | Open-source repo with Android app, native OBS plugin, CI builds, and public release assets. | Commercial app/client/plugin from Dev47Apps with free SD usage and paid HD/pro features. | -| **Primary workflow** | Turn Android phones into dedicated OBS camera sources over local Wi-Fi. | Use a phone as a webcam for video calls or as an OBS camera source. | -| **OBS integration** | Native `OpenStream V8` source with camera slots, discovery, pairing URLs, and live controls. | Direct DroidCam OBS plugin; no separate desktop client needed for OBS use. | -| **Transport** | SRT over LAN with MPEG-TS carrying HEVC/H.264 video and AAC audio. | Wi-Fi and USB transfer options; DroidCam OBS advertises hardware-accelerated video. | -| **Video target** | `1080p60` default with high local bitrate and HEVC preference. | Standard-definition free mode; HD/Full-HD/4K options depend on DroidCam mode and pro upgrade. | -| **Audio path** | AAC microphone audio into a separate OBS mixer channel, tuned for `48 kHz` live production. | Sound capture is supported, including webcam-style audio paths. | -| **Multi-camera setup** | Source slots such as `CAM A` and `CAM B` reserve phones and recover reconnects into the same OBS source. | DroidCam OBS supports adding multiple devices as OBS sources. | -| **Remote camera controls** | The OBS Cameras dock controls zoom, torch, lens switching, and the phone identification overlay. | Pro features include manual camera controls and PC remote controls. | -| **Release assets** | GitHub Releases provide the Android APK, checksum, Windows installer, and plugin ZIP. | Updates are delivered through DroidCam's app/client/plugin distribution channels. | -| **Best fit** | Builders and streamers who want an inspectable, hackable OBS-first camera pipeline. | Users who want a polished cross-app webcam product with mature USB and desktop-client options. | - -Sources: [DroidCam official site](https://droidcam.app/), [DroidCam OBS plugin](https://droidcam.app/obs/), and [DroidCam OBS usage notes](https://droidcam.app/obs/usage/). - ---- +| **Release polish** | Version defaults, release notes, and setup docs are aligned around V1.0.1. | ## Quick Start @@ -108,7 +87,7 @@ Use OBS as usual. Open **Docks → OpenStream Camera Control** for the camera co | **Phone OS** | Android 10+ with Camera2 and hardware MediaCodec support. | | **OBS host** | Windows x64 with OBS Studio 32.2.1 and its bundled FFmpeg SRT support. | | **Network** | Same LAN/subnet; guest Wi-Fi, VPNs, and client isolation can block discovery. | -| **Release maturity** | V1.0.0. Expect device-specific camera quirks and Wi-Fi-dependent latency. | +| **Release maturity** | V1.0.1. Expect device-specific camera quirks and Wi-Fi-dependent latency. | --- @@ -276,28 +255,11 @@ This is a developer/debug tool only. Normal users should install the OBS plugin. --- -## Roadmap - -- [x] Camera2 hardware-accelerated capture -- [x] HEVC/H.265 and H.264 encoding with MediaCodec -- [x] SRT transport with MPEG-TS muxing -- [x] Native OBS source plugin with FFmpeg decode -- [x] LAN auto-discovery -- [x] Audio streaming into the OBS mixer -- [x] Remote camera controls from OBS -- [x] Windows plugin installer -- [ ] Adaptive bitrate based on network conditions -- [ ] QR pairing for restricted networks -- [ ] GPU zero-copy receive path -- [ ] macOS/Linux OBS plugin packages - ---- - ## Links | Link | URL | |---|---| -| Website | [OpenStream V1.0.0](https://openstream.pages.dev) | +| Website | [OpenStream V1.0.1](https://openstream.pages.dev) | | Releases | [github.com/YashasVM/OpenStream/releases](https://github.com/YashasVM/OpenStream/releases) | | Issues | [github.com/YashasVM/OpenStream/issues](https://github.com/YashasVM/OpenStream/issues) | diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 2b5720f..7918353 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -17,11 +17,11 @@ val hasReleaseSigning = listOf( ).all { !it.isNullOrBlank() } val openStreamVersionName = providers.gradleProperty("openstream.versionName") .orElse(providers.environmentVariable("OPENSTREAM_VERSION_NAME")) - .orElse("1.0.0") + .orElse("1.0.1") .map { it.removePrefix("v") } val openStreamVersionCode = providers.gradleProperty("openstream.versionCode") .orElse(providers.environmentVariable("OPENSTREAM_VERSION_CODE")) - .orElse("1") + .orElse("2") .map { it.toInt() } android { diff --git a/build_plugin.bat b/build_plugin.bat index 2597578..9816851 100644 --- a/build_plugin.bat +++ b/build_plugin.bat @@ -29,7 +29,7 @@ set "OBS_BIN=" set "PACKAGE_DIR=" set "CMAKE_EXE=cmake" set "QT_ROOT=%OPENSTREAM_QT_ROOT%" -if not defined OPENSTREAM_VERSION set "OPENSTREAM_VERSION=1.0.0" +if not defined OPENSTREAM_VERSION set "OPENSTREAM_VERSION=1.0.1" if defined OPENSTREAM_OBS_INSTALL set "OBS_INSTALL=%OPENSTREAM_OBS_INSTALL%" if defined OPENSTREAM_PLUGIN_BUILD_DIR set "BUILD_DIR=%OPENSTREAM_PLUGIN_BUILD_DIR%" diff --git a/docs/architecture.md b/docs/architecture.md index efae331..4db8372 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -111,15 +111,3 @@ The Android app publishes: Telemetry is intentionally separate from the media path so OBS property panels can evolve independently. - -## Research Track - -The following are explicitly not required for the first prototype: - -- Raw `YUV_420_888` over network -- zstd lossless frame transport -- PTP-grade synchronization -- GPU zero-copy receive path -- ML Kit auto-framing -- Multi-network bonding -- Predictive auto-switching diff --git a/docs/protocol.md b/docs/protocol.md index aa0be33..016e1b9 100644 --- a/docs/protocol.md +++ b/docs/protocol.md @@ -2,7 +2,7 @@ ## Overview -OpenStream V1.0.0 currently uses version 1 of its LAN wire protocol. Product +OpenStream V1.0.1 currently uses version 1 of its LAN wire protocol. Product version numbers and protocol versions are independent: `OPENSTREAM/1` and `OPENSTREAM_PHONE/1` below identify the protocol, not the app release. diff --git a/docs/release-notes-template.md b/docs/release-notes-template.md index 0395914..6e89572 100644 --- a/docs/release-notes-template.md +++ b/docs/release-notes-template.md @@ -1,6 +1,6 @@ -# OpenStream V1.0.0 +# OpenStream V1.0.1 -OpenStream V1.0.0 provides a direct Android-to-OBS camera workflow with V8 source naming, V7 scene compatibility, Android camera streaming, and install downloads for both surfaces. +OpenStream V1.0.1 is a fixed Android-to-OBS camera release with V8 source naming, V7 scene compatibility, universal Android packaging, and install downloads for both surfaces. ## What's New @@ -37,7 +37,7 @@ For the screenshot walkthrough, read [`docs/set-up.md`](https://github.com/Yasha ## Notes - Windows OBS plugin only. -- Existing source names may still say `OpenStream V7`; rename them in OBS if you want the scene label to match V1.0.0. +- Existing source names may still say `OpenStream V7`; rename them in OBS if you want the scene label to match V1.0.1. - Use 5 GHz or Wi-Fi 6 for best results. - Keep both devices on the same subnet. - Please report issues on GitHub. diff --git a/docs/release.md b/docs/release.md index a9e8ef9..2b09a16 100644 --- a/docs/release.md +++ b/docs/release.md @@ -10,18 +10,25 @@ second copy of OBS/FFmpeg DLLs. | Asset | Audience | Purpose | |---|---|---| -| `openstream-android.apk` | Android users | Signed install package for the OpenStream V1.0.0 camera app. | +| `openstream-android.apk` | Android users | Signed install package for the OpenStream V1.0.1 camera app. | | `openstream-android.apk.sha256` | Android users and automation | SHA-256 checksum for the exact APK in the release. | | `openstream-obs-plugin-installer-windows-x64.exe` | Windows OBS users | Recommended one-click OBS plugin installer. | | `openstream-obs-windows-x64.zip` | Technical users | Manual plugin package with DLL and install scripts. | +### Android compatibility note + +The V1.0.1 APK is a universal signed APK with `minSdk 29` and native libraries +for `arm64-v8a`, `armeabi-v7a`, `x86`, and `x86_64`. It is therefore suitable for +modern ARM64 phones such as the Samsung Galaxy S24 Ultra. Camera lens availability +and device-specific Camera2 behavior should still be verified on the target phone. + ## Automated Release -Create and push the V1.0.0 release tag: +Create and push the V1.0.1 release tag: ```powershell -git tag v1.0.0 -git push origin v1.0.0 +git tag v1.0.1 +git push origin v1.0.1 ``` The `Release` workflow builds: @@ -38,7 +45,7 @@ artifacts, normalizes the APK name, writes its SHA-256 sidecar, and runs `gh release create`. You can also run the `Release` workflow manually from GitHub Actions with the -tag `v1.0.0`. +tag `v1.0.1`. The Android job passes the release tag into Gradle as the APK `versionName` and uses the release commit timestamp as `versionCode`. diff --git a/docs/set-up.md b/docs/set-up.md index 64cbdcb..f1aea66 100644 --- a/docs/set-up.md +++ b/docs/set-up.md @@ -1,6 +1,6 @@ # OpenStream Set-Up Guide -This guide is the slower, screenshot-led path for installing OpenStream V1.0.0 on an Android phone and a Windows OBS Studio PC. +This guide is the slower, screenshot-led path for installing OpenStream V1.0.1 on an Android phone and a Windows OBS Studio PC. For the fast technical version, use the [README quick start](../README.md#quick-start). @@ -13,7 +13,7 @@ For the fast technical version, use the [README quick start](../README.md#quick- | Android phone | Android 10 or newer is recommended. The phone must support Camera2. | | Windows PC | OBS Studio installed on Windows x64. | | Same network | Phone and PC must be on the same Wi-Fi or LAN subnet. | -| Release files | V1.0.0 APK for the phone, installer EXE for the OBS plugin. | +| Release files | V1.0.1 APK for the phone, installer EXE for the OBS plugin. | > [!TIP] > If discovery does not work, temporarily disable VPNs, guest Wi-Fi, and router client isolation. @@ -22,7 +22,7 @@ For the fast technical version, use the [README quick start](../README.md#quick- ## 1. Download the Release Files -Open the latest OpenStream V1.0.0 release and download: +Open the latest OpenStream V1.0.1 release and download: | File | Install on | Use | |---|---|---| @@ -71,9 +71,9 @@ C:\Program Files\obs-studio\obs-plugins\64bit\ ### Upgrading from an Older OpenStream Plugin -OpenStream V1.0.0 appears in OBS as `OpenStream V8`. Existing scene sources created with `OpenStream V7` are still supported, but the saved source names may remain `OpenStream V7` until you rename them in OBS. +OpenStream V1.0.1 appears in OBS as `OpenStream V8`. Existing scene sources created with `OpenStream V7` are still supported, but the saved source names may remain `OpenStream V7` until you rename them in OBS. -If OBS still shows an older OpenStream source after installing V1.0.0, check these plugin locations and remove or replace stale copies: +If OBS still shows an older OpenStream source after installing V1.0.1, check these plugin locations and remove or replace stale copies: ```text C:\Program Files\obs-studio\obs-plugins\64bit\openstream-obs.dll @@ -157,7 +157,7 @@ In OBS: | Installer cannot find OBS | Re-run it and choose the folder that contains `bin\64bit\obs64.exe`. | | Windows blocks the EXE | Use `More info` then `Run anyway`, or use the manual zip install. | | OpenStream V8 is missing in OBS | Confirm `openstream-obs.dll` is in one of the plugin folders above, remove stale older copies, then restart OBS. | -| Old OpenStream source is still visible | OBS may be loading an older all-users DLL from `C:\ProgramData\obs-studio\plugins\openstream-obs\bin\64bit\`. Replace it with the V1.0.0 DLL or remove it. | +| Old OpenStream source is still visible | OBS may be loading an older all-users DLL from `C:\ProgramData\obs-studio\plugins\openstream-obs\bin\64bit\`. Replace it with the V1.0.1 DLL or remove it. | | Phone cannot see OBS | Put both devices on the same Wi-Fi, disable VPNs, and check guest/client isolation. | | Camera stays blank | Start with port `9000`, latency `120 ms`, and one phone only. | | Audio is missing | Grant microphone permission on Android and check the OBS mixer channel. | diff --git a/docs/setup.md b/docs/setup.md index edfbfc0..7207735 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -1,4 +1,4 @@ -# OpenStream V1.0.0 Setup +# OpenStream V1.0.1 Setup The current user-facing setup guide lives in [`docs/set-up.md`](set-up.md). diff --git a/obs-plugin/CMakeLists.txt b/obs-plugin/CMakeLists.txt index 35be98e..27dc516 100644 --- a/obs-plugin/CMakeLists.txt +++ b/obs-plugin/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.24) -project(openstream_obs_plugin VERSION 1.0.0 LANGUAGES CXX) +project(openstream_obs_plugin VERSION 1.0.1 LANGUAGES CXX) set(OPENSTREAM_VERSION "${PROJECT_VERSION}" CACHE STRING "Version embedded in the OBS plugin") # Releases are built against OBS Studio 32.2.1 x64. Its bundled FFmpeg ABI is diff --git a/tests/test_repo_contract.py b/tests/test_repo_contract.py index 0288176..65cab08 100644 --- a/tests/test_repo_contract.py +++ b/tests/test_repo_contract.py @@ -16,7 +16,7 @@ def test_architecture_documents_practical_v1_transport() -> None: assert "SRT caller" in architecture assert "UDP discovery" in architecture assert "PTP" in architecture - assert "not required for the first prototype" in architecture + assert "## Research Track" not in architecture def test_android_project_declares_camera_media_codec_srt_discovery_boundaries() -> None: @@ -301,7 +301,7 @@ def test_release_build_fails_without_signing_and_keystores_are_ignored() -> None assert "Release builds require OPENSTREAM_RELEASE_KEYSTORE" in app_gradle assert "openstream.versionName" in app_gradle assert "openstream.versionCode" in app_gradle - assert '"1.0.0"' in app_gradle + assert '"1.0.1"' in app_gradle version_code = re.search( r"openStreamVersionCode.*?\.orElse\(\"(\d+)\"\)", app_gradle, @@ -318,6 +318,6 @@ def test_legacy_android_and_restored_obs_metadata_are_explicit() -> None: cmake = read("obs-plugin/CMakeLists.txt") installer = read("tools/installer/openstream-obs-plugin.iss") - assert '"1.0.0"' in app_gradle - assert "project(openstream_obs_plugin VERSION 1.0.0" in cmake - assert '#define OpenStreamVersion "1.0.0"' in installer + assert '"1.0.1"' in app_gradle + assert "project(openstream_obs_plugin VERSION 1.0.1" in cmake + assert '#define OpenStreamVersion "1.0.1"' in installer diff --git a/tools/installer/openstream-obs-plugin.iss b/tools/installer/openstream-obs-plugin.iss index eea31c6..0d3171a 100644 --- a/tools/installer/openstream-obs-plugin.iss +++ b/tools/installer/openstream-obs-plugin.iss @@ -11,7 +11,7 @@ #endif #ifndef OpenStreamVersion - #define OpenStreamVersion "1.0.0" + #define OpenStreamVersion "1.0.1" #endif [Setup] diff --git a/website/index.html b/website/index.html index e5751c3..4e47302 100644 --- a/website/index.html +++ b/website/index.html @@ -8,15 +8,15 @@ - + - + - OpenStream V1.0.0 | Wireless OBS Camera + OpenStream V1.0.1 | Wireless OBS Camera