在国产 MCU 上串流 Jellyfin 音乐 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
feilong
V2EX    分享创造

在国产 MCU 上串流 Jellyfin 音乐

  •  
  •   feilong
    feilongfl 2023-10-03 11:12:24 +08:00 3365 次点击
    这是一个创建于 740 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    整体的思路如下所示:

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

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

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

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


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

    @lloovve
    博流的 base 代码确实有些问题,比如不跑 freeRTOS 的话 DMA 都用不了
    同时手册质量较低,时钟和复位系统的说明几乎为 0 ,几乎无法 debug
    而且还有大量闭源 lib ,基本就是脱离他们的生态很难开发
    vsyf
        6
    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
        7
    feilong  
    OP
       2023-10-03 17:29:05 +08:00 via Android
    @vsyf 你说那个应该是 lvgl 的 demo
    只有图

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

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

    顺便我这个应该也算是外挂 codec 了,整个音频解码都是 jellyfin 里的 ffmpeg 干的
    lloovve
        12
    lloovve  
       2023-10-04 07:43:26 +08:00 via iPhone
    @feilong xr872at 做语音想当好,我测试过网络电台,直接把网上网络电台 mp3 地址放进去可以播放几个小时都没问题
    feilong
        13
    feilong  
    OP
       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
        14
    lloovve  
       2023-10-04 09:19:04 +08:00 via iPhone
    @feilong 对,那个不单可以传文件地址,也可以传网络文件地址进去,直接播放
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     864 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 19:33 PVG 03:33 LAX 12:33 JFK 15:33
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86