在国产 MCU 上串流 Jellyfin 音乐

2023-10-03 11:12:24 +08:00
 feilong

前几天我免费获得了 AIPI 的开发板,搭载了博流的 MCU ,整体功能类似 ESP32 。

正好在理发的时候,理发店的天猫精灵在播放音乐时插播广告,
于是我突发奇想,想着能否利用这个开发板来进行串流播放。

整体的思路如下所示:

尽管视频转码是由 Jellyfin 完成的, 但博流的这个 MCU 芯片能够播放出来仍然让我感到非常惊讶。

不过,国产芯片也存在一些不足之处,主要表现在生态和文档方面。
特别是芯片文档中隐藏了大量的硬件信息,
如果出现底层问题,查找会比较头疼。

可以参考以下 B 站链接查看播放效果。

请注意:这只是一个大约两天时间制作的演示项目,代码质量不高,音频会出现杂音。
具体原因和其他问题可以参考 GitHub 页面。
这个项目仅用于测试,目前没有计划进行后续维护。


2939 次点击
所在节点    分享创造
14 条回复
dangyuluo
2023-10-03 11:25:43 +08:00
赞,我更想做到 ESP32 上 I2S 麦克风接受音频,再串流到家里的音响上,有点难。
lloovve
2023-10-03 12:14:11 +08:00
博流的垃圾代码还是算了吧,直接 esp32 省心舒服
vsyf
2023-10-03 16:12:37 +08:00
看你要直接传 pcm ,这款 MCU 的没有 mp3 解码的 demo 吗?
另外提到 jellyfin 的 pr 是认真的吗?感觉都是 hardcode 呀。。。
yolee599
2023-10-03 16:58:46 +08:00
@lloovve #2 博流的 sdk 和数据手册都不完整,上次想找一找 BL818 camera 相关代码,没找到,估计是要签 NDA 协议。国产 MCU 大多数就各种遮遮掩掩的
feilong
2023-10-03 17:03:06 +08:00
@vsyf 官方文档芯片细节隐藏太多,不过看结构图没有硬件解码
对于 MCU 来说我觉得 jellyfin 解码也是可以接受的

@lloovve
博流的 base 代码确实有些问题,比如不跑 freeRTOS 的话 DMA 都用不了
同时手册质量较低,时钟和复位系统的说明几乎为 0 ,几乎无法 debug
而且还有大量闭源 lib ,基本就是脱离他们的生态很难开发
vsyf
2023-10-03 17:19:41 +08:00
@yolee599 #4
https://github.com/Ai-Thinker-Open/AiPi-Open-Kits/tree/master/AiPi-Eyes/demos/music
我刚去翻了半天,都是 lvgl 界面处理,就是没找到怎么播出数据的 code 。
看那个 readme ,似乎先是将 mp3 的信息解码到.h 文件里面,然后编码烧录到 mcu 里面做动画播放什么的。
feilong
2023-10-03 17:29:05 +08:00
@vsyf 你说那个应该是 lvgl 的 demo
只有图

如果想要把歌存 flash 播放的话可以参考我的那个仓库的 dev-music-test
vsyf
2023-10-03 18:01:52 +08:00
@feilong #5
@feilong #5
jellyfin 解码是可以的,
但是我觉得第一个 hls 传输 pcm 不符合标准,
第二个 feature ,新增的 AudioCodec 的参数定义和后端的处理还没有做好。
feilong
2023-10-03 18:33:46 +08:00
@vsyf
1. 因为不是 hls ,所以我把 TranscodingProtocol 改成了 PCM ,如果是 hls 的话 TranscodingProtocol=hls
在使用的时候,我基本是当作下载一个文件来使用的。
完整请求请参考下面示例

2. 关于 AudioCodec ,我不是太熟悉 jellyfin 的开发进展,但是根据 API 文档的 UniversalAudio 的 audioCodec 说明
> Optional. The audio codec to transcode to.
应该是目标格式的样子,所以我填写了具体的 PCM 格式

如果有不对的地方欢迎指出

---
示例请求:
wget -O wget.pcm http://192.168.10.109:8096/Audio/84f7cdda408d432361c29d6bda9cbc27/universal?Container=pcm&TranscodingContainer=pcm&AudioCodec=pcm_s16le&audioBitRate=16000&api_key=d1e79804ea3b4215aecfc7d9a2043e23
lloovve
2023-10-04 01:07:50 +08:00
其实用 xr872 非常简单,eps32 也是,不过需要外挂 codec ,872 成本最低,最经济
feilong
2023-10-04 04:00:00 +08:00
@lloovve
这次的开发版是免费拿到的😁

没用过 xr872 ,简单看了下 spec ,和博流的这个比了下
博流的这个多了 ble5.3 ,支持 WiFi6 ,872 没有,其他的带 wifi6 的产品貌似只有 esp32c6
但是 872 的 384m 的 m4f cpu 应该比 320m 的 riscv 更快

顺便我这个应该也算是外挂 codec 了,整个音频解码都是 jellyfin 里的 ffmpeg 干的
lloovve
2023-10-04 07:43:26 +08:00
@feilong xr872at 做语音想当好,我测试过网络电台,直接把网上网络电台 mp3 地址放进去可以播放几个小时都没问题
feilong
2023-10-04 08:25:14 +08:00
@lloovve

好奇去看了下 https://github.com/XradioTech/xradio-skylark-sdk
这代码质量确实比博流要好,封装逻辑和 linux 比较相似,而且例子很全的样子

翻看了下 audio 的示例,这个芯片貌似有一个叫做 cedarx 的闭源解码器可以解码 mp3
而且只需要 player->play(player, "file://music/1.mp3");就可以直接播放,这个生态做的确实不错。
印象里 espressif 也有类似的闭源解码器

> 我发现上面你说的 codec 指的是处理 i2s 的芯片
我拿到的这块开发板是 AIPI-EYES-S1 上面的 es8388 是这个功能
安信可他们还做了一个叫 AIPI-EYES-S2 的板子内置 codec ,
但是只能接一个喇叭的样子,不适合放歌
lloovve
2023-10-04 09:19:04 +08:00
@feilong 对,那个不单可以传文件地址,也可以传网络文件地址进去,直接播放

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/978690

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX