Skip to content

lxmusic插件,✅ 测试成功,可正常调用!,但无法播放。原因不明

1.lxmusic插件问题

lxmusic插件,✅ 测试成功,可正常调用!

Image

可以搜索歌曲,但无法播放。原因不明。

Image

LXServer 有用名和密码,api调用时,不需要验证吗?

Image

2.LXServer 接口地址问题

http://主机ip:9527/api 检测不到,无法用,也不知为啥?,只能用 http://容器ip:9527/api

另外LXServer 接口地址不支持:http://lx-sync-server:9527/api ,添加时提示“请输入有效的接口地址!”。建议修正。

但在./xiaomusic_conf/plugins-config.json 直接添加( http://容器名:9527/api),测试可用。

评论

评论 1 - wudingjian

[2026-04-01 00:05:47] [0.5.0] [INFO] 192.168.20.10:38757 - "GET /api/search/online?keyword=%E9%9D%92%E8%8A%B1%E7%93%B7&plugin=all&page=1&limit=20 HTTP/1.1" 200 [2026-04-01 00:05:49] [0.5.0] [INFO] online_music.py:522: 推送歌单播放, 歌单名称: _online_webPush, 歌曲数量: 1, 设备ID: 266086334 [2026-04-01 00:05:49] [0.5.0] [INFO] online_music.py:401: 已重置追加歌曲页码 [2026-04-01 00:05:49] [0.5.0] [INFO] online_music.py:626: plugin_source_url : self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC45NiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjY1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuOTYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImR1cmF0aW9uIjogIjAzOjU5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9 [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:961: 启动后台构建 tag cache [2026-04-01 00:05:50] [0.5.0] [INFO] config_manager.py:62: Configuration saved to conf/setting.json [2026-04-01 00:05:50] [0.5.0] [INFO] config_manager.py:82: save_cur_config ok [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:186: 没打乱 _online_webPush ['青花瓷-周杰伦'] [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:630: 根据【_online_webPush】找到播放列表【_online_webPush】 [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:186: 没打乱 _online_webPush ['青花瓷-周杰伦'] [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:868: 开始播放列表_online_webPush 青花瓷-周杰伦 [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:244: play_internal. search_key: name:青花瓷-周杰伦 allow_download:True [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:591: 根据【青花瓷-周杰伦】找到歌曲【['青花瓷-周杰伦']】 [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:254: play_internal. names:['青花瓷-周杰伦'] 1 [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:928: cancel_group_next_timer {'266086334': <xiaomusic.device_player.XiaoMusicDevice object at 0xffff8702f610>} [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:913: cancel_next_timer did: 266086334 [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:923: 下一曲定时器不见了 did: 266086334 [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:348: cur_music 青花瓷-周杰伦 [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:1072: get_music_url name:青花瓷-周杰伦 [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:1088: get_music_url web music. name:青花瓷-周杰伦, url:self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC45NiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjY1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuOTYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImR1cmF0aW9uIjogIjAzOjU5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9 [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:1194: Using token proxy url: http://192.168.20.3:58090/proxy/music?token=cv46FHp76xY [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:888: group_force_stop_xiaoai 主卧小爱 [''] [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:917: 已从【cache/tag_cache.json】加载 tag cache [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:977: ignore_tag_absolute_dirs: [] [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:933: 保存:tag cache 已保存到【cache/tag_cache.json】 [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:1017: tag 更新完成 [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:424: force_stop_xiaoai player_pause device_id: ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:436: {'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 50, "loop_type": 1 }'}} [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:891: group_force_stop_xiaoai [''] [None] [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:351: 播放 http://192.168.20.3:58090/proxy/music?token=cv46FHp76xY [2026-04-01 00:05:50] [0.5.0] [INFO] file.py:519: [proxy:e66c871b] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC45NiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjY1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuOTYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImR1cmF0aW9uIjogIjAzOjU5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9', fragment='') [2026-04-01 00:05:50] [0.5.0] [INFO] file.py:524: [proxy:e66c871b] expand_self_url parsed=ParseResult(scheme='http', netloc='192.168.20.3:58090', path='/api/proxy/plugin-url', params='', query='data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC45NiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjY1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuOTYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImR1cmF0aW9uIjogIjAzOjU5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9', fragment='') final_url=http://192.168.20.3:58090/api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1 [2026-04-01 00:05:50] [0.5.0] [INFO] file.py:552: [proxy:e66c871b] mode=music timeout=600s netloc=192.168.20.3:58090 [2026-04-01 00:05:50] [0.5.0] [INFO] file.py:597: [proxy:e66c871b] initial GET url=http://192.168.20.3:58090/api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': ''} [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:724: play_one_url play_by_music_url device_id: ret:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}} url:http://192.168.20.3:58090/proxy/music?token=cv46FHp76xY audio_id:***** [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:703: group_player_play http://192.168.20.3:58090/proxy/music?token=cv46FHp76xY [''] [{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0}}] [2026-04-01 00:05:50] [0.5.0] [INFO] device_player.py:368: 【青花瓷-周杰伦】已经开始播放了 [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:1086: in _get_web_music_url [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:1088: get_music_url web music. name:青花瓷-周杰伦, url:self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC45NiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjY1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuOTYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImR1cmF0aW9uIjogIjAzOjU5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9 [2026-04-01 00:05:50] [0.5.0] [INFO] music_library.py:1194: Using token proxy url: http://192.168.20.3:58090/proxy/music?token=soSq40J8toU [2026-04-01 00:05:53] [0.5.0] [INFO] 192.168.20.10:38766 - "GET /getsetting HTTP/1.1" 200 [2026-04-01 00:05:53] [0.5.0] [INFO] 192.168.20.10:38768 - "GET /getversion HTTP/1.1" 200 [2026-04-01 00:05:53] [0.5.0] [INFO] 192.168.20.10:38766 - "GET /musiclist HTTP/1.1" 200 [2026-04-01 00:05:53] [0.5.0] [INFO] 192.168.20.10:38766 - "GET /curplaylist?did=266086334 HTTP/1.1" 200 [2026-04-01 00:05:53] [0.5.0] [INFO] 192.168.20.10:38772 - "GET /generate_ws_token?did=266086334 HTTP/1.1" 200 [2026-04-01 00:05:53] [0.5.0] [INFO] device_player.py:827: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 1, "volume": 50, "loop_type": 1 }'}} [2026-04-01 00:05:53] [0.5.0] [INFO] device_player.py:834: get_volume. volume:50 [2026-04-01 00:05:53] [0.5.0] [INFO] 192.168.20.10:38768 - "GET /getvolume?did=266086334 HTTP/1.1" 200 [2026-04-01 00:05:53] [0.5.0] [INFO] 192.168.20.10:38773 - "WebSocket /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiIyNjYwODYzMzQiLCJleHAiOjE3NzQ5NzM0NTMuMTUyODE1NiwiaWF0IjoxNzc0OTczMTUzLjE1MjgxNjV9.5KmTUFp7HVvh8te3c3Ex9PUnxud7Q93n2XpH7nVH1zU" [accepted] [2026-04-01 00:05:53] [0.5.0] [INFO] connection open [2026-04-01 00:05:53] [0.5.0] [INFO] 192.168.20.10:38770 - "GET /latestversion HTTP/1.1" 200 [2026-04-01 00:05:58] [0.5.0] [INFO] connection closed [2026-04-01 00:05:58] [0.5.0] [INFO] 192.168.20.10:38776 - "GET /getversion HTTP/1.1" 200 ……… [2026-04-01 00:05:58] [0.5.0] [INFO] 192.168.20.10:38777 - "GET /getsetting?need_device_list=true HTTP/1.1" 200 [2026-04-01 00:06:16] [0.5.0] [INFO] 192.168.20.10:38782 - "GET /downloadlog HTTP/1.1" 200 [2026-04-01 00:06:20] [0.5.0] [ERROR] music_utils.py:156: Error get_web_music_duration: Connection timeout to host http://192.168.20.3:58090/proxy/music?token=soSq40J8toU [2026-04-01 00:06:20] [0.5.0] [INFO] music_library.py:838: 网络音乐 青花瓷-周杰伦 时长: 0 秒 [2026-04-01 00:06:20] [0.5.0] [INFO] analytics.py:78: analytics run_with_cancel success [2026-04-01 00:06:20] [0.5.0] [INFO] device_player.py:381: 【青花瓷-周杰伦】不会设置下一首歌的定时器 [2026-04-01 00:06:20] [0.5.0] [INFO] 192.168.20.10:38757 - "POST /api/device/pushList HTTP/1.1" 200 [2026-04-01 00:06:50] [0.5.0] [INFO] file.py:519: [proxy:c052bc95] start is_radio=False url=self:///api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm [2026-04-01 00:06:50] [0.5.0] [INFO] music_library.py:1264: 链接处理前 $ParseResult(scheme='self', netloc='', path='/api/proxy/plugin-url', params='', query='data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC45NiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjY1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuOTYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImR1cmF0aW9uIjogIjAzOjU5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9', fragment='') [2026-04-01 00:06:50] [0.5.0] [INFO] file.py:524: [proxy:c052bc95] expand_self_url parsed=ParseResult(scheme='http', netloc='192.168.20.3:58090', path='/api/proxy/plugin-url', params='', query='data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgInR5cGVzIjogW3sidHlwZSI6ICIxMjhrIiwgInNpemUiOiAiMy42NSBNQiJ9LCB7InR5cGUiOiAiMzIwayIsICJzaXplIjogIjkuMTMgTUIifSwgeyJ0eXBlIjogImZsYWMiLCAic2l6ZSI6ICIyNC45NiBNQiJ9XSwgIl90eXBlcyI6IHsiMTI4ayI6IHsic2l6ZSI6ICIzLjY1IE1CIn0sICIzMjBrIjogeyJzaXplIjogIjkuMTMgTUIifSwgImZsYWMiOiB7InNpemUiOiAiMjQuOTYgTUIifX0sICJ0eXBlVXJsIjoge319LCAiaWQiOiAiMDAycVU1YVkzUXUyNHkiLCAidGl0bGUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImR1cmF0aW9uIjogIjAzOjU5IiwgImFydGlzdCI6ICJcdTU0NjhcdTY3NzBcdTRmMjYiLCAiYWxidW0iOiAiXHU2MjExXHU1Zjg4XHU1ZmQ5IiwgInBsYXRmb3JtIjogInR4IiwgImFydHdvcmsiOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1MDBNMDAwMDAyZUZVRm0yWFlaN3ouanBnIiwgImxyYyI6ICIiLCAibHJjVXJsIjogIiJ9', fragment='') final_url=http://192.168.20.3:58090/api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1 [2026-04-01 00:06:50] [0.5.0] [INFO] file.py:552: [proxy:c052bc95] mode=music timeout=600s netloc=192.168.20.3:58090 [2026-04-01 00:06:50] [0.5.0] [INFO] file.py:597: [proxy:c052bc95] initial GET url=http://192.168.20.3:58090/api/proxy/plugin-url?data=eyJfcmF3IjogeyJzaW5nZXIiOiAiXHU1NDY4XHU2NzcwXHU0ZjI2IiwgIm5hbWUiOiAiXHU5NzUyXHU4MmIxXHU3NGY3IiwgImFsYnVtTmFtZSI6ICJcdTYyMTFcdTVmODhcdTVmZDkiLCAiYWxidW1JZCI6ICIwMDJlRlVGbTJYWVo3eiIsICJzb3VyY2UiOiAidHgiLCAiaW50ZXJ2YWwiOiAiMDM6NTkiLCAic29uZ0lkIjogNDEwMzE2LCAiYWxidW1NaWQiOiAiMDAyZUZVRm0yWFlaN3oiLCAic3RyTWVkaWFNaWQiOiAiMDAxNXpSOEIzZ2pKTGwiLCAic29uZ21pZCI6ICIwMDJxVTVhWTNRdTI0eSIsICJpbWciOiAiaHR0cHM6Ly95Lmd0aW1nLmNuL211c2ljL3Bob3RvX25ldy9UMDAyUjUwMHg1 headers={'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7', 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8', 'cache-control': 'no-cache', 'pragma': 'no-cache', 'priority': 'u=0, i', 'sec-ch-ua': '"Google Chrome";v="143", "Chromium";v="143", "Not A(Brand";v="24"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'sec-fetch-dest': 'document', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'none', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36', 'Authorization': '*'} [2026-04-01 00:08:00] [0.5.0] [ERROR] file.py:751: [proxy:e66c871b] ClientConnectionError: Cannot connect to host 192.168.20.3:58090 ssl:default [Connect call failed ('192.168.20.3', 58090)] Traceback (most recent call last): File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1298, in _wrap_create_connection sock = await aiohappyeyeballs.start_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<6 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohappyeyeballs/impl.py", line 122, in start_connection raise first_exception File "/app/.venv/lib/python3.14/site-packages/aiohappyeyeballs/impl.py", line 73, in start_connection sock = await _connect_sock( ^^^^^^^^^^^^^^^^^^^^ ...<6 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohappyeyeballs/impl.py", line 208, in _connect_sock await loop.sock_connect(sock, address) File "/usr/local/lib/python3.14/asyncio/selector_events.py", line 645, in sock_connect return await fut ^^^^^^^^^ File "/usr/local/lib/python3.14/asyncio/selector_events.py", line 685, in _sock_connect_cb raise OSError(err, f'Connect call failed {address}') TimeoutError: [Errno 110] Connect call failed ('192.168.20.3', 58090)

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 601, in _proxy_handler resp = await session.get(url, headers=headers, allow_redirects=False) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/client.py", line 779, in _request resp = await handler(req) ^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/client.py", line 734, in _connect_and_send_request conn = await self._connector.connect( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ req, traces=traces, timeout=real_timeout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 672, in connect proto = await self._create_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1239, in _create_connection _, proto = await self._create_direct_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1611, in _create_direct_connection raise last_exc File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1580, in _create_direct_connection transp, proto = await self._wrap_create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<7 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1321, in _wrap_create_connection raise client_error(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 192.168.20.3:58090 ssl:default [Connect call failed ('192.168.20.3', 58090)] [2026-04-01 00:08:00] [0.5.0] [ERROR] Exception in ASGI application Traceback (most recent call last): File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1298, in _wrap_create_connection sock = await aiohappyeyeballs.start_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<6 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohappyeyeballs/impl.py", line 122, in start_connection raise first_exception File "/app/.venv/lib/python3.14/site-packages/aiohappyeyeballs/impl.py", line 73, in start_connection sock = await _connect_sock( ^^^^^^^^^^^^^^^^^^^^ ...<6 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohappyeyeballs/impl.py", line 208, in _connect_sock await loop.sock_connect(sock, address) File "/usr/local/lib/python3.14/asyncio/selector_events.py", line 645, in sock_connect return await fut ^^^^^^^^^ File "/usr/local/lib/python3.14/asyncio/selector_events.py", line 685, in _sock_connect_cb raise OSError(err, f'Connect call failed {address}') TimeoutError: [Errno 110] Connect call failed ('192.168.20.3', 58090)

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 601, in _proxy_handler resp = await session.get(url, headers=headers, allow_redirects=False) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/client.py", line 779, in _request resp = await handler(req) ^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/client.py", line 734, in _connect_and_send_request conn = await self._connector.connect( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ req, traces=traces, timeout=real_timeout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 672, in connect proto = await self._create_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1239, in _create_connection _, proto = await self._create_direct_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1611, in _create_direct_connection raise last_exc File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1580, in _create_direct_connection transp, proto = await self._wrap_create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<7 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1321, in _wrap_create_connection raise client_error(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 192.168.20.3:58090 ssl:default [Connect call failed ('192.168.20.3', 58090)]

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/app/.venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "/app/.venv/lib/python3.14/site-packages/fastapi/routing.py", line 120, in app response = await f(request) ^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/fastapi.py", line 137, in _sentry_app return await old_app(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/fastapi/routing.py", line 674, in app raw_response = await run_endpoint_function( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...❤️ lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/fastapi/routing.py", line 328, in run_endpoint_function return await dependant.call(**values) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/xiaomusic/api/routers/file.py", line 788, in proxy_with_type return await _proxy_handler(urlb64, is_radio=is_radio) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/xiaomusic/api/routers/file.py", line 753, in _proxy_handler raise HTTPException(status_code=502, detail=f"连接错误: {str(e)}") from e fastapi.exceptions.HTTPException: 502: 连接错误: Cannot connect to host 192.168.20.3:58090 ssl:default [Connect call failed ('192.168.20.3', 58090)]

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/asgi.py", line 234, in _run_app return await self.app( ^^^^^^^^^^^^^^^ scope, receive, _sentry_wrapped_send ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/starlette/applications.py", line 90, in call await self.middleware_stack(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 186, in call raise exc File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 164, in call await self.app(scope, receive, _send) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/gzip.py", line 29, in call await responder(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/gzip.py", line 46, in call await self.app(scope, receive, self.send_with_compression) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/cors.py", line 88, in call await self.app(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 257, in _sentry_exceptionmiddleware_call await old_call(self, scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/exceptions.py", line 63, in call await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app raise exc File "/app/.venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call await self.app(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/starlette/routing.py", line 660, in call await self.middleware_stack(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/starlette/routing.py", line 680, in app await route.handle(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/starlette/routing.py", line 276, in handle await self.app(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/fastapi/routing.py", line 134, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 59, in wrapped_app response = await handler(conn, exc) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 219, in _sentry_patched_exception_handler _capture_exception(exp, handled=True) ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 181, in _capture_exception event, hint = event_from_exception( ~~~~~~~~~~~~~~~~~~~~^ exception, ^^^^^^^^^^ client_options=hub.client.options if hub.client else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mechanism={"type": StarletteIntegration.identifier, "handled": handled}, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 1091, in event_from_exception "values": exceptions_from_error_tuple( ~~~~~~~~~~~~~~~~~~~~~~~~~~~^ exc_info, client_options, mechanism ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 966, in exceptions_from_error_tuple single_exception_from_error_tuple( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ exc_type, exc_value, tb, client_options, mechanism ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 786, in single_exception_from_error_tuple serialize_frame( ~~~~~~~~~~~~~~~^ tb.tb_frame, ^^^^^^^^^^^^ ...❤️ lines>... max_value_length=max_value_length, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 675, in serialize_frame rv["vars"] = copy(frame.f_locals) ~~~~^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.14/copy.py", line 90, in copy rv = reductor(4) TypeError: cannot pickle 'FrameLocalsProxy' object

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/app/.venv/lib/python3.14/site-packages/uvicorn/protocols/http/h11_impl.py", line 410, in run_asgi result = await app( # type: ignore[func-returns-value] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ self.scope, self.receive, self.send ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in call return await self.app(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/fastapi/applications.py", line 1159, in call await super().call(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 365, in _sentry_patched_asgi_app return await middleware(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/asgi.py", line 146, in _run_asgi3 return await self._run_app(scope, receive, send, asgi_version=3) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/asgi.py", line 238, in _run_app _capture_exception( ~~~~~~~~~~~~~~~~~~^ hub, exc, mechanism_type=self.mechanism_type ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/asgi.py", line 62, in _capture_exception event, hint = event_from_exception( ~~~~~~~~~~~~~~~~~~~~^ exc, ^^^^ client_options=hub.client.options, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mechanism={"type": mechanism_type, "handled": False}, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 1091, in event_from_exception "values": exceptions_from_error_tuple( ~~~~~~~~~~~~~~~~~~~~~~~~~~~^ exc_info, client_options, mechanism ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 966, in exceptions_from_error_tuple single_exception_from_error_tuple( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ exc_type, exc_value, tb, client_options, mechanism ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 786, in single_exception_from_error_tuple serialize_frame( ~~~~~~~~~~~~~~~^ tb.tb_frame, ^^^^^^^^^^^^ ...❤️ lines>... max_value_length=max_value_length, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 675, in serialize_frame rv["vars"] = copy(frame.f_locals) ~~~~^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.14/copy.py", line 90, in copy rv = reductor(4) TypeError: cannot pickle 'FrameLocalsProxy' object [2026-04-01 00:08:10] [0.5.0] [INFO] 192.168.20.10:38801 - "GET /getsetting HTTP/1.1" 200 [2026-04-01 00:08:10] [0.5.0] [INFO] 192.168.20.10:38802 - "GET /getversion HTTP/1.1" 200 [2026-04-01 00:08:10] [0.5.0] [INFO] 192.168.20.10:38801 - "GET /musiclist HTTP/1.1" 200 [2026-04-01 00:08:10] [0.5.0] [INFO] 192.168.20.10:38801 - "GET /curplaylist?did=266086334 HTTP/1.1" 200 [2026-04-01 00:08:10] [0.5.0] [INFO] 192.168.20.10:38805 - "GET /generate_ws_token?did=266086334 HTTP/1.1" 200 [2026-04-01 00:08:10] [0.5.0] [INFO] 192.168.20.10:38806 - "WebSocket /ws/playingmusic?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaWQiOiIyNjYwODYzMzQiLCJleHAiOjE3NzQ5NzM1OTAuMTU0NTMxNSwiaWF0IjoxNzc0OTczMjkwLjE1NDUzMzZ9.OCW_aIdhpr35K8uMkMwi7H381VExlxRkx50g1JXDupA" [accepted] [2026-04-01 00:08:10] [0.5.0] [INFO] connection open [2026-04-01 00:08:10] [0.5.0] [INFO] device_player.py:827: get_volume. playing_info:{'code': 0, 'message': "Msg has been successfully proxy to the device, this service is a simple proxy, if you encounter any problems pls contact ROM's developers directly!!!", 'data': {'code': 0, 'info': '{ "status": 0, "volume": 50, "loop_type": 1 }'}} [2026-04-01 00:08:10] [0.5.0] [INFO] device_player.py:834: get_volume. volume:50 [2026-04-01 00:08:10] [0.5.0] [INFO] 192.168.20.10:38802 - "GET /getvolume?did=266086334 HTTP/1.1" 200 [2026-04-01 00:08:10] [0.5.0] [INFO] 192.168.20.10:38804 - "GET /latestversion HTTP/1.1" 200 [2026-04-01 00:09:00] [0.5.0] [ERROR] file.py:751: [proxy:c052bc95] ClientConnectionError: Cannot connect to host 192.168.20.3:58090 ssl:default [Connect call failed ('192.168.20.3', 58090)] Traceback (most recent call last): File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1298, in _wrap_create_connection sock = await aiohappyeyeballs.start_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<6 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohappyeyeballs/impl.py", line 122, in start_connection raise first_exception File "/app/.venv/lib/python3.14/site-packages/aiohappyeyeballs/impl.py", line 73, in start_connection sock = await _connect_sock( ^^^^^^^^^^^^^^^^^^^^ ...<6 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohappyeyeballs/impl.py", line 208, in _connect_sock await loop.sock_connect(sock, address) File "/usr/local/lib/python3.14/asyncio/selector_events.py", line 645, in sock_connect return await fut ^^^^^^^^^ File "/usr/local/lib/python3.14/asyncio/selector_events.py", line 685, in _sock_connect_cb raise OSError(err, f'Connect call failed {address}') TimeoutError: [Errno 110] Connect call failed ('192.168.20.3', 58090)

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 601, in _proxy_handler resp = await session.get(url, headers=headers, allow_redirects=False) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/client.py", line 779, in _request resp = await handler(req) ^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/client.py", line 734, in _connect_and_send_request conn = await self._connector.connect( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ req, traces=traces, timeout=real_timeout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 672, in connect proto = await self._create_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1239, in _create_connection _, proto = await self._create_direct_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1611, in _create_direct_connection raise last_exc File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1580, in _create_direct_connection transp, proto = await self._wrap_create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<7 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1321, in _wrap_create_connection raise client_error(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 192.168.20.3:58090 ssl:default [Connect call failed ('192.168.20.3', 58090)] [2026-04-01 00:09:00] [0.5.0] [ERROR] Exception in ASGI application Traceback (most recent call last): File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1298, in _wrap_create_connection sock = await aiohappyeyeballs.start_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<6 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohappyeyeballs/impl.py", line 122, in start_connection raise first_exception File "/app/.venv/lib/python3.14/site-packages/aiohappyeyeballs/impl.py", line 73, in start_connection sock = await _connect_sock( ^^^^^^^^^^^^^^^^^^^^ ...<6 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohappyeyeballs/impl.py", line 208, in _connect_sock await loop.sock_connect(sock, address) File "/usr/local/lib/python3.14/asyncio/selector_events.py", line 645, in sock_connect return await fut ^^^^^^^^^ File "/usr/local/lib/python3.14/asyncio/selector_events.py", line 685, in _sock_connect_cb raise OSError(err, f'Connect call failed {address}') TimeoutError: [Errno 110] Connect call failed ('192.168.20.3', 58090)

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/app/xiaomusic/api/routers/file.py", line 601, in _proxy_handler resp = await session.get(url, headers=headers, allow_redirects=False) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/client.py", line 779, in _request resp = await handler(req) ^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/client.py", line 734, in _connect_and_send_request conn = await self._connector.connect( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ req, traces=traces, timeout=real_timeout ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 672, in connect proto = await self._create_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1239, in _create_connection _, proto = await self._create_direct_connection(req, traces, timeout) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1611, in _create_direct_connection raise last_exc File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1580, in _create_direct_connection transp, proto = await self._wrap_create_connection( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...<7 lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/aiohttp/connector.py", line 1321, in _wrap_create_connection raise client_error(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host 192.168.20.3:58090 ssl:default [Connect call failed ('192.168.20.3', 58090)]

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/app/.venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "/app/.venv/lib/python3.14/site-packages/fastapi/routing.py", line 120, in app response = await f(request) ^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/fastapi.py", line 137, in _sentry_app return await old_app(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/fastapi/routing.py", line 674, in app raw_response = await run_endpoint_function( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ...❤️ lines>... ) ^ File "/app/.venv/lib/python3.14/site-packages/fastapi/routing.py", line 328, in run_endpoint_function return await dependant.call(**values) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/xiaomusic/api/routers/file.py", line 788, in proxy_with_type return await _proxy_handler(urlb64, is_radio=is_radio) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/xiaomusic/api/routers/file.py", line 753, in _proxy_handler raise HTTPException(status_code=502, detail=f"连接错误: {str(e)}") from e fastapi.exceptions.HTTPException: 502: 连接错误: Cannot connect to host 192.168.20.3:58090 ssl:default [Connect call failed ('192.168.20.3', 58090)]

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/asgi.py", line 234, in _run_app return await self.app( ^^^^^^^^^^^^^^^ scope, receive, _sentry_wrapped_send ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/starlette/applications.py", line 90, in call await self.middleware_stack(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 186, in call raise exc File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/errors.py", line 164, in call await self.app(scope, receive, _send) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/gzip.py", line 29, in call await responder(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/gzip.py", line 46, in call await self.app(scope, receive, self.send_with_compression) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/cors.py", line 88, in call await self.app(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 257, in _sentry_exceptionmiddleware_call await old_call(self, scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/starlette/middleware/exceptions.py", line 63, in call await wrap_app_handling_exceptions(self.app, conn)(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 53, in wrapped_app raise exc File "/app/.venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 42, in wrapped_app await app(scope, receive, sender) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 158, in _create_span_call return await old_call(app, scope, new_receive, new_send, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/fastapi/middleware/asyncexitstack.py", line 18, in call await self.app(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/starlette/routing.py", line 660, in call await self.middleware_stack(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/starlette/routing.py", line 680, in app await route.handle(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/starlette/routing.py", line 276, in handle await self.app(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/fastapi/routing.py", line 134, in app await wrap_app_handling_exceptions(app, request)(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/starlette/_exception_handler.py", line 59, in wrapped_app response = await handler(conn, exc) ^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 219, in _sentry_patched_exception_handler _capture_exception(exp, handled=True) ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 181, in _capture_exception event, hint = event_from_exception( ~~~~~~~~~~~~~~~~~~~~^ exception, ^^^^^^^^^^ client_options=hub.client.options if hub.client else None, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mechanism={"type": StarletteIntegration.identifier, "handled": handled}, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 1091, in event_from_exception "values": exceptions_from_error_tuple( ~~~~~~~~~~~~~~~~~~~~~~~~~~~^ exc_info, client_options, mechanism ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 966, in exceptions_from_error_tuple single_exception_from_error_tuple( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ exc_type, exc_value, tb, client_options, mechanism ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 786, in single_exception_from_error_tuple serialize_frame( ~~~~~~~~~~~~~~~^ tb.tb_frame, ^^^^^^^^^^^^ ...❤️ lines>... max_value_length=max_value_length, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 675, in serialize_frame rv["vars"] = copy(frame.f_locals) ~~~~^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.14/copy.py", line 90, in copy rv = reductor(4) TypeError: cannot pickle 'FrameLocalsProxy' object

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "/app/.venv/lib/python3.14/site-packages/uvicorn/protocols/http/h11_impl.py", line 410, in run_asgi result = await app( # type: ignore[func-returns-value] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ self.scope, self.receive, self.send ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/uvicorn/middleware/proxy_headers.py", line 60, in call return await self.app(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/fastapi/applications.py", line 1159, in call await super().call(scope, receive, send) File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/starlette.py", line 365, in _sentry_patched_asgi_app return await middleware(scope, receive, send) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/asgi.py", line 146, in _run_asgi3 return await self._run_app(scope, receive, send, asgi_version=3) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/asgi.py", line 238, in _run_app _capture_exception( ~~~~~~~~~~~~~~~~~~^ hub, exc, mechanism_type=self.mechanism_type ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/integrations/asgi.py", line 62, in _capture_exception event, hint = event_from_exception( ~~~~~~~~~~~~~~~~~~~~^ exc, ^^^^ client_options=hub.client.options, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ mechanism={"type": mechanism_type, "handled": False}, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 1091, in event_from_exception "values": exceptions_from_error_tuple( ~~~~~~~~~~~~~~~~~~~~~~~~~~~^ exc_info, client_options, mechanism ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 966, in exceptions_from_error_tuple single_exception_from_error_tuple( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ exc_type, exc_value, tb, client_options, mechanism ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 786, in single_exception_from_error_tuple serialize_frame( ~~~~~~~~~~~~~~~^ tb.tb_frame, ^^^^^^^^^^^^ ...❤️ lines>... max_value_length=max_value_length, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/app/.venv/lib/python3.14/site-packages/sentry_sdk/utils.py", line 675, in serialize_frame rv["vars"] = copy(frame.f_locals) ~~~~^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.14/copy.py", line 90, in copy rv = reductor(4) TypeError: cannot pickle 'FrameLocalsProxy' object [2026-04-01 00:12:34] [0.5.0] [INFO] connection closed [2026-04-01 00:12:34] [0.5.0] [INFO] 192.168.20.10:38881 - "GET /getversion HTTP/1.1" 200 ……****…… [2026-04-01 00:12:34] [0.5.0] [INFO] 192.168.20.10:38882 - "GET /getsetting?need_device_list=true HTTP/1.1" 200

评论 2 - boluofan

1.lxmusic插件问题

lxmusic插件,✅ 测试成功,可正常调用!

Image 可以搜索歌曲,但无法播放。原因不明。 Image LXServer 有用名和密码,api调用时,不需要验证吗? Image # 2.LXServer 接口地址问题 [http://主机ip:9527/api](http://%E4%B8%BB%E6%9C%BAip:9527/api) 检测不到,无法用,也不知为啥?,只能用 [http://容器ip:9527/api](http://%E5%AE%B9%E5%99%A8ip:9527/api)

另外LXServer 接口地址不支持:http://lx-sync-server:9527/api ,添加时提示“请输入有效的接口地址!”。建议修正。

但在./xiaomusic_conf/plugins-config.json 直接添加( http://容器名:9527/api),测试可用。%EF%BC%8C%E6%B5%8B%E8%AF%95%E5%8F%AF%E7%94%A8%E3%80%82)

问题1: onlineSearch的洛雪生态是调用了lxserver接口提供的接口进行歌曲搜索+播放链接获取,未实现自动换源+音源重定向功能,如果取不到则会播放失败。可更新lxserver端启用插件或者切换其他平台搜索测试。我本地使用这个代理链接,请求正常。可以获取到播放链接。

Image

问题2:LXServer 有用名和密码,api调用时,不需要验证吗?当前不需要,lxserver现在开放的【歌曲搜索】和【播放链接获取】都是不需要鉴权的开放接口,暂时不需要配置用户名、密码

问题3:当前配置界面的lxserver接口地址,进行了简单的ip和域名的校验。你当前使用的这个地址应该是自定义的host。所以前端校验不通过,但可正常请求,所以配置在conf文件中可正常使用。

问题4:lxserver服务,主机ip+端口也可以正常调用。甚至可以暴露在公网(不建议!!!)开放给其他人调用。建议排查下这个端口是否是容器部署时的宿主机端口还是容器端口。


评论 3 - wudingjian

问题1、问题4:经排查,是我有防火墙(ufw-docker),关闭后,一切正常,谢谢作者。

问题3:http://容器ip:9527 ,这种方式的缺陷是一般每次容器启用,ip会变(当然也可以固定容器的ip,比较麻烦),如与LXServer在同容器网段内,用http://容器名:9527 更持久,更便捷。供参考


评论 4 - wudingjian

@hanxi 作者您好

经排查ufw 拦截的是这条

2026-04-01T22:32:22.649322+08:00 *** kernel: [UFW BLOCK] IN=br-9a983b0ab8e0 OUT= MAC=36:51:3b:61:**:2a:ee:70:e5:**:ee:6b:08:** SRC=172.19.0.24 DST=192.168.20.3 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=17833 DF PROTO=TCP SPT=50200 DPT=58090 WINDOW=64240 RES=0x00 SYN URGP=0

这条日志表示从Docker容器(IP为172.19.0.24)发往主机192.168.20.3的TCP连接请求(目标端口58090)被UFW拦截了。 xiaomusic 的容器ip:172.19.0.24,端口映射: ports: - 58090:8090 宿主机ip:192.168.20.3

我用sudo ufw allow from 172.19.0.0/24 to any port 58090 proto tcp 这条规则放行了,目前没有问题。

有点疑惑:上述的播放lxserver服务链接时,为何要从容器(IP为172.19.0.24)内部再去访问宿主机的ip(192.168.20.3)的58090端口? 这不就是自已访问自已嘛


评论 5 - hanxi

我也不知道为啥,难道是/prooxy接口?

评论 6 - boluofan

LX Music Sync Server v1.8.2 这个版本之后对接口增加了Token限制。如需使用LX Server,暂时不要升级到该版本,等onlineSearch新版本适配。

Issue 链接

基于 MIT 许可发布