Skip to content

About

开源网页电视

Resources

Stars

428 stars

Watchers

4 watching

Forks

Latest commit

 

History

122 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

nTv

原创代码采用 GPLv3(GPL-3.0-only)。Copyright (C) 2026 buhanzhe and contributors. 再分发应保留版权与许可说明、标明修改,并提供对应版本的完整对应源码;允许合规商用。 个人使用、作者权益和含私有子模块版本的源码义务见 版权与使用说明。

English · Linux.do · 恩山论坛

内测QQ群: 1121401707 (更快的bug响应和修复包)

nTv 是一款面向 Android 电视、电视盒子、平板和手机的横屏直播播放器,重点优化遥控器操作、老旧设备兼容性和央视直播稳定性。

主要功能

  • 内置央视网、央视频等直播频道,并支持多线路自动选择。
  • 支持最高、适中、最低三档清晰度;只有一路时直接播放。
  • 提供稳定、适中、低延迟三档直播模式。
  • 使用 IJK 播放器,支持硬件解码、自动选择解码器和兼容软解。
  • 支持自适应画面比例和全屏拉伸。
  • 视频正常播完后显示“播放完成”和重播控制,切换主题使用相同播放器控件。当前视频已下载内容可通过磁盘缓存供重播复用,换台或退出时清除;缓存上限 512MiB,不预先下载整个视频。可用存储低于 400MiB、单次写入达到 250ms、连续写入低于约 1MiB/s、写入积压或磁盘错误时停止缓存,播放继续走网络。
  • 支持遥控器、触摸屏、网页遥控器和手机飞鼠。
  • 支持多标签网页、收藏栏、广告拦截和多个命名用户脚本。
  • 网页标签栏右上角可开启遮罩,隐藏网页画面并显示网址和加载状态;点击“显示网页”或按返回键恢复,网页与视频解析继续运行。
  • 网页管理 → 浏览器配置普通32位、64位和x86包使用系统 WebView;仅32位 ntv_bro 浏览器版携带轻量内核,可切换系统 WebView。浏览器版在 Android 5.0 以下默认轻量内核,5.0 及以上默认 WebView;保留用户已保存的选择。轻量内核的 DOM 和首次 UJS 就绪后 10 秒仍未嗅探到媒体时,在同一页面开启最高 1fps 绘制,不重载、不重复执行 UJS;后续发现媒体继续交给原生播放器。
  • 网页遮罩默认关闭,支持加载信息和纯黑样式。遮罩仅覆盖画面,不改变 WebView 可见性、暂停状态或网络/脚本生命周期,也不主动抢走网页焦点。纯黑遮罩点击画面或按确定、返回可显示网页,兼容旧版独立网页进程。
  • 主题右侧菜单 → 网页配置可用遥控器选择分辨率、网页遮罩、极简模式、浏览器 UA、版本标识、网页缩放、网页内核、加载图片和嗅探播放。与网页管理共用设置和保存接口,遮罩三档一次保存,返回恢复父菜单位置。
  • 支持接收投屏、接管会话、遥控回传及独立鼠标指针渲染。
  • 支持 M3U、M3U8、TXT 在线频道列表。
  • 可显示时间、日期、网速和播放调试信息。“播放与显示 → 显示播放进度”默认关闭,开启后在右上角显示播放位置与总时长,与时间并排;直播和纯音频不显示。网速固定在右下角,调试信息避让并可换行,网址的查询参数省略。
  • 支持开机自启动、在线更新和异常自动恢复。
  • 最低支持 Android 4.0。

公开版范围

本仓库保留播放器、浏览器、网页管理及投屏接收端。投屏发送端的画面采集、编码、RTSP 推流、后台采集服务和发送入口不在公开版中;完整发送端继续由独立私有项目维护。

公开版仍兼容接收协议与独立光标通道。拆分边界和验证方式见 接收端说明。

下载与安装

下载 APK 后直接安装即可。升级时建议直接覆盖安装,以保留频道和偏好设置。

Android 8.0 及以上系统如果阻止安装,请根据系统提示,允许当前浏览器或文件管理器“安装未知应用”。

遥控器操作

  • 上键、下键:切换频道。
  • 确认键、菜单键:打开频道列表。
  • 返回键、菜单键:关闭频道列表。
  • 播放/暂停键:暂停或继续播放。
  • 数字键:按频道序号快速切台。
  • 频道列表关闭时连续按两次返回键:退出应用。

如果习惯相反的切台方向,可在设置中开启“上下键反转”。

触摸操作

  • 点击画面左侧:打开频道列表。
  • 点击画面右侧:打开功能设置,默认界面打开网页管理。
  • 点击点播画面中间:显示播放控制器。
  • 直播画面:全屏左右滑动切换线路,左侧上下滑动调节亮度,右侧上下滑动切换频道。
  • 点播画面:左侧上下滑动调节亮度,右侧上下滑动调节音量,左右滑动预览进度,松手后跳转;取消滑动不跳转。控制器隐藏时同样可用。
  • 六套界面的分组、频道、节目单共用遥控器分页:本页末项按下进入下一页首项,首项按上返回上一页末项,列表两端停留。浏览不自动播放,OK 确认;记住各分组与节目单位置,EPG 刷新按节目时间保留选择。触摸保持自然滚动,返回遥控器后从可见条目接续。

平板或手机旋转后,视频画面会跟随设备方向调整。

网页管理

电视与手机连接到同一个局域网后,可在应用菜单中查看网页管理地址或二维码。

网页管理端可以:

  • 选择频道和线路。
  • 调整清晰度、直播稳定性和画面比例。
  • 设置时间、日期、网速及调试信息。
  • 添加或更新在线频道列表。
  • 配置开机自启动和遥控器行为。

管理端口从 9966 开始;如果端口被占用,应用会自动尝试下一个端口。请以应用实际显示的地址为准。

频道分组密码

自定义分组名称末尾使用 _数字密码,例如:

测试频道_10086,#genre#
测试一台,http://your-server/channel1.m3u8
高清秒播_0709,#genre#
高清台,http://your-server/channel2.m3u8

在管理网页“偏好设置 → 分组输入密码”中开启校验,默认关闭。电视端不显示此开关。

频道列表只显示“测试频道”“高清秒播”。遥控器进入频道列、点击播放或数字选台时验证密码;也可以通过方向键操作弹窗数字键盘。数字键输入达到密码位数后自动验证,确认键也可以提交,删除键退格,返回键取消。0709 必须保留开头的 0。

同一分组本次进入只需验证一次,切台和重试沿用本次解锁;浏览其他分组后再进入需要重新验证。解锁状态不写入配置,重新启动后仍需输入。收藏和节目回看入口也保留原分组校验。弹窗配色、文字和选中效果跟随当前主题。

M3U 的 group-title="名称_数字密码" 使用相同规则;原始分组名称保留在频道源和缓存中。

IPTV 节目回看

导入带回看声明的 M3U 后,在“频道列表 → 节目单”中选择标有“回看”的历史节目即可播放;遥控器 OK 和触屏点击均支持。播放器右上角“回到直播”或关闭浮层后按返回键,可返回当前频道直播。直接选择其他频道也会回到直播。

支持常见 M3U catchup 的 default(完整地址)、append(附加参数)、shift/旧 timeshift(SIPTV)、flussonic/fs、xc/xtream-codes 模式。识别 catchup-source、catchup-days、catchup-correction,并保留每条线路各自的配置。目录头部的默认属性可由频道条目覆盖。

#EXTM3U
#EXTINF:-1 tvg-id="cctv1" group-title="直播" catchup="append" catchup-days="7" catchup-source="?playseek={utc:YmdHMS}-{utcend:YmdHMS}",CCTV-1
http://your-iptv-server/channel/index.m3u8

未声明回看模板(或 default/append 未填写模板)的 HTTP/HTTPS HLS、TS 和 PLTV/TVOD 频道,可在历史节目上选择“尝试回看”:默认尝试最近 7 天,保留原鉴权参数,追加 playseek=yyyyMMddHHmmss-yyyyMMddHHmmss;明确的 /live/用户/密码/频道.ts 或 .m3u8 路径采用 Xtream 回看路径。若声明了 catchup-days 或时区修正,则沿用该值。显式模板优先,catchup="none" / catchup-days="0" 会关闭自动拼接。旧缓存无需重新导入,推断结果只作内存缓存,不增加直播请求。自动拼接只是尝试,仍需要服务商提供历史录像,部分服务端可能忽略回看参数而继续返回直播。

这是格式示例,请使用服务商实际提供的回看模板。支持 {utc}、{utcend}、{lutc}、{duration}、{duration:60}、{offset:60}、{Y}{m}{d}{H}{M}{S} 和 ${start}/${end} 等常用占位符,以及 XMLTV 节目的 {catchup-id};同时支持 DIYP 风格的 ${(b)yyyyMMddHHmmss} / ${(e)yyyyMMddHHmmss}(分别为节目开始、结束时间,Java 日期格式)。时间戳为 Unix 秒;日期格式按设备时区,catchup-correction 单位为小时。

节目单地址需在网页管理中配置,XMLTV 本身必须包含历史节目。按源声明的期限显示可回看节目(最多 30 天);节目未开始、过期、服务器未提供回看时会提示。回看切换线路或重试会保留节目,不会悄悄改播直播。普通直播不增加前置探测和下载请求。

手机飞鼠

在网页管理端进入“手机飞鼠”,开启电视光标后即可使用:

  • 陀螺仪:像遥控器一样移动或转动手机来控制光标。
  • 触控板:滑动控制光标,滑动越快移动越快。
  • 点击、返回和光标居中等快捷按钮。

首次启用陀螺仪时,请允许浏览器访问动作与方向传感器。使用完毕后可再次点击按钮关闭陀螺仪,以降低手机耗电和发热。

推荐设置

  • 直播稳定性:优先选择“稳定”。
  • 清晰度:网络和设备性能允许时选择“最高”。
  • 画面比例:优先选择“自适应”。
  • 解码方式:优先使用自动硬解;出现黑屏或花屏时尝试兼容软解。

常见问题

切台后短暂缓冲

优先使用“稳定”直播模式,或降低清晰度。应用会等待必要分片准备完成后再开始播放。

手机打不开管理网页

确认电视和手机连接到同一个局域网,并使用应用当前显示的 IP 和端口。部分路由器的访客网络会禁止设备互相访问。

陀螺仪无法开启

使用系统浏览器打开飞鼠页面,并允许动作与方向权限。部分浏览器需要安全网页环境才能提供传感器数据。

硬件解码黑屏

先尝试自动选择解码器;仍无法播放时切换到兼容软解。不同电视芯片和系统固件的解码兼容性可能不同。

手动打正式包(Windows)

双击项目根目录的 build-release.bat,即可调用 scripts/build-release.ps1,生成 ARM32、ARM64、x86 普通正式包及仅 ARM32 的浏览器版,并更新版本文件。打包结束后窗口会保留,方便查看成功信息或错误原因。

默认输出为 output/nTv.apk(32 位)、output/nTv64.apk(64 位)和 output/nTvX86.apk(x86),同时复制生成 nTv-v7a-电视盒子专用-v<版本号>.apk、nTv-v8a-手机或高版本设备-v<版本号>.apk、nTv-x86-模拟器专用-v<版本号>.apk(版本号从实际 APK 自动读取);英文名与对应中文名文件内容完全一致。普通三包均不携带轻量内核。额外输出 ntv_bro.apk,中文名为 nTv-bro-v7a-电视盒子专用-含轻量内核-v<版本号>.apk,仅含 ARM32 轻量内核;该版本使用独立升级附件与校验值,四包 mapping 一起收入 mapping.zip。 四种正式包均不携带 libh5estream.so,央视网使用整段解密回退路径。更新清单使用英文名 GitHub Release 附件,上传时保留大小写,兼容已发布客户端。需要先配置 Android SDK(local.properties)和正式签名(.signing),无需管理员权限。

默认采用增量构建,避免 Windows 文件占用导致 :app:clean 失败;需要完整清理时可执行 build-release.bat -Clean。命令行也可继续传递 -SkipClean 等原脚本参数。

构建使用 JDK 17、Gradle 8.11.1 和 Android Gradle Plugin 8.9.1,需要安装 Android SDK Platform 34、Build Tools 35.0.0;应用最低系统版本与 targetSdk 保持不变。正式包启用 R8 代码优化、混淆和资源裁剪,旧系统的电视横幅只生成一张 PNG 兼容图。打包时在 APK 旁导出一个 output/mapping.zip,内含 arm32/mapping.txt、arm64/mapping.txt、x86/mapping.txt 及记录 APK、映射 SHA256 的 manifest.json。每个 APK 的映射仍按哈希归档为 output/mapping/<APK 的 SHA256>/mapping.txt,保留历史版本。映射缺失或为空时打包会报错;发布时请保留对应 ZIP,用于还原该版本的崩溃堆栈。

日常打包只在输出目录生成 version-lite.json,设备信息页优先使用它检查应用版本;若返回 HTTP 404,则读取同一发布目录的 version.json,兼容未提供轻量清单的旧版本。其他网络错误保留失败提示。只有解码器等重要更新才使用 build-release.bat -ImportantUpdate,额外生成启动检查使用的 version.json 和兼容旧版的 version-iptv.json。

说明

请仅播放您有权访问的直播内容。频道可用性、清晰度和线路数量可能随上游服务变化。

私有浏览器内核

浏览器 Java/JS、litehtml、WASM、浏览器专用 QuickJS/TLS 代码保存在单独授权的私有工程中,不随本仓库提交。本仓库仅在 prebuilt/litebrowser/<ABI>/libntvLitebro.so 保存轻量内核的二进制快照,不包含内核源码或子模块入口。

构建仍使用 :litecore 和 :litebrowser Gradle 任务,需要将单独取得授权的内核工程放到本地 browser-core/ 目录,再执行:

./gradlew.bat :app:assembleArm64Debug --console=plain

browser-core/ 已被 Git 忽略。公开的 .so 不包含构建所需的 Java 接口和 JS 资源,不能单独替代该本地依赖;当前公开检出仍需要上述授权依赖才能构建。应用业务代码和通用 QuickJS/TLS 库仍在本仓库维护。分发包含内核的 bro 安装包时,完整对应源码的提供义务见 版权说明,仅提交 .so 不代表已满足该义务。

About

开源网页电视

Resources

Stars

428 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages