rnons / lord

A unified interface to online radios using mpd/mplayer as backend
http://rnons.github.io/lord/
The Unlicense
42 stars 5 forks source link

稳定问题。。? #1

Closed lingnand closed 10 years ago

lingnand commented 11 years ago

刚刚试用了lord,很不错。

不过发现在jing模式下要是网速不够好在切歌后断了一下,好像就再也连不上了。我用的是mpc,这种情况下打mpc playlist没有任何output。mpd端口显示updating lord/radio.m4a之后也就没有反应了。只能重新打一行lord <Command>。不知道有没有什么比较好的办法。。?

lingnand commented 11 years ago

如果lord可以一下子cache 3~4 首歌会不会好一些。。?

rnons commented 11 years ago

感谢你的反馈。

lord目前确实是有些问题:只有当一首歌cache完成后,才能切歌。 在网络不好,播放位置还没cache到时,mpd会stop然后尝试切歌。lord阻止了切换到下一首歌(直到cache完成),不然可能导致每首歌听几秒就切到下一首。

我目前还不知道怎么在lord/libmpd中区分用户是主动next还是因为网络卡顿导致的stop。如果能区分的话,就可以在用户主动next时,停止当前下载。

我早就有计划在配置文件中加一个选项,切换高码率和普通码率。在上一个问题暂时无法解决的情况下,网络不好的用户可以通过切换码率来流畅收听。

cache 3~4首歌操作起来似乎比较麻烦。

rnons commented 11 years ago

commit 8e2981049c 现在配置文件是yaml格式,编辑lord.yaml,将highquality设为false切换到普通音质。

lingnand commented 11 years ago

现在是不是jing的api改了啊;好像不好用了

rnons commented 11 years ago

报什么错?有没有试试把lord.yml删掉

lingnand commented 11 years ago

呵呵 我自己问题,应该是太久没重新登陆token过期了。。

lingnand commented 11 years ago

我现在在play around with Jing.FM api, 有些问题想请教下

  1. /music/post_heard_song 必须是每首歌都用一遍么?不用会怎么样
  2. /music/post_love_song 和 /music/post_hate_song 是怎么知道哪首歌的?我看了你写的api 但是那些参数好像都没什么关系
lingnand commented 11 years ago

好吧 第二个问题解决了。似乎是tid

rnons commented 11 years ago

其实目前lord和jinkell都没用上post_heard_song,也就是说在lord和jinkell里收听,不会记录到jing.fm。 在post_heard_song之前,似乎需要POST /click/playdata/post至少6次。我也没实际试过,但在网页收听jing.fm时,可以观察到连续的(第一次间隔10秒,然后间隔30秒)POST /click/playdata/post后,会post_half,然后才post_heard_song。

有uid和tid,jing.fm则会把tid对应的歌曲记录到你的收听记录里。欢迎交流

lingnand commented 11 years ago

fetch_pls 里面 abid aid d dtime fs y 各是什么意思啊?还有fid给的image地址前缀应该是什么?

rnons commented 11 years ago

abid - album id aid - artist id d - duration dtime - 未知 (一般为空) fs - file size (bytes) y - 未知 (一般为空)

在Dragonfly或Developer Tools里找一个album art的地址: http://image.jing.fm/album/AM/2012/0405/09/XC/AM2012040509XCl.jpg (大图), http://image.jing.fm/album/AT/2012/0405/09/XC/AT2012040509XCl.jpg (小图) 它对应的 "fid":"2012040509XCl.jpg","fs":10071501,"mid":"2012040509KEK.m4a" image地址中的2012/0405/09来自mid,XC来自fid

lingnand commented 11 years ago

恩 现在这些api方面的东西都搞定了,唯一的就是mp4 AAC decode的问题。你知道什么类似mpg123的简单的mp4 decoder么?

rnons commented 11 years ago

我之前也想找类似mpg123的mp4 decoder,不过没有找到。所以jinkell用的是mplayer。我在豆瓣小组发的贴有人回复说可以考虑gstreamer,但是我也没试过。http://www.douban.com/group/topic/37001485/

lingnand commented 11 years ago

来汇报下我尝试的情况。 我看了mpd的source code似乎是基于ffmpeg的,所以先试了用ffmpeg的libavcodec, 后来发现faad的api好像更简单所以就转用了faad。可是做完后才明白faad其实只是单纯的aac stream decoder,没办法dig into歌曲的mp4 container。 现在又重新用回了libavcodec。mp3什么的都能解了,但是比较痛苦的是m4a的sample format还不一样,decode之后还要resample。

lingnand commented 11 years ago

吸取你的想法改写了个player FMD

类似mpd是一个server client model (client在FMC), 但是相对于依赖mpd可以有更多的control, 比如可以like or ban a song。

rnons commented 11 years ago

赞。基于mpd的好处是有丰富的客户端可以用,比如显示歌词,同步到last.fm等等 要给Lord增加like/ban功能也不难,lord参考了mpd,在播放时会将当前歌曲信息保存到state文件,增加两个commands就可以like/ban了。

lingnand commented 10 years ago

今天晚上又发现两个比较有用的method

Method call Argument Description
jing.fm/api/v1/app/fetch_top ps=<number> Return an array of songs similar to calling fetch_pls
jing.fm/api/v1/app/fetch_natural ps=<number> Return an array of {"fid":"<album art>", "sw":"<search term>"} which contains the trending search terms
rnons commented 10 years ago

在2.20131201版本后,lord在mpd不可用的情况下会fallback至mplayer。 mplayer会自动边stream边play,我看可以把这个issue关了

rnons commented 10 years ago

这个问题现在彻底解决了,(刚发现)mpd自0.18版本以后,已经可以直接播放远程的mp4文件,而不用下载再播放。

Library dependencies have been updated. Various obsolete plugins have been removed (e.g. soup, mp4ff, ffado).

另外,mpd自0.19版本以后增加了addtagid命令,可以在加载歌曲后修改tag,因此现在lord支持的所有电台都能够(在mpc或其它客户端)中正常显示歌曲信息。