Skip to content

feat(tvos): add Apple TV playback support - #75

Merged
Shinokawa merged 2 commits into
mainfrom
AppleTv
Aug 3, 2026
Merged

feat(tvos): add Apple TV playback support#75
Shinokawa merged 2 commits into
mainfrom
AppleTv

Conversation

@MCDFsteve

Copy link
Copy Markdown
Contributor

Summary

  • add Rust target plumbing for Apple TV devices and simulators, including FFmpeg, dav1d, libass, bindgen, deployment-target, and native dependency builds
  • enable the Metal renderer, VideoToolbox decode path, AudioQueue output, subtitles, and presenter C ABI on tvOS
  • add the Flutter tvOS plugin, CocoaPods build integration, CAMetalLayer surface hosting, and Apple TV documentation
  • add a macOS CI job that builds the tvOS simulator static library
  • fall back to a one-byte range probe when a streaming server incorrectly reports Content-Length: 0 for HEAD

Motivation and impact

This makes Erika usable from Flutter-based Apple TV applications while keeping video rendering and playback timing in the native path. Existing platforms retain their current behavior. Streaming sources that synthesize an empty HEAD response can now report their actual media length through Content-Range instead of being treated as zero-byte media.

Validation

  • cargo fmt --all -- --check
  • cargo test -p xtask — 18 passed
  • flutter test in packages/erika_flutter — 42 passed
  • tvOS simulator erika_capi release staticlib built successfully with the same nightly build-std command used by CI
  • git diff --check
  • Ruby syntax check for the tvOS podspec
  • Swift syntax parse against the installed AppleTVSimulator SDK

Review notes

Standalone pod lib lint reaches the Xcode build but cannot resolve the Flutter module because the stock CocoaPods lint harness does not provide the flutter-tvos framework. The podspec intentionally expects that framework from the flutter-tvos host application.

@MCDFsteve
MCDFsteve marked this pull request as ready for review August 2, 2026 14:29
@Shinokawa
Shinokawa merged commit ca0d4eb into main Aug 3, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants