Files
AAAandPedro Antonio c18502fd18 feat: improve microphone, chat and platform support
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>
2026-10-04 16:21:01 +08:00

13 KiB

Naming And Copy

This is the naming convention for new and changed Piik code, UI and packaging. Use the brand for people and predictable lowercase identifiers for tools.

Voice And Terminology

Use the same role and action vocabulary in the App, Browser, website and guides. Role labels describe permission; a person's chosen nickname stays unchanged.

Meaning English Chinese
Person sharing and controlling the room Host 房主
Person watching Viewer 观众
Product capability Screen sharing 屏幕共享
Start sending a chosen screen/window Start sharing 开始分享
Enter another person's room Join a room 加入房间
Open the browser-provided screen/window/tab chooser Browser 浏览器
Site-wide access secret Site passphrase 站点口令
Room-specific access secret Room password 房间密码

The browser picker names a capture method, not a browser-tab-only source. Its short explanation includes screens, application windows and tabs; available choices remain owned by the browser and operating system.

Write each language for its own audience. Chinese headings and welcomes may sound like friends inviting each other: “叫朋友来一起看。” or “沙发给你留着呢。” Do not translate English sentence structure or possessive screen metaphors literally (“和朋友一起看你的屏幕”). Use familiar Chinese verbs and a light touch; forced memes, baby talk and repeated slogans quickly become tiring.

The brand line is “Share the good stuff.” in English and “来,看点好康的。” in Chinese. Display the Chinese headline on two lines: “来,看点” / “好康的。” Keep metadata and ordinary prose as the continuous sentence.

Keep the public brand line consistent in the homepage, film ending and README opening, beside a plain screen-sharing description. Scene titles should name the action or benefit; do not turn every section into another slogan. Games, drawings, photos and movie nights show the range of screen sharing without implying voice chat, shared input or synchronized playback controls. Each locale must read naturally as a complete sequence, without depending on a pun from the other language.

Set the register by the reader's task:

Surface Register
Website Light, everyday language in introductions and illustration captions; keep the current restraint
App and Web controls Direct feature and action names, including panel titles and settings; “聊天” / “Chat” rather than an invitation or joke
README A friendly introduction, followed by direct explanations of features, limits and first steps
Documentation index Clear topic names and short descriptions that help readers choose a guide
Deployment, configuration and maintenance guides Formal, precise instructions: prerequisites, actions, expected results and recovery steps

Formal means clear and factual, not bureaucratic. Keep detailed procedures free of jokes and promotional slogans; do not carry the website's playful headings into technical instructions.

State the requirement, action or result directly. Omit negative comparisons that answer an abandoned design or an internal discussion: “解压后运行” is enough; listing the runtimes a packaged App does not require adds no useful next step. Include an exclusion only when it resolves a real reader choice or limitation.

Write tutorials from an explicit starting point: what the reader needs, which visible action to take, and what appears next. Distinguish watching an invitation, creating an App room, using an existing site, and deploying a server. Say where the site or download comes from; “follow the prompts” cannot stand in for a missing prerequisite. Mark passwords and audio options as conditional when they are optional. Keep App and Server package names distinguishable at download links. Public platform notes say what has been tested and invite useful feedback; internal phrases such as “this phase's acceptance target” belong in status.

Present the public online site as a usable entry for real rooms and sharing. Offer the App download first and direct browser use alongside it; keep the site's P2P-only deployment conditions in its detailed guide.

Use progressive disclosure on the website and in the film:

Information layer Reader's question Content
First view: navigation, headings, feature cards, film titles What does it do, how do I start, what does it cost? Familiar actions and concrete benefits: “开箱即用”, “免费使用”, “朋友点开就能看”
Expanded details, supporting text and FAQ answers Will this work for me, and why? Platform/network conditions, explained technical terms and links to the relevant guide
README, wiki and operational guides How do I configure, verify or troubleshoot it? Exact action names, prerequisites, commands, configuration and evidence limits

The layer follows the reader's task, not font size alone. Keep material costs, availability and limitations beside the claim or action they qualify; do not hide them behind a collapse. Never promote an implementation mechanism such as encoding reuse or STUN as an unexplained headline. Explain technical terms on first use even in detailed documentation. Plain wording must preserve the original bounds: “开箱即用” does not promise offline use or guaranteed connection, and reduced repeated work does not establish a universal CPU saving. Lead performance copy with the user benefit (low latency, efficient sharing), then explain the supporting mechanism and its conditions. “Lowest latency”, “zero delay” and comparative resource savings require matching measurements; an architectural preference alone does not establish a benchmark result.

Write Chinese and English headings independently. Break lines at complete phrases, never inside a short action such as “画上两笔”. A decorative number must have an adjacent meaning/unit (“使用费用 0 元”), and its label must remain visible in both languages and at the smallest supported width. Check the actual rendered headline after rotation and animation settle: all meaningful words need room inside the frame. Oversized background lettering may crop; primary copy may not.

Download/availability labels, platform requirements, instructions, permission prompts, status and errors stay plain and specific. Use the exact visible action names in tutorials; a playful caption never replaces “Download”, “Join a room” or a platform/connection limitation. Explain what happened, what the user can do next, and any real limitation. Jokes belong in the welcome or illustration caption. Do not soften a failure into a joke, invent connection progress or promise guaranteed connectivity or absolute privacy. Screen sharing includes games, creative work and showing a useful discovery.

Playfulness belongs in optional welcome/waiting lines, empty-state captions and illustration reactions; it does not rename the control that performs the action. Operational pages omit introductory sentences that repeat their controls. Helper text should explain a meaningful choice or prevent an error.

Use short, contextual references in opening lines and illustration reactions. Waiting captions may invite a stretch or joke about the living room; they do not narrate fictional loading steps or replace the current operation's status. Prefer lasting expressions and genre conventions over current events or short-lived viral phrases; title decorations follow the same rule. A familiar expression may work when its ordinary meaning still makes sense to someone who does not recognize it. Keep each language independent and avoid long dialogue, borrowed brand slogans or a stream of unrelated memes. Match a celebration to a visible successful action; it must not precede the result. Keep reviewed pools local, without a quotation service. Playful pools may differ in content and length between languages. Their context and display lifecycle follow the shared policy; operational messages retain corresponding meanings and placeholders. The visual language owns where these lines appear.

Product And Tool Names

Surface Convention Example
Product and repository Piik TNTcraftHIM/Piik
Standalone application Piik App Window title, documentation, shortcuts
Hosted service in prose Piik Server Deployment instructions
Executables and command directories Lowercase, hyphen-separated piik-app[.exe], piik-server[.exe], cmd/piik-app
Native capture executable Lowercase component name piik-capture[.exe]
App download archives Lowercase, fixed target name within each release piik-app-windows-amd64.zip
Package/build directory names Lowercase and target suffix piik-app-windows-amd64
macOS application bundle Display name, standard extension Piik App.app
Linux desktop entry Lowercase file/Exec, display Name piik-app.desktop, Exec=piik-app, Name=Piik App
Package and service identifiers Lowercase npm piik, systemd piik.service, tv.piik.app
Environment variables Uppercase snake case PIIK_DEBUG, PIIK_LOG_DIR
Go module path Exact repository spelling github.com/TNTcraftHIM/Piik

Use the same lowercase binary names across platforms for predictable commands. Piik App.app is the user-facing macOS bundle. The packager owns archive contents and directory layout. Keep platform/standard spellings such as Info.plist, LICENSE, README.md and REVISION. Do not change third-party names or notices to fit this table. Immutable measurement records keep the paths and hashes of their measured revision; they are evidence rather than current command examples.

Code ownership and vocabulary

The engineering module map owns directory responsibilities. HTTP/WebSocket clients, signaling clientId, protocol clients and similar connection roles remain client; they do not name the standalone App.

Build commands, workflow jobs, packaging helpers, messages and local variables that mean the standalone executable use App; hosted packages use Server, and browser assets use Web or Browser UI. Follow the subject through its callers before renaming an ambiguous client or application. Public storage, wire and environment identifiers retain their compatibility contract; list those exceptions at their owner instead of globally replacing the word.

  • Follow each language's semantics: lowercase Go packages, exported PascalCase and unexported camelCase; existing TypeScript component/type conventions. Brand casing must not change visibility or create unnecessary name prefixes.

Renaming the standalone product is not a protocol or persistence change. Keep discovery, wire and stored identifiers at their current contracts. Their change rules belong to versioning; do not add aliases or dual readers merely for a display rename.

Basis

Content layering reviewed 2026-09-12: NN/g's progressive disclosure defers secondary detail while preserving the primary task; GOV.UK's clear-language guidance keeps specialist content understandable. The layer assignments and Chinese examples above are Piik's application of those principles. NN/g's microcopy guidance puts clarity before concision and character; this also guides the balance between Piik's playful introductions and factual instructions.

Reviewed 2026-09-10. Desktop standards explicitly separate display names from executable identifiers; lowercase executable names are our portability convention.