news 2026/10/10 4:15:37

五份长文音频,怎样放进同一个播放器?一个静态RSS的完整例子

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
五份长文音频,怎样放进同一个播放器?一个静态RSS的完整例子

有几份已经生成好的长文音频,接下来怎么听?逐个打开网页可以,但节目一多,就开始在标签页里找文件。另一种做法是给这些公开音频配一份RSS,让支持订阅的播放器自己读取列表。

我把五份中文学习、历史和读书音频整理成了一个可公开访问的Feed。音频没有重新生成,只增加了节目列表和中文关注说明。这里记录的是实际完成的制作和HTTP核验;还没有在iPhone客户端做订阅测试,也没有提交Apple播客目录。

我是「自听」MyListen开发者Ryan Zhu,本文及代码由AI辅助整理。音频由AI合成,在Mac使用归档模型生成,非当前iPhone录音。示范音频、文稿和代码均可独立使用,不要求购买App。

一个节目,首先是几份稳定的文件

这次用的素材已经各自有完整页面:历法9分13秒、SQL左连接7分51秒、铁路时间8分05秒、平均数与中位数8分17秒,以及《弗兰肯斯坦》解读6分30秒。

每期都有完整MP3;文稿、资料来源与可复制听稿请求放在对应页面。RSS只是把这些已有文件组织起来,不会自动核查AI生成的内容,也不会自动把音频变得正确。

公开订阅说明:https://godgod126.github.io/listening-script-kit/podcast/

RSS地址:https://godgod126.github.io/listening-script-kit/podcast/feed.xml

这个Feed目前只有五期,不承诺更新频率。订阅日期表示首次加入本Feed,不把旧音轨写成今天新制作的节目。

RSS不上传声音,它告诉播放器去哪里取

RSS2.0的channel描述整个节目,每个item描述一期。最关键的附件信息在enclosure里。

以下是这次SQL单集的实际文件数据,省略了简介和部分播客扩展标签:

<item><title>左连接为什么丢掉一个人?</title><link>https://godgod126.github.io/listening-script-kit/learning/sql-left-join/</link><guidisPermaLink="false">https://godgod126.github.io/listening-script-kit/podcast/episode/sql-left-join</guid><enclosureurl="https://godgod126.github.io/listening-script-kit/learning/sql-left-join/sql-left-join-zh.mp3"length="4227295"type="audio/mpeg"/></item>

这里有三个容易填错的字段。

url必须指向实际音频文件,不能指向播放器页面。length是文件字节数,不是音频秒数;这份MP3是4,227,295字节,实测时长470.94秒。type描述媒体类型,这里是audio/mpeg。

GUID是播放器辨认“这是不是同一期”的标识。改标题、改说明时,不应随手给原单集换一个GUID。这个例子把GUID当稳定标识,并明确isPermaLink为false,不把它假装成可访问的节目页面。

每期音频URL也要唯一。Apple官方规范明确提到,不同单集使用重复附件URL可能被忽略。当前示范的五个GUID和五个附件URL都不同。

把资料表作为源文件

我没有每次手改XML。podcast/catalog.json记录标题、文件名、字节数、时长、简介与首次加入Feed的时间;tools/build-podcast.py从这张资料表生成RSS和中文说明页。

在完整仓库根目录运行:

py-3 tools/build-podcast.py

生成器只用Python标准库,不调用AI、语音API或外部服务。它会检查本地MP3实际大小是否仍与资料表一致。新增音轨时,先准备真实音频及对应说明,再维护资料表,不把“计划做一期”写成已经存在的附件。

时间使用带时区的记录,再生成RFC2822形式的pubDate。旧素材原公开时间没查清时,不补造原始发布日。本例的pubDate按首次加入Feed计,资料表同时保留原始公开时间未知这一点。

完整源码:https://github.com/GODGOD126/listening-script-kit/tree/main/podcast

生成器:https://github.com/GODGOD126/listening-script-kit/blob/main/tools/build-podcast.py

能打开文件,还不够

Apple的Feed技术规范要求音频托管服务器支持HEAD与字节范围请求。前者能查文件元信息,后者让客户端读取音频的一部分。

这次在公开部署之后,实际做了三类检查:

  1. GET读取RSS和中文说明页,确认HTTP200,而且正文与Git提交中的文件字节一致。
  2. 对五份音频分别发HEAD,核对Content-Length与RSS的length一致。
  3. 实际请求bytes=0-1023,五份均返回206、1024字节,以及包含正确文件总长度的Content-Range。

SQL音轨的实际分段结果是:

HTTP 206 Partial Content Content-Range: bytes 0-1023/4227295

不是只看Accept-Ranges这个字段就判断成功,而是确实读取了一小段文件。同时也解析了XML,核对五个GUID没有重复,pubDate能按带时区的日期解析。

部署时还遇到一个小差异:Windows工作区使用CRLF,Git部署版本使用LF。两份文字看起来一样,原始字节却不同。最终用Git提交内的文件作为对照,避免把换行转换误判成部署漏更新。

这些检查能证明当次接口和文件一致,不能证明每个网络环境或播放器都已经实测通过。

手动关注和正式上架,是两件事

Apple官方中文说明给出的iPhone路径是:打开Apple播客的“资料库”,点省略号按钮,选择“通过URL关注节目”,再粘贴RSS地址。

直接关注Feed不会让节目自动进入Apple播客公开目录、搜索和编辑精选,也没有对应的Apple播客分析数据。这个例子尚未进入目录,不把RSS公开当成Apple审核通过。

页面提供可选中的完整地址。我最初做了自动复制按钮,核验时页面提示成功,但浏览器工具回读的剪贴板仍是旧内容。因此改为选中地址、由用户手动复制;这一流程已经实际按复制键并回读到正确URL。它少一点自动化,但不会只凭提示就告诉用户复制成功。

示范封面为1254×1254的AI概念图,不宣称满足正式目录封面规范。若以后正式投稿,应单独准备合规封面、核查目录要求,并完成Connect和客户端验证。

自己的私人长文,无需公开成RSS

这里处理的是可公开分享的原创示范。有权分享的节目适合用公开RSS组织;工作材料、私人笔记等不需要为了收听上传到公共仓库。GitHub Pages中的Feed和附件是公开文件,不能把“地址暂时没人知道”当隐私保护。

如果目的只是把自己的长文放在iPhone里随时听,可以先让AI整理成连续稿件,核对数字、来源和不确定性,再用适合自己的本地收听工具。

「自听」MyListen在iPhone本地把长文生成可保存的自然声音,支持锁屏收听与进度续听。无订阅、无广告;可免费下载试用,完整功能通过App内购买解锁。它负责固定稿件的收听环节,不替代来源核查或版权判断。

中国区App Store:https://apps.apple.com/cn/app/id6790382144

参考资料:Apple《播客RSS Feed规范》《Apple播客如何分发节目供听众收听》,2026年10月9日回读。

https://podcasters.apple.com/zh-cn/support/823-podcast-requirements

https://podcasters.apple.com/zh-cn/support/5108-how-apple-podcasts-distributes-your-shows-to-listeners

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 4:15:29

基于Spring Boot的宠物医院管理系统毕设全流程解析

又到了毕业设计选题的季节&#xff0c;后台收到不少私信问同一个题目&#xff1a;基于Spring Boot的宠物医院管理系统。这个题在计算机毕业设计里出镜率确实很高&#xff0c;但它绝对不是那种随便找个模板套一套就能交差的项目——业务上要覆盖挂号、诊疗、开药、收费&#xff…

作者头像 李华
网站建设 2026/10/10 4:14:20

AI的会计逻辑:当系统做出开除决策,谁该按下那个键?

1. 这到底是个什么标题&#xff1a;开除键、会计与 AI 的三角关系1.1 从一句话拆出三层意思这个标题我反复读了好几遍&#xff0c;越读越觉得有意思。“没有人按下开除键”这句话本身就像一句谜语&#xff1a;到底有没有人开除过谁&#xff1f;谁有权限开除&#xff1f;开除键长…

作者头像 李华
网站建设 2026/10/10 4:12:59

PyTorch张量索引本质:从stride内存寻址到计算图安全

1. 项目概述&#xff1a;PyTorch多维张量索引不是“写错下标”那么简单你刚在PyTorch里写完一行x[2, :, 5]&#xff0c;结果弹出IndexError: too many indices for tensor of dimension 2&#xff1b;或者更迷惑的是&#xff0c;x[:, 0, :]在某个模型里跑得好好的&#xff0c;换…

作者头像 李华
网站建设 2026/10/10 4:12:07

哈希函数选型指南:从MD5到SHA-256,避开这些坑

如果你给一份文件算过校验和&#xff0c;或者见过代码版本管理工具生成的那串四十位提交ID&#xff0c;再或者在数据库表里见过 password 字段旁边那串奇怪的加盐字符串&#xff0c;那你其实已经在使用哈希函数了。哈希函数这个计算机世界最不起眼的基础设施&#xff0c;经常被…

作者头像 李华
网站建设 2026/10/10 4:12:02

Python基础用法实战指南:从语法到工程实践的核心动作

1. 先把"基本用法"这件事想清楚&#xff1a;你真正需要的不是语法清单很多人来找我聊Python&#xff0c;第一句话往往是"我想学Python&#xff0c;但不知道从哪儿开始"&#xff0c;第二句话往往是"基础语法我看过好几遍了&#xff0c;list、dict、if、…

作者头像 李华
网站建设 2026/10/10 4:11:10

大模型融资后技术落地:国产芯片适配与推理部署实战

1. 这条消息为什么让技术圈炸了锅那天晚上我正蹲在服务器前调一个推理服务的显存占用&#xff0c;群里突然刷屏——某头部大模型团队拿到了新一轮融资&#xff0c;规模传闻在数百亿级别。第一反应不是"钱真多"&#xff0c;而是"这笔钱要花在哪"。因为做大模…

作者头像 李华