{"id":36636369,"url":"https://github.com/yu2002s/dongyutvweb","last_synced_at":"2026-04-02T00:46:07.116Z","repository":{"id":330264963,"uuid":"1121591948","full_name":"Yu2002s/DongYuTVWeb","owner":"Yu2002s","description":"这是一个电视浏览器项目，可以在电视上观看直播。","archived":false,"fork":false,"pushed_at":"2026-02-24T05:02:56.000Z","size":94555,"stargazers_count":70,"open_issues_count":2,"forks_count":15,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-02-24T06:10:05.154Z","etag":null,"topics":["tv","web"],"latest_commit_sha":null,"homepage":"https://gitee.com/jdy2002/DongYuTvWeb/releases","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Yu2002s.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-23T08:29:18.000Z","updated_at":"2026-02-24T05:03:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Yu2002s/DongYuTVWeb","commit_stats":null,"previous_names":["yu2002s/dongyutvweb"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/Yu2002s/DongYuTVWeb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yu2002s%2FDongYuTVWeb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yu2002s%2FDongYuTVWeb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yu2002s%2FDongYuTVWeb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yu2002s%2FDongYuTVWeb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Yu2002s","download_url":"https://codeload.github.com/Yu2002s/DongYuTVWeb/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Yu2002s%2FDongYuTVWeb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30459764,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T03:55:51.346Z","status":"ssl_error","status_checked_at":"2026-03-13T03:55:33.055Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["tv","web"],"created_at":"2026-01-12T09:47:47.886Z","updated_at":"2026-04-02T00:46:07.109Z","avatar_url":"https://github.com/Yu2002s.png","language":"Kotlin","readme":"## DongYuTVWeb\n\n轻松在电视上观看直播，操作简单，适合家中老人使用，使用 WebView JavaScript 注入方式实现\n\n## 交流/反馈\n\n- QQ 群\n\n[交流/反馈QQ群](./screenshots/qrcode_1773500386502.jpg)\n\n- 公众号\n\n[公众号](./app/src/main/assets/images/qrcode_mp.jpg)\n\n- App发布网站\n\n[App发布中心](http://app.jdynb.xyz)\n\n- 相关问题解答\n\n[相关问题解答](https://app.jdynb.xyz/faq)\n\n## 下载\n\n应该如何下载呢？\n\n[App发布中心](http://app.jdynb.xyz)\n\n1. 请在 [release](https://gitee.com/jdy2002/DongYuTvWeb/releases) 下载。\n2. 如果你用的是手机，一般内核版本高，可以在 `release` 下载体积最小的，电视则下载体积大的。\n3. 一般android版本高的话，下载体积最小的就行，实在不行都可以下载试试。\n4. 市面上一般设备是64位的，请下载文件以`app_arm64`开头的文件, 老设备下载 `app_arm32` 开头的。\n\n## 操作\n\n- 方向上: 上一个频道\n- 方向下: 下一个频道\n- 左键: 声音减\n- 右键: 声音加\n- 确定键: 换台\n- 数字键: 换台\n- 菜单键：设置\n- 连续按两下菜单键：换源\n- 返回键：返回/退出\n- #号键：强制刷新当前频道（有问题时使用）\n\n\u003e 使用老式的闭路电视操作，适合老人使用！\n\n## 安装\n\n### 远程安装\n\n目前 1.0.13以上版本支持远程安装，需要用户在手机端，打开 设置 -\u003e 远程安装 -\u003e 通过 ip 和 端口连接到电视，点击远程安装即可\n如何连接呢？tcl电视举例（其他品牌电视请问AI或百度）：需要电视开启adb，进入 设置 -\u003e 关于 -\u003e 依次按下 上下左右 ，之后会显示扩展设置， 找到开启adb开关。然后打开设备的网络信息(WIFI详情)，查看 IP V4地址，这个就是 ip，一般默认的端口填写 5555 即可\n\n\u003e 此方法也能用来更新，如果你不会使用，请使用下面方法安装和更新\n\n### 其他方式\n\n1. USB数据线连接电视和手机(或U盘)，打开手机的通知，将`仅充电`改为`文件传输`，然后把安装包复制到电视，电视找到相关USB存储，安装apk\n2. 通过无线方式安装，需要 android 11 以上，打开电视 `adb调试`(如何开启请百度)，使用甲壳虫adb助手连接电视后安装\n\n\u003e 具体请百度或问AI，这里不进行详细描述\n\n### 安装事项\n\n**有些电视限制安装第三方App，需要使用 `adb` 禁用软件包安装程序**\n\ntcl电视举例（其他品牌电视请问AI或百度）：需要电视开启adb，进入 设置 -\u003e 关于 -\u003e 依次按下 `上下左右` ，之后会显示扩展设置，\n找到`开启adb`开关，然后使用 https://www.jiakechong.net/ `甲壳虫adb助手` 连接到电视，\n连接之前需要获取电视在`网络中的ip`，打开电视`网络信息`会有`ipv4` 地址，这个就是。然后用甲壳虫找到应用管理，\n禁用`软件安装包程序`就可以安装app了。 安装完成之后**再把软件安装包程序启用**。\n\n## 开机自启动\n\n### 远程设置开机自启\n\n1. 在手机端打开本App的 设置 -\u003e 远程连接 -\u003e 连接电视。\n2. 点击操作按钮 -\u003e 开启自启动 -\u003e 设置默认桌面\n\n### 手动设置\n\n1. 查找电视的一些设置、App，看看有没有应用自启动相关的设置，对本应用开启自启动。可百度或 Ai 搜索自启动相关文章\n2. 确保 App 已经打开过，并允许了**悬浮窗权限**\n3. 设置默认的桌面，一般按 Home键(主页键) 会提示设置默认桌面，可以设置为本App并选择始终，或查找电视相关设置和App设置默认桌面\n\n\u003e 不保证所有电视都支持，仅在原生系统虚拟机 Android 12 测试通过\n\n**如果上面的方法不奏效，可以尝试以下方法：**\n\n1. [进入电视的工厂模式](https://www.cnblogs.com/05-hust/p/17089031.html)\n2. 开启 USB 调试\n3. 使用无线调试或数据线连接电视和电脑(手机-需要安装终端)[电脑安装adb](https://blog.csdn.net/chengxuyuanyy/article/details/149743294) 手机可以安装MT管理器，自带终端\n4. 进入终端，输入以下命令\n```shell\n# 无线连接 adb connect ip:端口\nadb devices # 查看设备是否连接成功\nadb shell # 进入管理员模式\ncmd package set-home-activity \"xyz.jdynb.tv/.MainActivity\" # 设置默认的启动项\nreboot # 重启设备\n```\n\u003e 注意：定制系统可能无效\n\n## 无法播放问题\n\n软件已内置X5内核，如果你设备安装失败会有问题请反馈！具体看【下载】\n\n部分设备仍然无法正常使用，这时候需要手动下载并安装 [AndroidSystemWebView](https://www.apkmirror.com/apk/google-inc/android-system-webview/) (需要梯子)\n\n这里提供以下下载地址:\n\n- [平台自身维护WebView列表](http://app.jdynb.xyz/webview/)\n- [ApkMirror](https://www.apkmirror.com/apk/google-inc/android-system-webview/) (需要梯子)\n- [123网盘下载](https://www.123865.com/s/km2hjv-WOuOA) (32位)\n- [Gitee下载](https://gitee.com/jdy2002/android-webview/releases)\n- 加入公众号获取\n\n## 自定义频道\n\n目前不支持自定义源，如果你需要添加自己的源，请在公众号给我私信\n\n频道完整配置文件 `main/assets/live-3.jsonc` [live-3.jsonc](https://gitee.com/jdy2002/DongYuTvWeb/raw/master/app/src/main/assets/lives/live-2026-03-19.jsonc)\n\n最新调整:\n\n- 去除 `number` 频道号码\n- 变更 `live.jsonc` 为 `/lives/live-2026-03-19.jsonc`\n- 增加频道上的 `children` 字段，支持换源\n\n### 1. 对于没有验证的直播地址\n\n修改 channel 频道列表\n\n```json5\n{\n    // ...\n    \"channel\": [\n        // ...\n        {\n            \"channelType\": \"xxx\", // 频道类型（分类名称）\n            \"player\": \"common\", // 播放器 id，这里写上，下方的 channelList 中没有设置的就默认为这个值\n            \"channelList\": [\n              {\n                \"channelName\": \"香港卫视\", // 频道名称 (需要唯一)\n                \"tvLogo\": \"\", // logo 目前没用到，可以不写\n                \"number\": 6, // 填写唯一的频道号码，用于数字换台 (废弃)\n                \"player\": \"common\", // 播放器 id，这个上方已经内置了，只需要写 common\n                \"args\": { // 播放参数，固定 liveUrl 即可\n                  \"liveUrl\": \"https://wwww.tv.com/playlist.m3u8?\"\n                }\n              }\n            ]\n        }\n    ]\n}\n```\n\n\u003e 注意上方的 `liveUrl` 只能是普通的 m3u8地址，并且没有带时间戳等相关的参数\n\n### 2. 对于开发人员\n\n有些直播地址是有验证参数的，需要在脚本中进行处理生成\n\n增加自定义频道，修改 `channel` 配置\n\n```json5\n// 省略其他\n{\n  // ...\n  \"channel\": [\n    // ...\n    {\n      \"channelType\": \"xx电视分类\",\n      \"player\": \"custom\", // 设置自定义播放 id\n      \"channelList\": [\n        // ...\n        {\n          \"channelName\": \"xx电视\",\n          \"tvLogo\": \"https://web.cmc.hebtv.com/cms/rmt0336/upload/Image/9/9tpklm/2025/07/18/30aaea69a1de46a881cef5d759d30b3e.png\",\n          \"number\": 23\n        }\n        // ...\n      ]\n    }\n  ]\n}\n```\n\n### 修改 `player` 配置\n\n```json5\n{\n  \"player\": {\n    \"id\": \"custom\", // 播放器 id，和上面定义的频道 player 参数一致\n    \"name\": \"simple\", // 内置的播放器名称，做了特殊处理，默认写这个\n    \"script\": { // 需要执行的 js 脚本\n      \"init\": [ // 在网页初始化完成时候执行的 js 脚本\n        \"https://gitee.com/jdy2002/DongYuTvWeb/raw/master/app/src/main/assets/js/hebei/init.js\"\n      ],\n      \"play\": [ // 响应播放事件执行的 js 脚本\n        \"https://gitee.com/jdy2002/DongYuTvWeb/raw/master/app/src/main/assets/js/hebei/play.js\"\n      ],\n      \"resume_pause\": [] // 暂停恢复执行的 js 脚本，这里留空，因为内部已经做了处理了\n    }\n  }\n}\n```\n\n### 编辑 js 脚本\n\n\u003e 不需要云服务器，在 gitee 上建一个仓库，上面脚本地址自己写上仓库中实际的地址即可，具体格式参照上面的\n\n\u003e simple 播放器已经内置了 CryptoJS，所以这里就不需要引入了，直接使用即可\n\n\u003e 脚本中，`{{channelName}}` 会被替换成用户选择的频道名称，当然其他 args 参数也会被这样替换进入\n\n\u003e 内部已经关闭了跨域限制，可以直接请求\n\n\u003e `playLive` 是内置的方法，可以直接调用传入地址进行播放\n\n\u003e 注意：使用fetch请求时，有些会检测Referer请求头，请设置X-Referer请求头，内部会进行处理，\n\u003e 请求头数据请使用 `X-Body` 添加到请求头中，这里的数据将作为 Body 发送，\n\n#### `init.js`, 对应上面 init 执行的脚本\n\n##### 通过普通 fetch 发送请求\n\n这种方式有限制，有些请求会检测 `Referer` 请求头，请设置自定义请求头 `X-Referer`，\n推荐使用内置的 [HttpUtil](/app/src/main/assets/js/lib/dy-http-util.js) 发送请求\n\n```js\n(function() {\n    // 这里在播放地址上面加上需要的参数\n    window.addLiveUrlQuery = function (obj) {\n       let ts = parseInt(new Date().getTime() / (1000)) + (7200);\n       // CryptoJS 已经是内置的，可以直接使用\n       return obj.liveVideo[0].formats[0].url + \"?t=\" + ts + '\u0026k=' + CryptoJS.MD5(obj.appCustomParams.movie.liveUri + obj.appCustomParams.movie.liveKey + ts);;\n    }\n\n    fetch(\"https://api.cmc.hebtv.com/scms/api/com/article/getArticleList?catalogId=32557\u0026siteId=1\", {\n      \"headers\": {\n        \"accept\": \"application/json, text/javascript, */*; q=0.01\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\",\n        \"sec-ch-ua\": \"\\\"Google Chrome\\\";v=\\\"143\\\", \\\"Chromium\\\";v=\\\"143\\\", \\\"Not A(Brand\\\";v=\\\"24\\\"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": \"\\\"Windows\\\"\",\n        \"sec-fetch-dest\": \"empty\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-site\": \"same-site\",\n        // 如果不检测 Referer的话，可以正常写\n        \"X-Referer\": \"https://www.hebtv.com/\" // X-Referer 会自动在请求头添加 Referer，防止被检测\n        // 必须在设置了 X-Referer 之后，X-Body 才有效\n        \"X-Body\": \"\" // 这里设置请求体数据\n      },\n      \"body\": null,\n      \"method\": \"GET\"\n    }).then(res =\u003e {\n      return res.json()\n    }).then(res =\u003e {\n        const news = res.returnData.news\n        window.channelList = news.map(item =\u003e {\n            return {\n                title: item.title,\n                liveVideo: item.liveVideo,\n                appCustomParams: item.appCustomParams\n            }\n        })\n\n        // {{channelName}} 会被替换成频道名称，上面的 channel中的属性都会被传入到脚本中，这里可以进行自定义处理\n        const channelItem = window.channelList.find(item =\u003e item.title === '{{channelName}}')\n        const playUrl = window.addLiveUrlQuery(channelItem)\n        // 初始化时机执行的，所以这里需要对当前播放的频道进行播放，play.js 不会在初始化时候调用生效\n        playLive(playUrl)\n    })\n})();\n```\n##### 使用 HttpUtil 发送请求\n\n内置在 `simple` 播放器中的，可以直接使用，推荐使用这种方式发送请求\n\n```js\nconst response = await HttpUtil.post(`https://feiying.litenews.cn/api/v1/auth/exchange?t=${now}\u0026s=${s}`, body, {\n    headers: {\n        \"accept\": \"*\",\n        \"accept-language\": \"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7\",\n        \"content-type\": \"text/plain\",\n        \"priority\": \"u=1, i\",\n        \"sec-ch-ua\": \"\\\"Google Chrome\\\";v=\\\"143\\\", \\\"Chromium\\\";v=\\\"143\\\", \\\"Not A(Brand\\\";v=\\\"24\\\"\",\n        \"sec-ch-ua-mobile\": \"?0\",\n        \"sec-ch-ua-platform\": \"\\\"Windows\\\"\",\n        \"sec-fetch-dest\": \"empty\",\n        \"sec-fetch-mode\": \"cors\",\n        \"sec-fetch-site\": \"cross-site\",\n        \"Referer\": \"https://v.iqilu.com/\"\n    },\n    responseType: 'text'\n})\nconst result = JSON.parse(decrypt(response.data))\nplayLive(result.data)\n```\n\n`HttpUtil` 的定义参见 [HttpUtil](/app/src/main/assets/js/lib/dy-http-util.js)\n\n#### `play.js` 处理播放\n\n```js\n(function() {\n    const channelItem = window.channelList.find(item =\u003e item.title === '{{channelName}}')\n    const playUrl = window.addLiveUrlQuery(channelItem)\n    playLive(playUrl)\n})();\n```\n\n### Base 播放器\n\n对于加密的直播地址，需要使用 Base 播放器，直接通过浏览器加载来实现播放，去除播放器以外的节点，实现全屏播放。\n\n[init.js实现](/app/src/main/assets/js/guangxi/init.js) 全屏并去除其他无用样式进行初始化\n\n[play.js实现](/app/src/main/assets/js/guangxi/play.js) 直接使用 `window.location.href` 进行跳转\n\n[resume_pause.js实现](/app/src/main/assets/js/guangxi/resume_pause.js) 查找按钮并点击\n\n配置参考\n\n\u003e `url` 参数支持动态参数，使用 {{}} 方式传入\n\n```json5\n// player 配置\n{\n  \"id\": \"guangxi\",\n  \"name\": \"base\", // 指定为 base\n  \"url\": \"https://tv.gxtv.cn/channel/channelivePlay_{{id}}.html\", // url 支持动态参数\n  // 设置指定的脚本\n  \"script\": {\n    \"init\": [\"https://gitee.com/jdy2002/DongYuTvWeb/raw/master/app/src/main/assets/js/guangxi/init.js\"],\n    \"play\": [\"https://gitee.com/jdy2002/DongYuTvWeb/raw/master/app/src/main/assets/js/guangxi/play.js\"],\n    \"resume_pause\": [\"https://gitee.com/jdy2002/DongYuTvWeb/raw/master/app/src/main/assets/js/guangxi/resume_pause.js\"]\n  }\n}\n```\n\u003e id 参数会注入到上面 url 的 {{id}} 中\n\n```json5\n// channel 配置\n{\n  \"channelType\": \"广西\",\n  \"player\": \"guangxi\",\n  \"channelList\": [\n    {\n      \"channelName\": \"广西卫视\",\n      \"args\": {\n        \"id\": \"e7a7ab7df9fe11e88bcfe41f13b60c62\"\n      }\n    },\n    {\n      \"channelName\": \"综艺旅游\",\n      \"args\": {\n        \"id\": \"f3335975f9fe11e88bcfe41f13b60c62\"\n      }\n    }\n  ]\n}\n```\n\n\n### simple 播放器内置的 html 代码\n\n[simple_player.html](/app/src/main/assets/html/simple_player.html)\n\n```html\n\u003c!doctype html\u003e\n\u003chtml lang=\"en\"\u003e\n\u003chead\u003e\n    \u003cmeta charset=\"UTF-8\"\u003e\n    \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\n    \u003ctitle\u003eDocument\u003c/title\u003e\n    \u003cstyle\u003e\n        body {\n            background: #000000;\n        }\n\n        #video {\n            width: 100vw;\n            height: 100vh;\n        }\n\n        #loading {\n            position: fixed;\n            left: 0;\n            top: 0;\n            z-index: 99;\n            width: 100vw;\n            height: 100vh;\n            font-size: 30px;\n            font-weight: bold;\n            color: white;\n            display:flex;\n            align-items: center;\n            justify-content: center;\n        }\n    \u003c/style\u003e\n    \u003c!-- 这里内部做了处理 --\u003e\n    \u003cscript src=\"../js/lib/dy-http-util.js\"\u003e\u003c/script\u003e\n    \u003cscript src=\"../js/lib/dy-crypto-js.min.js\"\u003e\u003c/script\u003e\n    \u003cscript src=\"../js/lib/dy-hls.min.js\"\u003e\u003c/script\u003e\n\u003c/head\u003e\n\u003cbody\u003e\n\u003cvideo autoplay id=\"video\"\u003e\u003c/video\u003e\n\u003cdiv class=\"loading-overlay\" id=\"loading\"\u003e\n    加载中...请稍后\n\u003c/div\u003e\n\u003c/body\u003e\n\n\u003cscript\u003e\n    const video = document.querySelector(\"#video\")\n\n    video.addEventListener('loadeddata', function() {\n        hideLoading()\n    })\n\n    function hideLoading() {\n        const loading = document.getElementById('loading');\n        loading.style.display = 'none';\n    }\n\n    function resumeOrPause() {\n        if (video.paused) {\n            video.play();\n        } else {\n            video.pause();\n        }\n    }\n\n    let hls = null;\n\n    function playLive(url, headers) {\n        video.volume = 1\n        \n        // 检查是否支持 HLS.js 且为 m3u8 文件\n        if (Hls.isSupported() \u0026\u0026 url.includes('.m3u8')) {\n            if (hls) {\n                hls.destroy();\n            }\n            \n            hls = new Hls({\n                debug: false,\n                xhrSetup: function(xhr, url) {\n                    // xhr.setRequestHeader('X-Referer', headers['Referer'])\n                    // 这里设置请求头\n                    if (headers) {\n                        for (const key in headers) {\n                            xhr.setRequestHeader(key, headers[key]);\n                        }\n                    }\n                }\n            });\n            \n            hls.loadSource(url);\n            hls.attachMedia(video);\n            \n            hls.on(Hls.Events.MANIFEST_PARSED, function() {\n                video.play();\n            });\n            \n            hls.on(Hls.Events.ERROR, function(event, data) {\n                console.error('HLS Error:' + JSON.stringify(data));\n                if (data.fatal) {\n                    switch(data.type) {\n                        case Hls.ErrorTypes.NETWORK_ERROR:\n                            console.log('Network error, trying to recover');\n                            hls.startLoad();\n                            break;\n                        case Hls.ErrorTypes.MEDIA_ERROR:\n                            console.log('Media error, trying to recover');\n                            hls.recoverMediaError();\n                            break;\n                        default:\n                            console.log('Fatal error, destroying HLS instance');\n                            hls.destroy();\n                            break;\n                    }\n                }\n            });\n        } else if (video.canPlayType('application/vnd.apple.mpegurl')) {\n            // iOS Safari 原生支持\n            video.src = url;\n            video.play();\n        } else {\n            // 其他格式直接播放\n            video.src = url;\n            video.play();\n        }\n    }\n\u003c/script\u003e\n\u003c/html\u003e\n```\n\n其他使用方法，请查看项目的 `/app/src/main/assets` 中的代码\n\n### 配置多个源\n\n具体配置参考 [channel 配置](/app/src/main/assets/lives/live-2026-03-19.jsonc)\n\n```json5\n// channel 配置\n{\n  // ...\n  \"channelName\": \"example\",\n  // 设置多个源\n  \"children\": [\n    {\n      \"channelName\": \"example-1\",\n      \"player\": \"base\",\n      \"args\": {\n        \"a\": \"b\"\n      }\n    },\n    {\n      \"channelName\": \"example-2\",\n      \"player\": \"common\",\n      \"args\": {\n        liveUrl: \"http://example.com/live.m3u8\"\n      }\n    }\n  ]\n}\n```\n\n\n## 截图\n\n![截图](./screenshots/MuMu12-20251223-161936.png)\n\n![截图](./screenshots/MuMu12-20251223-161942.png)\n\n![截图](./screenshots/MuMu12-20251223-161947.png)\n\n## 注意\n\n仅供学习交流，请勿用于商业用途\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyu2002s%2Fdongyutvweb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyu2002s%2Fdongyutvweb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyu2002s%2Fdongyutvweb/lists"}