V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
feilong
V2EX  ›  分享创造

在国产 MCU 上串流 Jellyfin 音乐

  •  
  •   feilong ·
    feilongfl · 207 天前 · 2746 次点击
    这是一个创建于 207 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    整体的思路如下所示:

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

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

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

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


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

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

    如果想要把歌存 flash 播放的话可以参考我的那个仓库的 dev-music-test
    vsyf
        8
    vsyf  
       207 天前
    @feilong #5
    @feilong #5
    jellyfin 解码是可以的,
    但是我觉得第一个 hls 传输 pcm 不符合标准,
    第二个 feature ,新增的 AudioCodec 的参数定义和后端的处理还没有做好。
    feilong
        9
    feilong  
    OP
       207 天前
    @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
        10
    lloovve  
       206 天前 via iPhone
    其实用 xr872 非常简单,eps32 也是,不过需要外挂 codec ,872 成本最低,最经济
    feilong
        11
    feilong  
    OP
       206 天前 via Android
    @lloovve
    这次的开发版是免费拿到的😁

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

    顺便我这个应该也算是外挂 codec 了,整个音频解码都是 jellyfin 里的 ffmpeg 干的
    lloovve
        12
    lloovve  
       206 天前 via iPhone
    @feilong xr872at 做语音想当好,我测试过网络电台,直接把网上网络电台 mp3 地址放进去可以播放几个小时都没问题
    feilong
        13
    feilong  
    OP
       206 天前
    @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
        14
    lloovve  
       206 天前 via iPhone
    @feilong 对,那个不单可以传文件地址,也可以传网络文件地址进去,直接播放
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2665 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:35 · PVG 23:35 · LAX 08:35 · JFK 11:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.