This release adds microphone processing controls and local chat controls, expands platform packages, and synchronizes the website and guides. It also fixes native H.264 input/format handling, signaling recovery, fresh STUN discovery, and UDP ownership during overlapping connections. This is **v1.8.0**. Browser/Server v23, Native control v9 and capture v7 remain unchanged, with the existing 1440p ceiling. Additional resolutions, capability negotiation and Magicsock are separate follow-up work. ## Validation - Full local Web check: 79 files / 1,317 tests, TypeScript and production build. - Full Go checks, platform builds and Windows native capture regressions/probe. - Native H.264 Host lifecycle, Browser-to-App fanout and App-exit recovery, and Native H.264 through embedded SFU: all passed with owned process/port/profile cleanup. - Website build, documentation and repository hygiene passed. Existing UI acceptance covers narrow screens, both languages/themes, architecture downloads and all 23 film checks; final packaging and Go race checks run on the merged revision in CI. - Physical macOS/Linux capture, representative public networks and unmatched field reports retain their documented evidence limits. No claim that every blur/disconnection report is resolved. ## Release notes ### 中文 这是一次功能与兼容性更新:麦克风和聊天增加了实用的小选项,App 与 Server 支持更多设备,同时修复了原生分享和连接恢复中的若干问题。现有 1.x 协议保持不变。 #### 新增与改进 - 浏览器麦克风新增「降噪与回声消除」开关,默认开启回声消除、降噪和自动增益;分享音乐或使用虚拟音频输入时,可按需关闭。 - 可调整弹幕字号和透明度,并将当前保留的聊天记录导出为 TXT。当前会话最多保留 1,000 条文字消息,刷新页面后清空;需要保存时请先导出。 - 新增 Intel Mac、Linux ARM64 App,以及 Linux ARM64 Server 和容器镜像。官网下载区可直接选择对应架构,并显示最新版本和发布时间。 - 更新官网演示、README 截图和中英文教程,明确浏览器分享也可选择窗口或屏幕;开始分享前显示房间号占位,保持底栏控件位置稳定。 - 官网新增直达问题排查的入口,补充浏览器 WebRTC 限制、校园网和 Windows 显卡相关的排查步骤。 - App 模式选择页显示免费开源说明、作者与贡献者署名,以及官方网站和源码链接。 #### 修复 - 修正部分 H.264 原生分享的格式兼容性校验,以及 Windows 编码器输入长度和输出缓冲区对齐问题。 - 清理已失效的重连任务和 Native 接收信令,避免旧连接继续影响当前会话。 - 修复 App 重连时可能复用过期公网地址的问题;重新探测使用当前地址,并处理探测丢包和过期响应,保留其他正常连接。 - 修复 App 新旧媒体连接重叠时共用端口造成的冲突,避免准备或撤销新连接打断仍在使用的画面;关闭连接时及时取消未完成的端口映射请求。 - 无站点密码时,连接恢复不再误引导用户输入站点密码。 - 房间失效或会话终止时,开播前后的原因提示统一显示在电视状态图标中,避免额外提示条。 - 修正 Linux 原生采集的时间戳与关键帧时间基准。感谢 Pedro Antonio 在 [#449](https://github.com/TNTcraftHIM/Piik/pull/449) 的贡献。 #### 使用说明 下载对应平台的完整压缩包,退出旧 App 后解压使用。Windows 继续提供 x64;macOS 提供 Apple 芯片与 Intel 版本,原生采集需要 macOS 13 或更新版本。Linux 提供 x64 与 ARM64,原生采集还需安装[系统组件](https://github.com/TNTcraftHIM/Piik/blob/main/native/capture/linux/README.md)。macOS 和 Linux 的实机覆盖仍有限,欢迎反馈。 ### English This update adds useful microphone and chat controls, brings Piik to more devices, and fixes several native-sharing and connection-recovery issues. The existing 1.x protocols remain unchanged. #### New and improved - Browser microphones now have a “Noise & echo reduction” toggle. Echo cancellation, noise suppression and automatic gain control are on by default; turn them off when appropriate for music or virtual audio inputs. - Adjust chat-overlay text size and opacity, and export retained messages as TXT. The current session keeps up to 1,000 text messages and clears on page refresh; export first if you want to keep them. - Added Intel Mac and Linux ARM64 App packages, plus Linux ARM64 Server and container images. The website provides architecture selectors and shows the latest release and publication date. - Updated the website demonstration, README screenshots and bilingual guides, clarifying that browser capture can also select windows or screens. A room-code placeholder keeps the bottom bar stable before sharing starts. - Added direct website links to troubleshooting, with steps for browser WebRTC restrictions, campus networks and Windows graphics issues. - The App mode-selection page now shows its free and open-source status, author and contributor credit, and links to the official website and source. #### Fixes - Corrected H.264 format compatibility checks and Windows encoder input-length and output-buffer alignment handling. - Retired stale reconnect tasks and Native receive signals so they cannot continue affecting the current session. - Fixed App reconnection reusing an expired public address. Fresh discovery handles lost probes and stale responses while preserving other working connections. - Fixed UDP socket conflicts between overlapping App media connections so preparing or canceling a replacement preserves the active picture. Closing a connection now cancels unfinished gateway mapping requests. - Connection recovery on passwordless sites no longer incorrectly asks for a site passphrase. - Expired-room and session-termination reasons now use the same TV status indicator before and during sharing, without an extra notice strip. - Corrected Linux native capture timestamps and keyframe time bases. Thanks to Pedro Antonio for [#449](https://github.com/TNTcraftHIM/Piik/pull/449). #### Updating Download the complete archive for your platform, quit the old App, and extract the new package. Windows remains x64-only. macOS packages support Apple silicon and Intel; native capture requires macOS 13 or newer. Linux supports x64 and ARM64 and requires additional [system components](https://github.com/TNTcraftHIM/Piik/blob/main/native/capture/linux/README.md) for native capture. Physical-device coverage on macOS and Linux remains limited; feedback is welcome. ## Attribution Co-authored-by: Pedro Antonio <wrenchwastaken@gmail.com>
134 lines
7.9 KiB
Markdown
134 lines
7.9 KiB
Markdown
# GitHub Repository And Releases
|
|
|
|
[Versioning](../standards/versioning.md) owns release meaning and compatibility;
|
|
[CONTRIBUTING](../../CONTRIBUTING.md) owns review and local validation. This file
|
|
owns the one-time GitHub settings. The source repository is public; automatic
|
|
package publication has its own activation gate below.
|
|
|
|
## Main And Pull Requests
|
|
|
|
Use squash merging only, with the PR title and body as the squash commit. These
|
|
repository settings are applied. Keep automatic branch deletion off: the normal
|
|
cleanup step checks local worktrees and remaining references first.
|
|
|
|
Protect `main` with PRs required, zero mandatory peer approvals for the solo
|
|
maintainer, administrator enforcement, linear history, and no force pushes or
|
|
deletions. PRs run the read-only release-note check; ordinary branch pushes stay
|
|
quiet. Local validation and acceptance precede the squash merge, and required
|
|
check settings remain a repository-owner decision. PR/issue
|
|
templates live in `.github/`; [naming](../../CONTRIBUTING.md#commit-pr-and-branch-names)
|
|
is shared with automatic version selection.
|
|
|
|
These protections are active, including conversation resolution. GitHub Pages
|
|
uses the **GitHub Actions** publishing source and the `piik.tv` custom domain;
|
|
the repository homepage points to `https://piik.tv`. The dedicated Website
|
|
workflow publishes the static site under [website operations](./website.md).
|
|
|
|
## Enable Automatic Publication Once
|
|
|
|
Before enabling, accept the release packages, compatibility baseline, public
|
|
copy and repository visibility; finish main protection. Then set repository
|
|
Actions variable `PIIK_RELEASES_ENABLED` to `true`. This is a repository setting,
|
|
not an environment variable for Piik App or Server.
|
|
|
|
Subsequent accepted PRs merged to main use the existing CI workflow. Product
|
|
changes calculate one version, validate, package Server and all App targets,
|
|
and publish the same artifacts. Standalone website/docs changes validate without
|
|
packaging or releasing; [versioning](../standards/versioning.md#automatic-publication)
|
|
owns that boundary. Runs queue rather than overlap or cancel one another. PRs
|
|
validate release notes without packaging or publication; manual `app_checks`
|
|
dispatch remains available for candidates.
|
|
Writing a new version back to main is unnecessary and prohibited.
|
|
|
|
For a complete publisher rehearsal, dispatch with `app_checks: true` and an
|
|
explicit `candidate_version` such as `v1.0.0`. This builds genuine Server and
|
|
native App artifacts under one revision and version without tagging or
|
|
publishing. Prepare its [release-note section](../standards/versioning.md#release-notes)
|
|
and inspect the generated preview in the run summary. For a local preview, run
|
|
`node scripts/release-notes.mjs v1.0.0 FULL_SOURCE_SHA` from the checkout with
|
|
full history and tags. Download that run's artifacts and pass their directory, version and
|
|
full revision to `scripts/publish-release.mjs --dry-run` (put the flag after
|
|
the three positional arguments). An omitted candidate version keeps the usual
|
|
development/exact-tag identity.
|
|
|
|
Enable GitHub's built-in release immutability for formal publication where
|
|
available. Upload all assets to the draft before publishing. A failed upload can
|
|
resume its same-source draft; a published version is never clobbered. If its
|
|
files are wrong or incomplete, publish a corrected new version. An older retry
|
|
must not replace a newer release's `latest` designation.
|
|
|
|
To stop future automatic publication, remove/set false the activation variable;
|
|
this does not alter existing releases or a currently running workflow. Inspect
|
|
the active run separately. No pipeline step changes visibility or installs an
|
|
update into a running Piik deployment.
|
|
|
|
## Container Registry
|
|
|
|
The Server image uses `ghcr.io/tntcrafthim/piik`. The publishing job authenticates
|
|
with `GITHUB_TOKEN` and `packages: write`; no additional registry secret is needed.
|
|
The image's source label links it to this repository. GitHub's
|
|
[Container registry guide](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry)
|
|
owns the registry permission and visibility behavior.
|
|
|
|
At first publication, set the Piik container package's visibility to **public**
|
|
in its GitHub package settings; repository visibility alone does not do this.
|
|
Verify both its version tag and `latest` with an anonymous pull before announcing
|
|
the Docker download. Keep repository Actions access enabled for later releases.
|
|
Image checks, version identity and retries follow
|
|
[container distribution](../standards/versioning.md#container-distribution).
|
|
|
|
## Gitee Download Mirror
|
|
|
|
[TNTcraftHIM/Piik](https://gitee.com/TNTcraftHIM/Piik) is a public README/Release
|
|
mirror. Source, documentation and issues stay on GitHub. The publishing job uses
|
|
the repository Actions secret `GITEE_TOKEN`, which is configured; rotate it there
|
|
when needed. Never put it in source, a remote URL or a distributed package.
|
|
GitHub publication continues to use the workflow's scoped token.
|
|
|
|
After GitHub publication, the same job runs `scripts/mirror-release.mjs` on the
|
|
original artifacts. Upload failure leaves the Gitee release marked as a preview.
|
|
Rerun the failed publishing job to verify existing files and upload only missing
|
|
ones. GitHub's published release remains unchanged. Both publishers reject
|
|
changing a published package; use a corrected new version if its bytes are wrong.
|
|
|
|
For a local retry, use the release revision's scripts and original complete build
|
|
output retained outside the checkout. Earlier versions can have a different
|
|
package set. While the publishing run's artifacts are available, download all packages
|
|
into one directory (replace `RUN_ID`, `FULL_SOURCE_SHA` and `VERSION`):
|
|
|
|
```sh
|
|
for artifact in piik-server piik-server-linux-arm64 piik-app-windows-amd64 piik-app-linux-amd64 piik-app-linux-arm64 piik-app-darwin-arm64 piik-app-darwin-amd64; do
|
|
gh run download RUN_ID --repo TNTcraftHIM/Piik \
|
|
--name "$artifact-FULL_SOURCE_SHA" --dir /tmp/piik-mirror
|
|
done
|
|
node scripts/mirror-release.mjs /tmp/piik-mirror VERSION FULL_SOURCE_SHA
|
|
```
|
|
|
|
Use a fresh directory. Public Release downloads contain only runtime archives;
|
|
mirror verification also needs the original descriptors, manifest and checksum
|
|
files. If CI artifacts have expired, recover that complete output from the
|
|
operator's retained copy. Rebuilding a published version is not a metadata
|
|
recovery procedure. See [artifact retention](../deployment.md#build-host).
|
|
|
|
Use the release's actual version and full `target_commitish` SHA, with
|
|
`GITEE_TOKEN` supplied through the publisher environment. `--dry-run` after the
|
|
three arguments checks local identity, checksums and attachment sizes without
|
|
publishing. The [release-source policy](../standards/versioning.md#release-sources)
|
|
owns provenance, selection and quota limits. The first public release passed
|
|
complete matching mirror download acceptance for every Server and App package.
|
|
|
|
Release postflight applies the [two-version mirror retention policy](../standards/versioning.md#release-sources).
|
|
After verifying the latest mirror and its fallback against GitHub, inventory
|
|
older releases with `/releases/{id}/attach_files`, verify their GitHub originals,
|
|
then remove only the reviewed attachments through
|
|
`DELETE /releases/{id}/attach_files/{attachment_id}`. Recheck both retained
|
|
versions and the anonymous `download/latest` links afterward. Keep deletion
|
|
inventories and verification results with operator release records, not source
|
|
history. The upload script does not itself delete older attachments.
|
|
|
|
## Platform References
|
|
|
|
- [Protected branch availability](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches)
|
|
- [Workflow concurrency and queued runs](https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#example-queueing-multiple-pending-runs)
|
|
- [Immutable release workflow](https://docs.github.com/en/code-security/concepts/supply-chain-security/immutable-releases)
|