Skip to content

Releases: meta-tabchen/MoonCast

MoonCast 0.7

Choose a tag to compare

@meta-tabchen meta-tabchen released this 12 Oct 16:46

MoonCast 0.7

VersionCode 57 · package com.mooncast.community · tag v0.7.

中文

修复与改进

  • 修复已复现的GameStream首次身份初始化缺类问题。 使用Bouncy Castle官方BOM配套:bcpkix/bcutil 1.85,bcprov 1.85.2。旧组合把phone的pkix/util1.77与TV选择的prov1.85.2混用,APK缺类与主机NoClassDefFoundError复现相吻合。实际0.4.6 APK是工作基线,不是Git父版本0.3.1。
  • 启动错误主动回传。 在清理host前保存有界阶段/错误并主动发布,界面也可读取匹配会话的结果,避免250ms退出早于1500ms轮询而吞掉原因。不会清除或重建用户配对身份来掩盖失败。
  • 手机协议Tab优化。 两行等权、窄屏中英文断词布局;新增模拟布局回归。
  • 连接中也能取消。 修正连接中控件隐藏导致Disconnect不可达的问题;增加createOffer尚未完成时的取消测试,Mac最终21项浏览器夹具与新增取消用例通过。
  • 浏览器沉浸显示。 控件自动隐藏、触摸恢复、安全区布局;全屏API缺失或拒绝时使用页面内沉浸。Safari浏览器/系统栏仍可能显示,不承诺网页能控制它们。

已检查与仍有限制

本轮本地结果:Tab 88项与18个模拟布局用例、21个桌面浏览器夹具、803项中英资源检查;旧BC组合失败、新配套临时目录首次/既有身份、签名及重复ensure不改写PEM检查通过。最终两ABI签名及BC DEX类型引用范围已独立检查,保留三项可选JSSE类型引用例外;lint为0错误、11警告。

本地OriginalMediaServerTest连接重置失败仍保留,修复后的main CI已通过,但不抹掉独立Mac测试失败,手动设备任务跳过。 没有追加用户手机、物理iPhone Safari或完整GameStream端到端验收;本次修复解决已复现的依赖初始化问题,不承诺所有设备已恢复。历史code54 GIF、code55画质数据保持原标签,不当作0.7实测。验证明细

下载、升级与来源

  • MoonCast-0.7-arm64-v8a.apk
  • MoonCast-0.7-armeabi-v7a.apk
  • MoonCast-0.7-source.zip
  • MoonCast-0.7-notices.zip
  • SHA256SUMS

固定包名与现有证书不变;证书SHA-256为 290e4372fff33c00848758b12275936900b2eccad053dc63c18622e1a1222bb2。公开测试签名用于升级身份连续性,不能证明维护者身份。最终来源和附件哈希以核验后的发布清单为准;不要沿用旧APK哈希。

此前公开版本是browser preview.4等历史Release;数字0.6.0仅为草稿,从未公开发布。旧标签和附件保留。纯数字0.7与Latest分类不意味着实验协议、所有设备和网络均稳定。

WebRTC源码范围仍为应用源码加固定外部SDK源码/DEPS/获取构建映射,不是完整离线SDK依赖树,原生SDK未独立重建。信令使用可信局域网HTTP、媒体DTLS-SRTP;不绕过DRM,不启用麦克风或反控,不修改系统安全设置。

English

Fixes and improvements

  • Fix a reproduced GameStream fresh-identity initialization class failure. Use the official Bouncy Castle BOM-compatible set: bcpkix/bcutil 1.85, bcprov 1.85.2. The old unified combination mixed phone pkix/util1.77 with TV-selected prov1.85.2; APK missing-class inspection matched the host NoClassDefFoundError reproduction. The actual working 0.4.6 APK is the baseline, not a Git-parent 0.3.1 approximation.
  • Actively deliver startup errors. Save a bounded stage/error and publish before host teardown; the UI can retrieve a matching session result. A 250 ms host exit should not erase the reason before a 1500 ms UI poll. User pairing identities are not deleted or regenerated to conceal failure.
  • Improve phone protocol tabs. Equal-width two-line labels address narrow English/Chinese wrapping, with additional mocked-layout regression cases.
  • Keep cancellation reachable while connecting. Fix controls hiding Disconnect in the connecting state; add cancellation while createOffer is pending. The final 21 Mac browser fixtures and added cancel case passed.
  • Add browser immersion. Auto-hide controls, touch restoration and safe-area layout; absent or rejected native fullscreen APIs fall back to page-level immersion. Safari/browser/system bars may remain visible; a page cannot promise to control them.

Checked and still limited

Local results include 88 tab checks plus 18 mocked-layout cases, 21 desktop-browser fixtures and 803 localization entries. The old BC set failed; the corrected set passed temporary-directory fresh/existing identity, signature and repeated-ensure checks without rewriting existing PEM. Both final ABIs were independently checked for signature and BC DEX type references with three optional JSSE reference exceptions; lint reported 0 errors and 11 warnings.

The local OriginalMediaServerTest connection-reset failure is retained, and repaired main CI passed. This does not erase that separate Mac failure; the manual device job was skipped. No additional user-phone, physical iPhone Safari or complete GameStream end-to-end acceptance was performed. The change addresses the reproduced dependency initialization failure, not proof that every affected device now works. Code54 GIFs and code55 measurements retain their original historical labels. Validation details

Downloads, updates and source

  • MoonCast-0.7-arm64-v8a.apk
  • MoonCast-0.7-armeabi-v7a.apk
  • MoonCast-0.7-source.zip
  • MoonCast-0.7-notices.zip
  • SHA256SUMS

The package and signer are unchanged; certificate SHA-256 is 290e4372fff33c00848758b12275936900b2eccad053dc63c18622e1a1222bb2. The public test signer provides update continuity, not maintainer authentication. Use verified final provenance/manifests and SHA256SUMS; never reuse an older APK hash.

Previous public releases include browser preview.4; numeric 0.6.0 remained an unpublished draft. Old tags/assets remain intact. Numeric 0.7 and Latest classification do not establish universal protocol/device/network stability.

WebRTC source scope remains application source plus pinned external SDK source/DEPS/fetch/build mappings, not a full offline SDK checkout or independently rebuilt native SDK. Signaling is trusted-LAN HTTP and media is DTLS-SRTP. No DRM bypass, microphone/remote-input enablement or system-security modification is introduced.

Final build provenance / 最终构建来源

  • Local build / 本地构建:5ab1b3064d57ddd02416d6e3734eabc818d66b1e.
  • Public main and v0.7 target / 公开main及标签目标:70ee18591e4ae6fed1c7d42e96338d53189d1871.
  • Identical Git tree / 完全一致源码树:0489e0fa1bca7ade608db7ff84582835f0d80a88.

The local and public commit IDs differ, but their exact source trees match. The local SHA is retained as build provenance, not represented as a publicly browsable commit. The final delta after candidate b677abd is connecting-state CSS and its cancellation test; no additional physical-device acceptance is claimed.

本地与公开提交ID不同,但源码树完全一致;本地SHA保留作溯源,不称其为公开可浏览提交。相对b677abd的最后变更为连接中CSS与取消测试,没有追加真机验收。

  • MoonCast-0.7-arm64-v8a.apk: SHA-256 dfb81195e668df8de38569d51d5221d5f28da1b8e87d40fdcf1ed1cb799041fa.
  • MoonCast-0.7-armeabi-v7a.apk: SHA-256 ef21c1bae6df8be8c117f3dbd842af8b6a37463fb57224bfe0011e95ebacd99d.

BC verification is limited to type-reference closure; it does not prove complete method linkage or all optional-path guards. Three optional JSSE type references are reviewed exceptions. Source/notices hashes come from final archive verification and SHA256SUMS; the repaired main CI rerun passed host, build, lint and signature checks; the manual device job was skipped. The recorded Mac OriginalMediaServerTest reset failure remains disclosed.

BC验证限于类型引用闭包,不证明完整方法链接或所有可选路径保护;三项可选JSSE引用为审阅例外。源码/声明哈希以最终归档校验及SHA256SUMS为准,修复后的main CI通过主机、构建、lint和签名检查,手动设备任务跳过;Mac OriginalMediaServerTest连接重置失败继续保留。

Source archive and CI follow-up / 源码归档与CI后续

MoonCast-0.7-source.zip: 362,291,996 bytes, 9,962 files, SHA-256 1bb2cf7e0a8504fa4d630aa96137f039bb0513a0f10aeaa87d798cef150eecd8. It preserves the tag70ee source tree matching the original Mac5ab build. The notices companion includes provenance, the original source-history bundle and the later CI-only patch explanation.

源码包大小 362291996字节、9962文件,上述SHA-256已确定;保留tag70ee与原始Mac5ab一致的源码树。声明附件包含来源映射、原始源码历史bundle及后续仅CI补丁说明。

The first CI on 70ee18591e4ae6fed1c7d42e96338d53189d1871 failed in the host-test dependency resolver: raw Android classpath artifact types were ambiguous. This was a test-task resolution failure, not evidence of an APK runtime failure. Main commit b8be23646aa7f65ce348a611504d4c1a6b3586f5 changes only that CI/test resolution to an artifactView selecting Bouncy Castle module JARs from the actual release graph, retaining the tests. It does not replace the frozen runtime/source tag.

首次70ee CI在主机测试依赖解析处失败,原始Android classpath产物类型存在歧义;这是测试任务解析失败,不是APK运行失败证据。main提交 b8be23646aa7f65ce348a611504d4c1a6b3586f5 仅将该解析改为artifactView,从实际release依赖图选择BC模块JAR,测试保留,冻结运行/源码标签不变。

CI snapshot: run38278828071 completed successfully on b8be236: host/BC tests, ARM64/ARMv7 builds, lint, QR roundtrips, APK type closure and signing guards passed. The manual device job was skipped, not passed. Tag v0.7 stays at70ee, exactly matching the original build's source tree. The earlier Mac OriginalMediaServerTest connection-reset failure remains disclosed separately.

CI快照: 重跑38278828071在b8be236上成功完成:主机/BC测试、双ABI构建、lint、QR回环、APK类型闭包与签名检查通过。手动设备任务跳过,不当作通过。v0.7仍指向70ee,与原始构建源码树一致;此前Mac OriginalMediaServerTest连接重置失败独立保留。

MoonCast 0.5.0

MoonCast 0.5.0 Pre-release
Pre-release

Choose a tag to compare

历史版本 / Historical release · 2026-10-12 · 手机与电视统一版 / unified phone and TV
原 APK 版本 / Original APK version: 0.5.0-unified-preview (versionCode 50); original tag: unified-v0.5.0-preview.
仅整理展示名称,原附件、签名和链接未更改。下载当前 MoonCast 0.7。 / Display name standardized only; original assets, signatures and links are unchanged. Download current MoonCast 0.7.

MoonCast 0.5.0 统一版预览

同一个 APK 可在安卓手机发送、安卓电视接收;手机默认发送,电视默认接收,可手动切换角色。包名 com.mooncast.unified.preview,与旧手机/TV 预览版并存。每个架构 APK 都可独立安装;一般新手机选 arm64-v8a,32 位电视选 armeabi-v7a。

使用

  • 手机 AirPlay →「我的电视」选择接收端并允许系统屏幕采集;iPhone/iPad 可用系统 AirPlay 连接 MoonCast 电视模式。
  • Moonlight / Sunshine(GameStream)走独立协议配对,角色切换会停止原角色;不同时收发。
  • APK 推送:电视开启「从手机安装 APK」,手机选择普通 .apk,在同一「我的电视」选择具备 APK 接收能力的设备。端口固定 48152、无需额外验证码;电视审阅后仍须由用户确认系统安装。第一次安装来源权限由用户在 Android 设置中操作。
  • 电视待机主题可切换;播放设置使用半透明面板。

安全与兼容边界

仅可信家庭局域网使用。APK 传输是未加密 HTTP,不要开放到公网;不支持 .apks / .xapk、静默安装或安全权限绕过。包信息、签名指纹和 SHA-256 是核对信息,不是恶意软件扫描。

实际协议包括 AirPlay、DLNA 和 GameStream 对应路径。没有实现 Miracast、Google Cast 或 Lelink 接收,不能保证进入安卓手机系统投屏列表。DRM/禁止采集内容可能黑屏或无声。

这是使用一次性测试身份签名的实验并存包,不保证未来持续覆盖升级;不包含私钥。旧应用先保留,但同时只运行一个接收服务,避免端口冲突。

验证范围

源码/依赖哈希、主机回归、构建、静态检查与产物校验已执行;历史独立版部分模拟器结果仅作回归参考。统一版最终 UI、视频叠加、音频连续性、手机到真实电视互通及系统安装流程尚未完成实机验收。不能把编译通过视为设备兼容证明。

完整对应源码

附件 MoonCast-0.5.0-unified-complete-source.zip 是构建交付时的原始完整源码,含固定版本原生源、补丁、许可证、二进制输入校验和与构建配方;记录的原始本地源码 commit 为 b9d0544881e7a0deb80480db54f50f45d21d4feb。公开分支从已验证源码恢复,另加发布/依赖恢复与 CI 配置,提交 SHA 因重新构造而不同。源代码分支:unified/android-0.5.0。大型构建输入按校验清单从本 Release 的完整源恢复,不存入 Git 历史。

两 APK 与此前附件交付字节一致,未由 CI 重新签名。请对照附件 SHA256SUMS。项目及第三方许可见完整源中的 LICENSE / THIRD_PARTY_NOTICES.md。

GitHub unsigned CI verification passed for release commit f3566ab: dependency restore, native checks, behavior/discovery regression suites, unsigned ARM64 build, lint and APK inspection. Run: https://github.com/meta-tabchen/MoonCast/actions/runs/38188837151

MoonCast 0.5.1

MoonCast 0.5.1 Pre-release
Pre-release

Choose a tag to compare

@meta-tabchen meta-tabchen released this 12 Oct 05:03

历史版本 / Historical release · 2026-10-12 · 手机与电视统一版 / unified phone and TV
原 APK 版本 / Original APK version: 0.5.1-community (versionCode 51); original tag: community-v0.5.1.
仅整理展示名称,原附件、签名和链接未更改。下载当前 MoonCast 0.7。 / Display name standardized only; original assets, signatures and links are unchanged. Download current MoonCast 0.7.

MoonCast 0.5.1 Community / 社区版

Known limitations / 已知限制

This is a community preview. Builds, signing and a synthetic same-certificate upgrade passed, but the overall CI failed: Android 15 hit a startup ANR during the next locale process, and Android 11 lost its package-manager service during install. Full UI regression, screenshots, GIFs and physical-device casting remain unverified. CPU saturation was recorded; the ANR root cause is not established.

这是社区预览版。构建、签名及合成同签名覆盖升级通过,但整轮 CI 失败:Android 15 在后续语言测试启动时发生 ANR,Android 11 安装时包管理服务消失。完整 UI 回归、真实截图、GIF 及实机投屏尚未验证。记录到 CPU 满载,ANR 根因仍未确定。

Previous 0.5.0 remains available / 旧版 0.5.0 仍可下载.

中文

这次更新

  • 统一安卓手机发送与电视接收:同一个应用,根据设备选择默认角色,也可在设置中切换。
  • 修复 APK 接收服务关闭后立即重开的固定端口竞争,避免偶发端口占用;不改用随机端口。
  • 将中英文界面、语言选择与项目说明作为本轮重点;README 重写为完整的统一版介绍,补充场景、能力边界、模型概念图与裁剪算法详解。
  • 改为固定社区包名与公开测试签名,为后续社区版覆盖升级建立连续身份。旧 0.5.0 需要一次迁移,以后不会每个版本都换包名。

本次实测结果与已知限制

  • 源码提交:27967d778c55042bb2adc926074bc3b1d94e19b9;CI 与原始日志。聚合构建验证成功,但整轮 CI 结论为失败,不能称全部通过。
  • 两个 ARM 架构的 release 构建、lint、ZIP 对齐、固定包名/签名检查、缺失或错误签名拒绝检查及主机单元测试通过。完整源包的 9864 项输入哈希逐一匹配。
  • Android 15 x86_64 模拟器真实执行同包名、同签名的合成 versionCode 50→51 覆盖升级:保留首次安装时间及私有数据标记,未卸载。该测试不代表旧 0.5.0 可覆盖升级,也不是发布 ARM APK 的实机安装证明。
  • Android 15 的 system 语言选择阶段通过,包括十组中英文资源区分与系统语言解析;随后新进程启动发生 ANR,后续语言、页面、取消交互与截图测试未完成。日志同时显示 CPU 满载,但没有启动线程栈,根因尚不能确定为环境问题或应用问题。
  • Android 11 模拟器安装时包管理服务消失,一次标准非流式重试后仍无法安装。此平台的应用运行验证未通过。
  • 本轮没有可用的真实 UI 截图或 GIF,也没有手机到家庭电视的实机互通/音画/延迟验证。README 概念图不是运行截图。

投屏画面怎么选

电视「自动去黑边」先检测成对黑边,再等待稳定证据锁定,并在检测到裁剪外新内容时尝试放宽。想保留全部源画面选「适应」;愿意裁掉部分画面以铺满屏幕选「填满」;也可手动调整四边、缩放与位置。

自动检测基于像素阈值与几何规则,不是 AI 语义识别;暗场、字幕和浮层可能影响判断。去黑边不等于任何比例都能无损铺满。手机发送端与电视接收端使用不同规则,详见 README 中的双语算法文档。本轮文档补充不代表新增裁剪能力或新增实机验证。

应用内更换语言先确认结束会话;取消或选择当前语言不停止会话。直接从 Android 系统设置切换语言,现有通知可能需要停止并重开会话后刷新。

下载与升级

  • 64 位 ARM 安卓系统选 MoonCast-0.5.1-community-arm64-v8a.apk;32 位 ARM 安卓系统选 MoonCast-0.5.1-community-armeabi-v7a.apk。每个 APK 都包含发送与接收角色,不必同时安装两个架构版本。最低 Android 8.0。
  • 社区包名:com.mooncast.community;versionCode:51。
  • 固定社区证书 SHA-256:290e4372fff33c00848758b12275936900b2eccad053dc63c18622e1a1222bb2。
  • 原 0.5.0 的临时签名已无法恢复,社区版与旧包可并存以完成一次迁移;配对、权限、设置不会自动跨包复制。运行时只启动一个接收器以避免端口冲突。
  • 社区测试密钥有意公开,任何人都能以它签名,不能作为维护者身份凭证。请从可信项目发布页下载并核对发布校验和。未来商店版使用独立包名与私有生产密钥。

协议、安全与验证范围

支持已实现的 AirPlay、DLNA、GameStream 路径;Miracast、Google Cast、Lelink 未实现,不保证出现在安卓系统投屏列表。DRM 或禁止采集内容可能黑屏或无声。镜像为有损编码,不承诺零延迟、无损或所有设备兼容。

APK 推送仅用于可信局域网,使用固定 TCP 48152 的未加密 HTTP。电视主动开启接收并审阅,最终仍需用户确认及 Android 安装器;不支持静默安装或绕过签名、降级、兼容性及分包限制。GameStream 的 PIN 配对保留,只有 APK 传输不需要额外验证码。

本版本的具体构建、检查与设备结果以发布时的验证清单为准。不得把旧独立版模拟器测试、模型概念图或成功编译当成当前手机到真实电视互通证明。APK、完整对应源码及 SHA256SUMS 应一起发布。源码与依赖遵循 LICENSE / THIRD_PARTY_NOTICES.md。当前源码分支为 unified/community;Release 对应源码 ZIP 不含 MoonCast 应用的 PKCS12 签名文件,可通过 -PmooncastUnsignedVerification=true 构建独立无签名验证身份,不能覆盖社区版。完整 Git checkout 提供用户一次初始化的固定公开测试身份及校验记录。

English

This update

  • One Android app for phone sending and TV receiving, with a device-appropriate default role and an override in settings.
  • Fix a fixed-port close/reopen race in APK receiving without falling back to random ports.
  • This round focuses on English/Chinese UI, language selection and project documentation. The full unified README adds scenarios, practical limits, model-generated concept illustrations and a detailed cropping explanation.
  • A fixed community package and public test-signing identity establish continuity for future community updates. Moving from 0.5.0 requires one migration; subsequent versions do not change package names each time.

Results and known limitations

  • Exact source: 27967d778c55042bb2adc926074bc3b1d94e19b9; CI and raw logs. The aggregate build-verification job passed; the overall workflow failed. This is not an all-green release.
  • Both ARM release builds, lint, ZIP alignment, fixed package/certificate checks, missing/wrong-signing rejection checks and host unit tests passed. All 9,864 corresponding-source inventory entries matched their hashes.
  • An Android 15 x86_64 emulator actually upgraded a synthetic versionCode-50 baseline to 51 with the same package and certificate, retaining first-install time and a private-data marker without uninstalling. This does not establish compatibility with old 0.5.0 or physical-device installation of the ARM APKs.
  • The Android 15 system-language selection phase passed, including ten distinct English/Chinese resource groups and system-language resolution. The next process start hit an ANR; remaining locale, page, cancellation and screenshot checks did not complete. CPU saturation was recorded, but no startup thread trace was captured, so an environment-only or app-specific cause is not established.
  • The Android 11 emulator lost its package-manager service during installation; one standard non-streamed retry also failed. App-runtime validation on that platform did not pass.
  • No usable actual UI screenshots or GIF were produced in this run, and phone-to-physical-TV interoperability, audio/video and latency remain unverified. README concept illustrations are not runtime screenshots.

Choose the right framing

TV Auto checks paired borders, waits for stable evidence and can widen a locked crop when it detects new visible content outside. Choose Fit for the complete source, Fill if you accept cropping picture content to cover the screen, or Manual for independent edges, zoom and position.

Automatic detection uses pixel thresholds and geometry, not AI semantic recognition. Dark scenes, subtitles and overlays can affect it. Removing black borders cannot make every aspect ratio fill a screen without losing content. Sender and receiver use different rules; see the bilingual algorithm documentation linked from the README. Documenting this behavior does not mean this release adds new cropping features or new physical-device evidence.

In-app language changes confirm session cleanup; Cancel or selecting the current language keeps the session. An external Android Settings language change may leave an active notification in its previous language until the session is stopped and restarted.

Downloads and updates

  • Choose MoonCast-0.5.1-community-arm64-v8a.apk for a 64-bit ARM Android system, or MoonCast-0.5.1-community-armeabi-v7a.apk for a 32-bit ARM system. Each APK includes both roles; install one ABI variant per device. Minimum Android 8.0.
  • Community package: com.mooncast.community; versionCode: 51.
  • Fixed community certificate SHA-256: 290e4372fff33c00848758b12275936900b2eccad053dc63c18622e1a1222bb2.
  • The old 0.5.0 disposable signing identity is no longer available. The community app can coexist with that old package for a one-time migration; pairing state, permissions and settings do not transfer automatically. Run only one receiver service at a time to avoid port conflicts.
  • The community test key is intentionally public. Anyone can sign with it, so it cannot establish maintainer authenticity. Use the trusted project release source and verify its published checksums. A future store edition will use a separate package and private production key.

Protocols, safety and validation

Implemented workflows include AirPlay, DLNA and GameStream. Miracast, Google Cast and Lelink are not implemented; appearing in Android's system Cast picker is not guaranteed. DRM or capture-restricted content may produce black video or no audio. Mirroring is lossy; there is no zero-latency, losslessness or universal-compatibility promise.

APK transfer is for a trusted LAN, using unencrypted HTTP on fixed TCP port 48152. The TV enables reception and reviews the package; user confirmation and Android's installer remain required. It does not silently install or bypass signature, downgrade, compatibility or split-package rules. GameStream PIN pairing remains; only APK transfer needs no extra code.

Consult the final release verification checklist for this version's actual builds, checks and device results. Historical standalone emulator tests, generated illustrations and successful compilation are not proof of current phone-to-physical-TV interoperability. Publish APKs, complete corresponding source and SHA256SUMS together. Source and dependency licenses are in LICENSE / THIRD_PARTY_NOTICES.md. Current source is on unified/community. The Release source ZIP excludes the MoonCast app-signing PKCS12 fixture; -PmooncastUnsignedVerification=true produces a separate unsigned verification identity that cannot update the community app. A full Git checkout supplies the fixed owner-initialized public test identity and checksum records.

MoonCast 0.6.0

MoonCast 0.6.0 Pre-release
Pre-release

Choose a tag to compare

历史版本 / Historical release · 2026-10-12 · 手机与电视统一版 / unified phone and TV
原 APK 版本 / Original APK version: 0.6.0-browser-preview.4 (versionCode 55); original tag: browser-v0.6.0-preview.4.
仅整理展示名称,原附件、签名和链接未更改。下载当前 MoonCast 0.7。 / Display name standardized only; original assets, signatures and links are unchanged. Download current MoonCast 0.7.

MoonCast 0.6.0-browser-preview.4 / code 55

Source/runtime: c0936675193c49e3bcd64bb0a76171059b9f9210 · tag browser-v0.6.0-preview.4.

Final changes from d44a4c4 are icon-only. No additional device test was performed on the final icon build, as requested. The quality observations below remain pre-icon evidence.
最终相对 d44a4c4 仅改图标;按要求未对最终图标构建追加真机测试,下方画质结果属于修改图标前的观察。

中文

新功能

  • 使用选定的11号猫咪电视图标,放大主体,同步手机/电视启动图标、电视横幅与网页品牌图。最终增量仅资源与品牌样式。

  • 浏览器共享开始后自动内联显示临时链接二维码,无需额外点击展开。二维码与复制链接对应同一地址,使用固定开源 ZXing 本地生成,不向外部二维码服务发送会话地址;停止后清除。

  • 增加流畅、均衡、清晰预设与高级长边/帧率/码率上限。流畅为720/24fps/2Mbps,均衡保持1280/30/8;清晰依据设备报告的硬件能力选择,最高3840/30/24,必要时选择较低帧率。

  • 设置保存到下一次共享,修改不会重启或改变当前捕获。输出不主动上采样;同一设置保留于本次捕获尺寸变化和观看者重连,码率/帧率参数更新被拒绝时会检查结果。

  • 浏览器分开显示目标上限和实际接收尺寸、编码、解码帧率、RTP视频Mbps。适应/填充/缩放只改变显示,不提高捕获细节。

  • AirPlay 2 增加依据H.264能力筛选的高级画质入口,旧默认保留;下一会话生效。AirPlay 1 仍为1280×720/30fps/4Mbps;不改DLNA或GameStream协商。

已观察与未验证

在本轮code55开发的短窗口中,清晰接收 3200×2136、约25.2解码fps、2.6Mbps RTP视频(目标上限3840/30/24);流畅接收 720×480、约22解码fps、0.48Mbps(上限720/24/2)。码率是上限,实际自适应;这些观察不是持续性能、发送编码器精确码率、全部网络吞吐或无损承诺。

清晰通过5项检查。流畅自动停止观察超时,原记录保留;随后独立检查确认停止与旧链接关闭,不能称该自动检查通过。均衡、旋转、摄像头扫码未测。二维码软件解码不等于摄像头实扫,硬件能力报告不保证稳定4K/30。最终图标构建未追加真机验证。

README中已有code54 GIF与截图仍明确属于0.6.0-browser-preview.3,不能用来证明新二维码或画质界面。旧版真实安卓到Mac浏览器证据仍有效于其具体设备、版本和范围,不等于本轮全部回归通过。

编码器兼容风险

静态检查发现:预检按任一支持目标的编码器判断,但WebRTC实际可能选择同MIME的另一个编码器,其高级组合支持未必相同;未单独限制的H.265协商也不在AVC/VP8能力预检范围内。这不是已实测通用失败,不否定平板清晰/流畅结果。其他设备请以接收统计为准;失败时选择均衡/流畅后重开。

安全与来源

只在可信局域网使用。有效二维码与临时链接均可访问共享会话,请勿公开。HTML/信令为HTTP,媒体为DTLS-SRTP;无云信令、STUN/TURN或公网穿透。源应用允许的播放音频与麦克风录音不同;浏览器模式不录麦克风,不绕过DRM,不启用反控。

固定社区包名 com.mooncast.community 与公开测试签名不变;code55递增,公开证书用于升级连续性,不证明发布者身份。最终APK与源码附件需按发布SHA256SUMS核验。

QR库保留固定ZXing源码、POM和Apache-2.0声明,有离线源码重建与像素解码检查。WebRTC仍使用固定开源预编译SDK;应用源码及固定外部源码/DEPS获取构建映射不等于完整离线SDK依赖树,原生WebRTC SDK尚未独立重建。应用源码包不含MoonCast应用签名PKCS12文件。

English

New

  • The selected cat-and-TV icon11 has a larger central subject, with matching phone/TV launchers, TV banner and browser branding. The final increment changes only branding resources and styles.

  • Starting Browser sharing automatically displays an inline QR for the temporary link, with no extra expand action. Copy and QR use the same URL. Pinned open-source ZXing generates it locally, without sending the session address to a QR service. Stop clears it.

  • Smooth, Balanced and device-aware Clear presets add advanced long-edge/FPS/bitrate ceilings. Smooth is 720 / 24 fps / 2 Mbps; Balanced preserves 1280 / 30 / 8. Clear selects reported-compatible hardware candidates up to 3840 / 30 / 24, using lower reported frame rates where needed.

  • Settings apply to the next sharing lifetime; changes do not restart or alter active capture. Output is not intentionally upscaled. The selected profile persists through capture resizing and viewer reconnects; rejected bitrate/FPS parameter updates are checked.

  • Browser statistics distinguish target ceilings from received dimensions, codec, decoded FPS and RTP video Mbps. Fit/Fill/zoom affects presentation, not captured detail.

  • AirPlay 2 gains advanced quality settings filtered by reported H.264 capabilities, retaining existing defaults and applying next session. AirPlay 1 remains at 1280×720 / 30 fps / 4 Mbps. DLNA and GameStream negotiation are unchanged.

Observed and untested

Short windows during this code-55 development round recorded Clear at 3200×2136, about 25.2 decoded fps and 2.6 Mbps RTP video, against 3840 / 30 / 24 ceilings. Smooth was 720×480, about 22 decoded fps and 0.48 Mbps, against 720 / 24 / 2 ceilings. Bitrate is a maximum and actual output adapts. These are not sustained-performance, exact sender-bitrate, total-network-throughput or lossless-quality promises.

Clear passed five checks. Smooth's automatic Stop observation timed out and remains recorded as such; an independent subsequent check confirmed Stop and old-link closure. The timed-out check did not become a pass. Balanced, rotation and physical camera scanning were not tested. QR software decode is distinct from a camera scan; reported capabilities do not guarantee sustained 4K/30. No additional device validation was performed on the final icon build.

Existing code-54 GIF/screenshots in the README remain labelled as browser preview.3. They do not prove the new QR/quality UI. Earlier real Android-to-Mac evidence retains its specific device/version scope, not a claim of complete regression acceptance for this update.

Encoder compatibility risk

Static review found that preflight can accept one reported-compatible encoder while WebRTC may select another encoder with the same MIME type that does not support the same advanced settings. H.265 negotiation is not explicitly excluded, although capability preflight covers AVC/VP8. This is not an observed universal failure and does not invalidate the tablet Clear/Smooth results. Inspect actual receiver statistics on other devices; if setup fails, restart with Balanced/Smooth.

Safety and source

Use a trusted LAN. The active QR and temporary link grant access to the shared session; keep them private. HTML/signaling uses HTTP and media uses DTLS-SRTP. No cloud signaling, STUN/TURN or Internet traversal is added. Permitted playback capture is distinct from microphone recording; Browser mode does not record the microphone, bypass DRM or enable remote input.

The fixed com.mooncast.community package and public test signer are unchanged, with code55 increasing the version. The public certificate supplies update continuity, not publisher authenticity. Verify final APK/source assets against the release SHA256SUMS.

The QR dependency retains pinned ZXing source, POMs and Apache-2.0 notices, with offline source-build and pixel-decode checks. WebRTC still uses a pinned open-source prebuilt SDK: application source and fixed external source/DEPS fetch/build mappings are not a full offline SDK checkout, and the native WebRTC SDK has not been independently rebuilt. The application archive excludes the MoonCast app-signing PKCS12 fixture.

Assets / 附件

  • MoonCast-0.6.0-browser-preview.4-c093667-arm64-v8a.apk — SHA-256 9dc525677d74596d6c8c2010b671f2775eefffdd4fef15b0664245812545469e
  • MoonCast-0.6.0-browser-preview.4-c093667-armeabi-v7a.apk — SHA-256 4cd842b5d6cfbba18445ff3ef7790f22c3c5071883b9637d6fb6ea541e35962e
  • MoonCast-0.6.0-browser-preview.4-c093667-source.zip — SHA-256 b899a57c52cbf23a21a9b47ce3e53755adad50ce2f2320870c6bfdb0151cb786
  • MoonCast-browser-preview.4-abi-and-notices.zip

Use the final verified SHA256SUMS for archive checksums. No source-archive checksum is inferred from the APK hashes.
源码与配套清单哈希以最终验证的SHA256SUMS为准,不从APK哈希推断。

MoonCast 0.6.0

MoonCast 0.6.0 Pre-release
Pre-release

Choose a tag to compare

历史版本 / Historical release · 2026-10-12 · 手机与电视统一版 / unified phone and TV
原 APK 版本 / Original APK version: 0.6.0-browser-preview.3 (versionCode 54); original tag: browser-v0.6.0-preview.3.
仅整理展示名称,原附件、签名和链接未更改。下载当前 MoonCast 0.7。 / Display name standardized only; original assets, signatures and links are unchanged. Download current MoonCast 0.7.

MoonCast 0.6.0-browser-preview.3 · Browser receiver / 浏览器接收

VersionCode 54 · build 7a843a1 · package com.mooncast.community.

中文

新增:安卓画面直接进入浏览器

安卓端选择「浏览器」,开始共享并确认系统录屏;在同一可信局域网的 Mac Chrome 打开临时链接,点击连接即可观看。接收端无需安装应用或注册账号。页面提供中英文、显式开启声音、适应/填充、缩放、拖动平移、重置与全屏。只支持一个观看者,停止共享后旧链接无法访问。

播放音频默认关闭,开启后也只转发 Android 和源应用允许采集的内容,不录麦克风。浏览器模式没有自动去黑边、远程反控或熄屏功能;既有电视 Auto 与 GameStream/AirPlay 保持各自路径。

这次实际验证了什么

小米平板 8(Android 17 / API 37)安装 code 54 后,实际 MediaProjection 录屏与允许采集的测试应用音频,经正式 Android HTTP/WebRTC 路径送达 macOS Chrome 154.0.8037.99:

  • H.264 解码尺寸 1280×854;三秒内解码帧数 5→84。
  • 开启声音后,48 kHz Opus 解码样本 160,320→257,280,两秒内音频能量 0.000325059→0.013733485。
  • 适应/填充期间画面继续播放。正常停止后,MediaProjection 与浏览器连接关闭,旧 URL 无法访问。
  • README 的新 GIF 是上述真实链路的页面录制,画面为专用合成测试内容;GIF/WebM 没有音轨。code 54 的浏览器页面和关于页面来自真实平板截图。

没有进行扬声器听音或音画同步测量,也未验证旋转、单应用捕获、TCL/其他电视浏览器、iPhone 镜像或任意网络兼容。 合成测试内容不等于绕过 DRM,也不是个人内容录制。独立的浏览器合成发送端另有 12 项检查,其结果不冒充安卓捕获证据。准确范围

界面与修复

  • 新的轻量协议胶囊 Tab 与适合平板的居中布局;设备、语言、关于集中到标题栏设置。
  • 关于页读取实际安装版本、versionCode 与构建标识。
  • 修复角色菜单取消、返回或重选当前角色仍拆除当前页面/发送器/接收器的问题。
  • 保留原生 WebRTC 必需的 JNI Zero/JniInit 类,防止 release 缩减移除初始化入口。
  • 浏览器发送意外退出显示失败状态,并保留有界诊断;不伪装为正常停止。

安全、下载与升级

HTML/信令使用局域网 HTTP,媒体为 WebRTC DTLS-SRTP。完整随机临时链接可访问共享会话,应保密;HTTP 信令不抵御活跃局域网攻击者。无云信令、STUN/TURN、公网穿透或多人观看,不要求安装证书或关闭浏览器安全设置。网络/IP 改变后请停止并重开。

选择安卓系统对应 ABI:

  • MoonCast-0.6.0-browser-preview.3-7a843a1-arm64-v8a.apk
  • MoonCast-0.6.0-browser-preview.3-7a843a1-armeabi-v7a.apk

两架构均完成构建、签名及通知字节核验;本次实机测试仅覆盖 ARM64,ARMv7 未进行真机运行验收。

固定社区包名/证书未变,versionCode 从 51 增至 54。证书 SHA-256:290e4372fff33c00848758b12275936900b2eccad053dc63c18622e1a1222bb2。公开测试身份用于升级连续性,不能证明发布者身份;从可信 Release 下载并核对 SHA256SUMS。旧 0.5.0 仍需一次迁移,旧 Release 保留。

源码与 SDK 边界

源码附件:MoonCast-0.6.0-browser-preview.3-1b03a08-source.zip;配套清单:MoonCast-browser-preview.3-abi-and-notices.zip。运行 APK 为 7a843a1;标签/源码快照 1b03a08 补充文档、测试与源码锁定元数据,没有重新构建 APK。 提供 MoonCast 应用源码与构建说明,WebRTC SDK 固定源码/DEPS 坐标、获取与构建映射、原始许可证。不含完整离线 SDK 依赖 checkout,预编译原生 SDK 未独立重建。 SDK 为未修改的开源 io.github.webrtc-sdk:android:144.7559.15;完整映射见 browser-release-source.md 与 native/webrtc/SOURCE_LOCK.json。应用源码包排除 MoonCast 应用签名 PKCS12;上游测试证书不等于应用签名材料。

English

New: Android to a browser

Choose Browser on Android, start sharing and approve system capture. Open the temporary link in Mac Chrome on the same trusted LAN and select Connect. No receiver app or account is needed. English/Chinese controls include explicit sound activation, Fit/Fill, zoom, drag pan, reset and fullscreen. One viewer is supported; Stop makes the old link unavailable.

Playback audio is off by default and forwards only content Android and the source app permit. Microphone recording is disabled. Browser mode does not provide automatic black-bar detection, remote input or panel-off casting; existing TV Auto, GameStream and AirPlay retain their separate paths.

What was actually validated

Code 54 was installed on a Xiaomi Pad 8 (Android 17 / API 37). Actual MediaProjection capture and permitted playback from a dedicated test app reached macOS Chrome 154.0.8037.99 through the production Android HTTP/WebRTC path:

  • H.264 decoded at 1280×854, with decoded frames 5→84 over three seconds.
  • After the sound gesture, 48 kHz Opus decoded samples rose 160,320→257,280 and audio energy 0.000325059→0.013733485 over two seconds.
  • Video continued during Fit/Fill. Normal Android Stop ended capture, closed the browser peer and made the old URL unavailable.
  • The new README GIF records that real path with labelled synthetic Android content; its GIF/WebM has no audio track. Browser and About screenshots show the actual code-54 tablet UI.

Speaker listening, A/V synchronization, rotation, single-app capture, TCL/other TV browsers, iPhone mirroring and arbitrary networks were not validated. Synthetic content does not imply DRM bypass or recording of private content. A separate synthetic browser sender passed 12 checks; that fixture is not presented as Android-capture evidence. Exact scope

UI and fixes

  • Compact protocol selector and centered tablet layout; device/language/About move into title-bar settings.
  • About reads the installed version, versionCode and build identifier.
  • Fix role-menu Cancel, Back and current-role selection tearing down the active page/sender/receiver.
  • Preserve the native WebRTC SDK's required JNI Zero/JniInit classes in shrunk release builds.
  • Show unexpected browser-host exits as failures with bounded diagnostics rather than a normal Stop.

Security, downloads and upgrades

HTML/signaling uses LAN HTTP; media uses WebRTC DTLS-SRTP. The complete random temporary link grants session access and must be kept private; HTTP signaling does not authenticate against an active LAN attacker. There is no cloud signaling, STUN/TURN, Internet traversal or multi-viewer mode. No certificate installation or browser-security override is required. Restart after an IP/network change.

Choose the APK for the Android system's ABI:

  • MoonCast-0.6.0-browser-preview.3-7a843a1-arm64-v8a.apk
  • MoonCast-0.6.0-browser-preview.3-7a843a1-armeabi-v7a.apk

Both ABI packages passed build, signature and notice-byte checks. Physical-device evidence in this release is ARM64 only; ARMv7 was not run on a physical device.

The fixed community package/certificate is unchanged; versionCode increases from 51 to 54. Certificate SHA-256: 290e4372fff33c00848758b12275936900b2eccad053dc63c18622e1a1222bb2. This public test identity provides update continuity, not publisher authentication. Download from the trusted Release and verify SHA256SUMS. Historical 0.5.0 still requires a one-time migration; older releases remain available.

Source and SDK limits

Source asset: MoonCast-0.6.0-browser-preview.3-1b03a08-source.zip; companion: MoonCast-browser-preview.3-abi-and-notices.zip. Runtime APKs are build 7a843a1; tag/source snapshot 1b03a08 adds documentation, tests and source-lock metadata without rebuilding the APKs. The release supplies MoonCast application source/build instructions, pinned WebRTC SDK source/DEPS coordinates, fetch/build mappings and original notices. It excludes the full offline SDK dependency checkout; the prebuilt native SDK has not been independently rebuilt. The unmodified SDK is open-source io.github.webrtc-sdk:android:144.7559.15. See browser-release-source.md and native/webrtc/SOURCE_LOCK.json. The application source archive excludes the MoonCast app-signing PKCS12 fixture; upstream test certificates are distinct from app signing material.

MoonCast 0.3.0

MoonCast 0.3.0 Pre-release
Pre-release

Choose a tag to compare

历史版本 / Historical release · 2026-10-11 · 独立电视接收端 / standalone TV receiver
原 APK 版本 / Original APK version: 0.3.0-preview (versionCode 3); original tag: tv-v0.3.0-preview.3.1-ec1206540dcc.
仅整理展示名称,原附件、签名和链接未更改。下载当前 MoonCast 0.7。 / Display name standardized only; original assets, signatures and links are unchanged. Download current MoonCast 0.7.

MoonCast TV 0.3.0-preview preview

Standalone Android TV receiver (com.mooncast.tv), Android 8.0/API 26 or newer.
Source commit: ec1206540dcc32aa5231aa1543eb89fd3e3e782e.

Experimental, debug-key-signed preview. This runner's ephemeral signing key
can differ from earlier previews; Android may require uninstalling an older TV
preview before installation, which removes that app's saved preferences and
receiver pairing identity. A stable production upgrade/signing path is not configured.
The phone sender application has a separate package name.

v0.3 changes

  • Open the app and reception starts automatically. No PIN is requested; only
    use it on a trusted home LAN because other reachable devices can connect.

  • Redesigned TV home with clear remote focus and diagnostics in Advanced.
    Back during playback opens controls focused on Return to playback; Back
    again returns fullscreen. Crop-editor Back still cancels the edit.

  • DLNA search bursts and large valid MX values are handled with bounded
    response scheduling. This does not add Miracast/Google Cast system mirroring;
    see docs/tv-android-system-casting.md for platform/OEM limits.

  • Auto black-bar removal is the first-use default. Your chosen mode and manual
    adjustments are saved app-wide across sources/orientations. Detected video
    coordinates remain transient and are recalculated for each video/size.

  • Live remote framing over the visible picture: four independent 0–45% crop
    edges (at least 20% retained per dimension), 100–300% proportional zoom and
    horizontal/vertical position. Preview, save, cancel and full-image reset;
    one app-wide preference. Auto never forces a portrait image to fill the TV.

  • Conservative cinema crop supports wider borders and expands locked crops
    when repeated newly visible border content suggests captions or overlays.
    This remains a heuristic; manual crop can hide burned-in subtitles.

  • Actual Media3 PCM audio calibration, −500…+500 ms in 50 ms steps. Positive
    values insert silence; negative values discard leading audio. Applying
    recreates media playback. PCM-only processing disables encoded passthrough,
    offload and other bypass paths; some HDMI-only formats may no longer play.

  • Separate native AirPlay timing: movie defaults to 150 ms audio prebuffer
    with PTS-paced video; low latency defaults to adaptive audio buffering and
    immediate video output. Native signed audio offset is unavailable.

  • Disconnected-mirror recovery defaults to
    15 seconds only after observed control TCP closure and continued video
    silence; static/paused screens with open connections remain valid. Decoder
    stalls are checked separately. Not every Wi-Fi failure is detected in 15
    seconds, and the receiver cannot force phone reconnection.

  • Ordinary recovery keeps receiver identity. Only an explicitly confirmed
    global identity reset deletes the receiver key; there is no native paired
    device list or per-device revoke. This build does not request a PIN.

Verification and distribution

Required release gates: Java 17 debug/release builds, Android lint, portable
sender/receiver protocol, framing, session and PCM tests, the actual Media3
1.5.1 pipeline/sink check, native payload checks, APK signature and ZIP
alignment. This note lists the verification scope; it does not independently
attest a CI result. The packaging helper does not run those checks. The Gradle
JVM unit-test task has no src/test sources; host behavioral coverage is
from the portable test runners. CI also compiles the separate UI instrumentation
APK; compilation alone does not mean its Android tests ran. The scoped local
Android UI evidence and environment limitations are recorded in
docs/tv-ui-validation-v03.md; injected offline session navigation is not a
network playback or decoder test.
The corresponding-source archive includes retained native runtime source,
provenance and licenses. Pinned native source/binaries are unchanged, with
AirPlay/UxPlay GPLv3 obligations retained. SHA256SUMS covers the APK, source
and build metadata. Historical preview assets must not be overwritten.

No physical Android TV or iOS sender was exercised by this workflow. Real AirPlay
and DLNA interoperability, reconnect/stop behavior, audio/video synchronization,
decoder compatibility and sustained performance remain device-test requirements.
AirPlay support is experimental; protected/DRM playback and universal iOS/app
compatibility are not promised. Use only on a trusted local network.

See docs/tv-receiver.md in the source archive for setup and current limits.

MoonCast 0.2.0

MoonCast 0.2.0 Pre-release
Pre-release

Choose a tag to compare

历史版本 / Historical release · 2026-10-10 · 独立电视接收端 / standalone TV receiver
原 APK 版本 / Original APK version: 0.2.0-preview (versionCode 2); original tag: tv-v0.2.0-preview.2.1-87833d7ae544.
仅整理展示名称,原附件、签名和链接未更改。下载当前 MoonCast 0.7。 / Display name standardized only; original assets, signatures and links are unchanged. Download current MoonCast 0.7.

MoonCast TV 0.2.0-preview preview

Standalone Android TV receiver (com.mooncast.tv), Android 8.0/API 26 or newer.
Source commit: 87833d7ae544b9ab46aef82220bd85ec4c8f4838.

Experimental, debug-key-signed preview. This runner's ephemeral signing key
can differ from earlier previews; Android may require uninstalling an older TV
preview before installation, which removes that app's saved preferences and
receiver pairing identity. A stable production upgrade/signing path is not configured.
The phone sender application has a separate package name.

v0.2 changes

  • Live remote framing over the visible picture: four independent 0–45% crop
    edges (at least 20% retained per dimension), 100–300% proportional zoom and
    horizontal/vertical position. Preview, save, cancel and full-image reset;
    separate source/orientation profiles. Portrait defaults to full view.
  • Conservative cinema crop supports wider borders and expands locked crops
    when repeated newly visible border content suggests captions or overlays.
    This remains a heuristic; manual crop can hide burned-in subtitles.
  • Actual Media3 PCM audio calibration, −500…+500 ms in 50 ms steps. Positive
    values insert silence; negative values discard leading audio. Applying
    recreates media playback. PCM-only processing disables encoded passthrough,
    offload and other bypass paths; some HDMI-only formats may no longer play.
  • Separate native AirPlay timing: movie defaults to 150 ms audio prebuffer
    with PTS-paced video; low latency defaults to adaptive audio buffering and
    immediate video output. Native signed audio offset is unavailable.
  • PIN changes restart reception. Disconnected-mirror recovery defaults to
    15 seconds only after observed control TCP closure and continued video
    silence; static/paused screens with open connections remain valid. Decoder
    stalls are checked separately. Not every Wi-Fi failure is detected in 15
    seconds, and the receiver cannot force phone reconnection.
  • Ordinary recovery keeps receiver identity. Only an explicitly confirmed
    global identity reset deletes the receiver key; there is no native paired
    device list or per-device revoke. Native client PIN keys are memory-only.

Verification and distribution

Required release gates: Java 17 debug/release builds, Android lint, portable
sender/receiver protocol, framing, session and PCM tests, the actual Media3
1.5.1 pipeline/sink check, native payload checks, APK signature and ZIP
alignment. This note lists the verification scope; it does not independently
attest a CI result. The packaging helper does not run those checks. The Gradle
unit-test task has no separate Android test sources; behavioral coverage is
from the portable test runners.
The corresponding-source archive includes retained native runtime source,
provenance and licenses. Pinned native source/binaries are unchanged, with
AirPlay/UxPlay GPLv3 obligations retained. SHA256SUMS covers the APK, source
and build metadata. Historical preview assets must not be overwritten.

No physical Android TV or iOS sender was exercised by this workflow. Real AirPlay
and DLNA interoperability, reconnect/stop behavior, audio/video synchronization,
decoder compatibility and sustained performance remain device-test requirements.
AirPlay support is experimental; protected/DRM playback and universal iOS/app
compatibility are not promised. Use only on a trusted local network.

See docs/tv-receiver.md in the source archive for setup and current limits.

MoonCast 0.1.0

MoonCast 0.1.0 Pre-release
Pre-release

Choose a tag to compare

历史版本 / Historical release · 2026-10-10 · 独立电视接收端 / standalone TV receiver
原 APK 版本 / Original APK version: 0.1.0-preview (versionCode 1); original tag: tv-v0.1.0-preview.1.1-bb3ffe2f5c11.
仅整理展示名称,原附件、签名和链接未更改。下载当前 MoonCast 0.7。 / Display name standardized only; original assets, signatures and links are unchanged. Download current MoonCast 0.7.

MoonCast TV 0.1.0-preview preview

Standalone Android TV receiver (com.mooncast.tv), Android 8.0/API 26 or newer.
Source commit: bb3ffe2f5c118ce52eac66c19a6055c344237316.

Experimental, debug-key-signed preview. This runner's ephemeral signing key
can differ from earlier previews; Android may require uninstalling an older TV
preview before installation, which removes that app's saved preferences.
The phone sender application has a separate package name.

CI gates: debug/release builds, Android lint, portable sender/receiver tests,
native payload checks, APK signature and ZIP alignment. The Gradle unit-test
task has no separate Android test sources; behavioral coverage is from the
portable test runners.
The corresponding-source archive includes retained native runtime source,
provenance and licenses. SHA256SUMS covers the APK, source and build metadata.

No physical Android TV or iOS sender was exercised by this workflow. Real AirPlay
and DLNA interoperability, reconnect/stop behavior, audio/video synchronization,
decoder compatibility and sustained performance remain device-test requirements.
AirPlay support is experimental; protected/DRM playback and universal iOS/app
compatibility are not promised. Use only on a trusted local network.

See docs/tv-receiver.md in the source archive for setup and current limits.

MoonCast 0.3.1

MoonCast 0.3.1 Pre-release
Pre-release

Choose a tag to compare

@meta-tabchen meta-tabchen released this 08 Oct 14:50

历史版本 / Historical release · 2026-10-08 · 历史手机发送端 / legacy phone sender
原 APK 版本 / Original APK version: 0.3.1 (versionCode 9); original tag: v0.3.1.
仅整理展示名称,原附件、签名和链接未更改。下载当前 MoonCast 0.7。 / Display name standardized only; original assets, signatures and links are unchanged. Download current MoonCast 0.7.

MoonCast 0.3.1 fixes receiver disconnect/reconnect and a Stop button that could leave the phone showing a stale casting state.

Changes

  • Keep the Android screen-sharing grant and capture input alive after the last receiver leaves. Restart only the private native transport process, then attach the next encoder without asking for another capture grant.
  • In ordinary single-receiver mode, a new connection replaces the previous session while its disconnect timeout is pending. Show preparing-reconnection until the new transport listener is ready.
  • Handle Stop on a separate command looper with an independent four-second exit deadline; recover dead UI bindings and restore local media volume after host loss.
  • Preserve private pairing identities, optional audio/input paths and the experimental watch-party receiver cap. Native runtime binaries remain pinned and unchanged.

Install / 安装

Install MoonCast-0.3.1-preview.apk over the earlier preview. Android 8.0+ and a Surface-input hardware H.264 encoder are required. Use official Moonlight on the same trusted LAN.

Debug-key-signed release-variant preview, not production-signed. Screen mirroring remains lossy SDR H.264/HEVC; no HDR, AV1 or DRM capture support. Original-file playback is a separate no-transcode HTTP workflow.

手机保留共享授权;接收端断开后仅重建传输进程。单接收端模式支持新连接替换仍在退出的旧会话,已由用户真机确认立即重连一次成功、画面和声音正常。主动停止后再启动才重新申请共享授权。

Validation and limits

Local debug/release build, portable behavior tests, lint (0 errors, 29 warnings), twelve pinned native libraries across three ABIs, APK v2 signature and ZIP alignment pass. The physical Android 15 phone passes generated-content GPU zero-output/re-attach checks and lifecycle checks for stale UI recovery, normal Stop, blocked-main Stop, blocked-cleanup Stop and fresh-process restart. The user confirms picture/audio and first-attempt immediate reconnect with the existing receiver.

These are focused device checks and informal receiver acceptance, not a latency, thermal, lossless-quality or broad compatibility benchmark. The optional phone loopback suite did not complete its system-consent setup and is not counted as a passed integration suite. Root capture, full watch-party/audio, privileged input and physical panel-off behavior have no new complete real-device regression acceptance in this patch. Full native-core source rebuilding remains unverified.

Source and integrity

The corresponding source ZIP includes this app change, AIDL/native-process ownership, debug test sources, pinned native core/dependencies/licenses and session-bridge provenance. Debug client binaries, caches, signing keys and phone pairing identities are excluded. Check SHA256SUMS.

MoonCast 0.3.0

MoonCast 0.3.0 Pre-release
Pre-release

Choose a tag to compare

@meta-tabchen meta-tabchen released this 07 Oct 16:40

历史版本 / Historical release · 2026-10-07 · 历史手机发送端 / legacy phone sender
原 APK 版本 / Original APK version: 0.3.0 (versionCode 8); original tag: v0.3.0.
仅整理展示名称,原附件、签名和链接未更改。下载当前 MoonCast 0.7。 / Display name standardized only; original assets, signatures and links are unchanged. Download current MoonCast 0.7.

Turn an Android phone into a LAN host for existing Moonlight receivers, without a PC intermediary.

Seven additions

  1. Smart cinema: stable border acquisition, crop lock through controls/dark frames and explicit rescan. Four existing framing modes remain.
  2. Separate General/iPad/TV/computer preference profiles.
  3. Movie/Game/Power saver capture presets and live capture/network/thermal statistics.
  4. Android 14+ single-app capture, experimental Shizuku independent app display and optional Shizuku continuous touch/keys.
  5. Original-file cinema: tokenized LAN browser link, original bytes, seeking and immediate stop/replacement revocation. Separate from Moonlight playback.
  6. Experimental Watch party: up to three receivers sharing capture, individual disconnect, common framing/audio packet duration and input off.
  7. Experimental Root/Shizuku local panel-off casting: per-session opt-in, manual restore, owner cleanup and 30-second watchdog leases.

The UI now respects Android 15 system bars and has clearer disabled controls. File listener shutdown is synchronized and waits for blocked accept to finish.

Install / 安装

Download MoonCast-0.3.0-preview.apk. Android 8.0+ and a Surface-input hardware H.264 encoder are required. Use official Moonlight on the same trusted LAN. Original files use a compatible receiver browser; Shizuku must be installed/started/authorized separately.

Debug-key-signed release-variant preview, not production-signed. Screen mirroring is lossy SDR H.264/HEVC; no HDR, AV1, DRM capture or mathematical-losslessness claim. Single-app capture has no input mapping; independent display and Root capture currently send video only.

Validation and limits

Final clean-runner Android CI passes. Local debug/release builds, lint (release: 0 errors, 27 warnings), portable geometry/volume/statistics/HTTP/lease checks, twelve pinned native libraries across three ABIs, APK v2 signature and ZIP alignment pass.

Existing MuMu Android 15/12 emulators pass generated-content EGL fit/fill/paused/rotation/cinema/frame-limit tests, profile persistence, SAF original bytes/ranges/revocation, Shizuku independent-display pixels/input/release, Root input and panel API/lease recovery. Final APK installs and launches on both. English/Chinese primary pages were visually checked.

MuMu has no compatible hardware AVC encoder. GPU multi-output and survivor frames pass, but full simultaneous encode/transport/decode, individual native disconnect and shared audio remain real-device checks. Panel API invocation/recovery passes; physical phone panel effect, continued receiver playback and power savings are unmeasured. No new phone/iPad/TV interoperability or performance benchmark is claimed. Force-killing a privileged helper or system/driver failure can defeat software restoration; use the physical power button.

七项功能已分别开发、测试并提交;MuMu 支持的测试与 CI 通过。多人完整串流、真机熄屏和真实播放器/音频行为仍需实机验收。默认不启用反控、本地静音或熄屏;多人模式关闭反控。详见仓库中英文说明及逐项验证记录。

Source and integrity

The corresponding source ZIP includes app code, pinned native core/dependencies/licenses and separately compiled session-bridge source/binaries/provenance. Full native-core source rebuild remains unverified; the small session bridge has a three-ABI CI build. Optional debug test-core binaries, caches, keys and pairing identities are excluded. Check SHA256SUMS.

Thank you to Mirror, Sunshine, Moonlight, Shizuku, scrcpy and dependency maintainers. MoonCast is independent of upstream projects.