Repository navigation
Conversation
|
Merged current main into this branch. The #992 squash is now an ancestor, so the diff against main is Live TV only. Two Russian strings were needed for the new Live TV keys, or the build fails: The replay fixtures are not re-recorded yet and the fxlanes question is still open, so the PR stays a draft. |
|
Merged current main and re-recorded the three replay anchors on a Mac ( That should leave How would you like it: a page-request lane the Dispatcher drains for Live TV, or should Live TV wait for the migration that takes the Watchlist page off its ledger line? I'll follow whichever you prefer. |
|
Merged current
|
A channel row on Home and a TV tab whose page is a grid of channel covers (the guide's logos through the server's photo transcoder) with what is on now. OK tunes the channel and direct-plays the server's recording of it; leaving the player, or the app going to the background, sends the `stopped` that frees the server's tuner. - Reads (plex/src/plex/livetv.rs, docs/pms-api.md §10): /livetv/dvrs, the DVR's lineup and the guide grid bounded to now. - Watching follows the official LG client's sequence: tune with the playback session id, universal decision (hasMDE=1, HLS/MPEG-TS target), the session's media playlist at the edge; stopped&continuing=0 ends it. - HLS reader for a live recording (media/src/ff.rs): segments are cuts of one stream; playback starts 3 s behind the edge. Library HLS unchanged. - UI: screens/src/livetv.rs, a TV tab on the shared strip, locale strings (ru, pl drafted without a native reviewer). - Replay anchors 1, 6 and 12 re-recorded on a Mac for the new screen shape. Squashed from the contrib/opus-live-tv history onto current main; the tree is identical to the reviewed branch head. Signed-off-by: Dr-Amp <dr_amp@users.noreply.github.com>
db066a9 to
0819d50
Compare
|
@GLinnik21 this one has been waiting on a single call from you since Monday. Could you pick one?
A one-word answer is enough; I'll do the work. If I don't hear otherwise by Friday, I'll go ahead with 1 so you have something concrete to review. Everything else on my side is done: the branch is now one signed-off commit on current |
Watch a server's Live TV channels from the app: a channel row on Home and a TV tab whose page is a grid of channel covers (the guide's logos, fetched through the server's photo transcoder) with what is on now. OK tunes the channel and direct-plays the server's recording of it; leaving the player, or the app going to the background, sends the
stoppedthat frees the server's tuner.Built and used against PMS 1.43.3 with one DVR backed by ErsatzTV (HDHomeRun protocol) and an XMLTV guide. Opening as a draft: one gate below needs your decision.
What it does
plex/src/plex/livetv.rs,docs/pms-api.md§10):/livetv/dvrs, the DVR's lineup and the guide grid bounded to now. Only DVRs with a tuner the server last sawaliveand a well-formed provider id get a row; the tune path accepts one DVR and one channel segment, nothing else.POST …/tunewith the playback session id → universal decision for the session (hasMDE=1,Generic+ an HLS/MPEG-TS target, so PMS answers direct play) → the session's own media playlist at the edge (offset=-1). The timeline reports under the live session;stopped&continuing=0ends the recording. A tune whose plan is abandoned or refused still stops its session.media/src/ff.rs): the entry may be a media playlist with no master; segments are cuts of one stream, so a segment without SPS/PPS or an IDR continues from the previous one of the same playlist (scoped to its directory); playback starts 3 s behind the edge and polls every 500 ms. Library HLS keeps its behaviour (live: false). Seeks are refused on a live channel.screens/src/livetv.rs(6-column grid of 2:3 covers, OK tunes, BACK → Home), aTVtab on the shared strip (the longer label overflowedGLASS_TRACK_MAXand lost the glass),HomeTab::LiveTv/AppArg::LiveTv, locale strings.One signed-off commit on current
main(squashed from the working history, same tree).Why draft
fxlanes(check-deps). The page's requests leave asAppFx::LiveTvand the bridge parks them on a side queue drained bycontent::livetv_requests— the Watchlist page's pattern, written before Sans-IO baseline: make check ledgers that freeze IO in logic #971 froze that ledger. The gate correctly refuses the new site. Which machine should own these (tune, tab, account, back) on the ordered FIFO? I'll move them once you say how you want it; I did not want to guess a design for the Sans-IO series.Replay fixtures — done. The Live TV screen moved the state shape (
SCREEN_SHAPES_PINnow0x54a0_99c6_78cc_98c9).1-boot-home-chip-grid,6-settings-familyand12-filmography-detail-returnwere re-recorded on a Mac (120 Hz display, 350 ms key interval) and installed withplxnative-rec rerecord, anchors retained; the closed alphabet gains the strip'sTVlabel. Seetests/fixtures/replay/README.md.Binary size budget. Live TV adds 131,120 bytes to the stripped ARM binary (15,275,256 against main's 15,144,136;
binary_byteslimit 15,180,000). I'll raise it in this PR with the justification once thefxlanesshape is settled, since that changes the code being measured, or rebase onto a re-baseline if you'd rather do that onmain.Verification
Host: CachyOS x86_64, pinned toolchain 1.99.1, on
17dc0a22(maina2b7bb33merged in):make check-nodef: pass.check-cargo-lint(clippy): pass.check-cargo-unit-defaultandcheck-cargo-unit-hostsim: every crate passes exceptplx_media's twocurlio::keymode_tests(media_key_mode_never_reuses_a_kept_alive_connection,media_seeks_and_reopens_in_key_mode_each_do_their_own_handshake), which also fail on this host (libcurl 8.22) on unmodified maine843b99fand pass in CI.ci/check-deps.sh: one failed gate,fxlanes(above).make sim-macos, thentests/replay_fixtures.py --window 960x540:3 fixtures, 6 replays, 0 failures,verdict=SAMEwith every counter zero, on three consecutive runs.Device: LG C5, webOS 10.3, PMS 1.43.3 + ErsatzTV, on the pre-merge branch (builds of 2026-10-21): tune → direct play of the session with picture and sound (a 42 s log held 950–1050‰ after the start), an abandoned plan's stop freed the tuner (
livetv: abandoned session stopped ok=1), and the TV tab showed the channel covers. Not verified on the panel: the stop on going to the background (needs the Home button), and anything after merging main.Not in scope: DVR recording, the guide grid, channel changing inside the player.
Signed-off-by: Dr-Amp dr_amp@users.noreply.github.com