mobile: both modes use the branded .pjs player

Replace the split mobile UI (live = round pause button, archive = native
<video controls>) with one branded player for both modes, ported from the
desktop ArchivePlayer (.pjs) and kept self-contained in the mobile bundle
so the live desktop is untouched.

- Live: branded player with pause/play + fullscreen only (no seekbar).
- Archive: branded player with full seek (transcode virtual timeline,
  seek = restart transcode with -ss) + playback speed (0.5/1/2/5x).
- H.264 server transcode path unchanged; touch-friendly always-on bar.

Verified end-to-end on .79: live.mp4 200 video/mp4, play.mp4 200,
duration_s present for the seek timeline.

VERSION 0.0.153 -> 0.0.154

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-02 00:08:55 +05:00
parent cfb125784d
commit 6f9142a795
4 changed files with 202 additions and 97 deletions
+4 -14
View File
@@ -22,33 +22,23 @@
<button class="m-nav" data-view="arch"><span class="i">🗄</span>Архив</button>
</aside>
<!-- LIVE: одна камера + выбор камеры + pause/play -->
<!-- LIVE: одна камера + выбор камеры (плеер только пауза/плей) -->
<section class="m-view" id="view-live">
<div class="m-bar">
<select id="m-live-cam" class="m-sel" title="Камера"></select>
</div>
<div class="m-player" id="m-live-player">
<video id="m-live-video" playsinline muted autoplay></video>
<div class="m-hint" id="m-live-hint">Нет камер</div>
</div>
<div class="m-ctrl">
<button class="m-cbtn" id="m-live-toggle" title="Пауза / воспроизведение"></button>
</div>
<div class="m-stage"><div class="player-wrap" id="m-live-box"></div></div>
</section>
<!-- АРХИВ: камера + дата + список записей -->
<!-- АРХИВ: камера + дата + список записей (плеер с перемоткой) -->
<section class="m-view" id="view-arch" hidden>
<div class="m-bar">
<select id="m-arch-cam" class="m-sel" title="Камера"></select>
<input type="date" id="m-arch-date" class="m-date" title="Дата">
</div>
<div class="m-player">
<video id="m-arch-video" playsinline controls></video>
<div class="m-hint" id="m-arch-hint">Выберите запись ниже</div>
</div>
<div class="m-stage"><div class="player-wrap" id="m-arch-box"></div></div>
<div class="m-seglist" id="m-seglist"></div>
</section>
</div>
<script src="/static/mobile.js"></script>
</body>