TV MediaPlayer 技术架构 — Android TV 全屏循环媒体播放器

2026年6月24日 智慧商业
TV MediaPlayer 技术架构 — Android TV 全屏循环媒体播放器

一、项目概述

悦居智能科技自主研发的TV MediaPlayer是一款面向 Android TV 设备的全屏循环媒体播放器,专为商业展示、数字标牌、企业宣传等场景设计。系统采用双通道管理架构:局域网内嵌 HTTP 服务(端口 9999)提供高速本地管理,云端 WebSocket 中继实现远程设备控制与媒体分发,两者互为保底,确保设备在任何网络条件下均可正常工作。

客户端基于 Kotlin + ExoPlayer Media3 开发,支持视频(MP4/MKV/AVI/MOV/WebM)、图片(JPG/PNG/GIF/WebP)、幻灯片(PPT 自动转 PNG 序列)三种媒体格式循环播放。服务端以 Node.js + WebSocket 构建云中继服务,部署于华为云 ECS,通过 Nginx 反向代理提供统一入口,搭配 PM2 进程守护保障 7×24 小时稳定运行。

Kotlin
Android TV 客户端
Node.js
云中继服务端
WebSocket
双向实时通信
ExoPlayer
视频解码引擎

二、系统整体架构

系统由三大模块组成:Android TV 客户端(App)、云中继服务器(Cloud Relay)、管理员浏览器端(Dashboard)。TV 设备通过 WebSocket 长连接实时上报状态并接收远程控制指令;管理员通过浏览器面板统一管理所有在线设备;局域网内则通过 TV 内嵌 HTTP 服务直接管理,无需依赖互联网。

                          ☁️ Internet
                             │
            ┌────────────────┼────────────────┐
            ▼                ▼                ▼
      ┌──────────┐    ┌──────────┐    ┌──────────┐
      │ 📺 TV-136 │    │ 📺 TV-137 │    │ 📺 TV-138 │
      │ Android  │    │ Android  │    │ Android  │
      │ WS 双向  │    │ WS 双向  │    │ WS 双向  │
      │ LAN:9999 │    │ LAN:9999 │    │ LAN:9999 │
      └────┬─────┘    └────┬─────┘    └────┬─────┘
           │               │               │
           └───────────────┼───────────────┘
                           │ WebSocket (双向, Auth: ANDROID_ID)
                           ▼
            ┌───────────────────────────────────┐
            │  🌐 Cloud Relay Server             │
            │  api.youth-community.com            │
            │  140.143.122.42                     │
            │  ┌─ WebSocket Hub (内 :4000)       │
            │  ├─ HTTP API (Nginx → :4000)      │
            │  ├─ File Storage (files/)          │
            │  ├─ LibreOffice PPT → PNG 转换     │
            │  └─ PM2: tv-relay                  │
            └──────────┬────────────────────────┘
                       │ HTTP/HTTPS (Nginx :80)
                       ▼
            ┌───────────────────────────────────┐
            │  🖥️ Admin Browser                   │
            │  api.youth-community.com/tv/        │
            └───────────────────────────────────┘

    ══════════════ 局域网保底方案 ══════════════
    🖥️ 浏览器 ──HTTP :9999──▶ 📺 TV 内嵌 MediaServer

架构亮点:即使互联网断开,管理员仍可在局域网内通过浏览器访问 TV 设备的 9999 端口完成所有管理操作,实现零依赖外网的本地自治能力。

三、核心组件详解

1. PlaybackEngine(播放引擎)

媒体播放调度核心,统一管理视频、图片、幻灯片三种媒体类型的切换逻辑。视频播放基于 ExoPlayer Media3 1.4.1,使用 TextureView 渲染,无控制器 UI 干扰;图片展示基于 Glide 4.16.0,定时器自动切换;幻灯片支持 PPT/PPTX 经 LibreOffice 转换后的 PNG 序列逐张播放。播放结束自动前进到下一个媒体项。

2. PlaylistManager(播放列表管理器)

负责扫描 filesDir/media/ 目录,自动识别视频(MP4/MKV/AVI/MOV/WebM/TS/M2TS)、图片(JPG/PNG/GIF/BMP/WebP)、幻灯片(slide_*.png 子目录)。支持三种播放模式:顺序播放随机播放单曲循环。图片默认展示时长为 300 秒(5 分钟),可远程配置。

3. MediaServer(内嵌 HTTP 服务)

基于纯 java.net.ServerSocket 实现,零外部依赖,约 727 行代码完成完整的 Web 管理功能。端口 9999,512KB 接收 / 256KB 发送缓冲区,TCP_NODELAY 优化。支持文件上传(流式 Multipart)、删除、播放控制、设置配置、全选管理、临时文件清理等完整 REST API。

4. CloudRelayClient(云端中继客户端)

基于 OkHttp 4.12.0 WebSocket 连接到云端中继服务器。使用 Android ANDROID_ID 作为设备唯一标识进行认证。每 10 秒上报设备状态(存储使用率、内存、当前播放状态、播放列表)。采用指数退避重连策略(5s → 10s → 20s → 40s → 80s → 120s),最多重试 5 次,确保设备始终在线。

5. Cloud Relay Server(云中继服务器)

Node.js + ws 库实现的 WebSocket Hub,部署于华为云 ECS(140.143.122.42),PM2 进程守护。负责设备连接管理、心跳监控、指令转发、文件存储与中转。集成 LibreOffice --headless 实现 PPT/PPTX 到 PNG 序列的自动转换,支持 6 种演示文稿格式。30 秒超时检测设备离线状态。

四、技术栈总览

层级 技术 版本 用途
TV AppKotlin1.9.24Android 原生开发语言
ExoPlayer Media31.4.1视频解码播放
Glide4.16.0图片加载与缓存
OkHttp4.12.0WebSocket + HTTP 文件下载
Coroutines1.7.3异步任务调度
CloudNode.js + ws^8.16.0WebSocket 中继服务器
LibreOfficePPT → PNG 幻灯片转换
InfraNginx + PM2反向代理 + 进程守护

五、核心数据流

📤 局域网文件上传

浏览器 POST /api/upload MediaServer.kt 流式写入 刷新播放列表 ✅

☁️ 云端远程上传

Dashboard 上传 server.js 存储文件 WebSocket 下发 upload 指令 TV HTTP GET 下载 → 刷新 ✅

📊 设备心跳上报(每 10 秒)

CloudRelayClient 定时通过 WebSocket 发送 heartbeat 消息,包含设备存储使用率、内存状态、当前播放项、播放列表长度。服务端更新内存状态并持久化到 devices.json,Dashboard 每 3 秒轮询一次展示最新数据。

🎮 云端远程控制

管理员在 Dashboard 点击播放/暂停/下一首等按钮 → POST /api/command → WebSocket 推送到目标 TV 设备 → CloudRelayClient 解析指令 → MainActivity 执行操作。支持的控制指令:play / pause / next / prev / stop / refresh / upload

六、API 端点清单

TV 内嵌 MediaServer(局域网端口 9999)

方法 路径 功能
GET/Web 管理页面
GET/api/files获取媒体文件列表
POST/api/uploadMultipart 文件上传
DEL/api/delete删除指定文件
POST/api/config图片展示时长配置

Cloud Relay 服务端(Nginx → :4000)

方法 路径 功能
GET/tv-relay/api/devices获取所有设备状态
POST/tv-relay/api/command发送控制指令到设备
WS/tv-relay/wsWebSocket 设备连接

七、部署配置

📱 TV App 安装:目标设备 TCL MT5879 CN(Android 11, 1920×1080),通过 ADB 或 U 盘安装 APK(app/build/outputs/apk/debug/app-debug.apk)。支持 BOOT_COMPLETED 广播自动启动,设备通电即进入播放状态。

🖥️ 服务端部署:华为云轻量应用服务器(140.143.122.42),PM2 进程管理(pm2 start server.js --name tv-relay),Nginx 反向代理 /tv-relay/ → localhost:4000,静态面板部署于 /var/www/tv-relay/dashboard.html。管理入口:api.youth-community.com/tv/

八、架构设计要点


📢 原创声明

本文为北京悦居智能科技中心原创技术文章,版权归本公司所有。
未经书面授权,禁止任何形式的转载、转发、摘编或复制
如需授权合作,请联系:halley62373@126.com

← 返回企业资讯