MoePlayer/cPlayer

是不是可以给更新列表歌曲url地址的接口呢

Opened this issue · 13 comments

有时候歌曲链接会失效,需要接口更新播放url,是不是可以更丰富点呢

EYHN commented
  • cplayer.add(item: IAudioItem) 添加歌曲。
  • cplayer.remove(item: IAudioItem) 删除歌曲。

能不能满足你的需求?

Copay commented

有时候歌曲链接会失效,需要接口更新播放url


失效时间不确定,所以最好的办法就是播放时更新URL
add&remove方法的话,如下所示

export interface IAudioItem {
name: string; //名称
poster?: string; //海报
artist?: string; //艺术家
src: string; //音频
lyric?: Lyric | string; // 歌词
sublyric?: Lyric | string; // 小歌词;
album?: string; // 专辑 & 唱片
}

会导致多余的请求(当然静态资源会被缓存)以及列表内顺序改变。


Update:
没插入的图片并不会产生多余请求...而如果之前在内存里缓存了除src以外的属性,是不需要再请求这些属性的...
所以会导致多余请求这句不是正确的...

我给个建议,可以利用生成器函数暂停播放的过程,然后通过ajax/fetch请求与处理得到歌曲url,为list内该音乐的src赋值,然后启动播放过程。

这个过程只需要暴露给用户一个callback与一个暴露变量(属性),监控该属性,当赋值时自动进行接下来的动作。callback的目的是对该变量(属性)赋值...

或者提供一个src的修改方法,用来代替被监控的暴露变量(属性)

EYHN commented

为什么会突然失效呢?

@EYHN 比如网易云音乐的歌曲直链,25分钟后就会失效,其它平台应该也有类似设定。

EYHN commented

把src写成一个function如何?

Copay commented

@journey-ad 建议尝试一下jad的网易云音乐api,进而理解该api是如何避免该问题得到

Copay commented

额不对你是jad

Copay commented

@EYHN fetch是一个异步过程/ajax同样也是一个异步过程.

cPlayer/src/lib/index.ts

Lines 151 to 156 in 22abb44

public openAudio(audio: IAudioItem = this.nowplay) {
if (audio) {
this.audioElement.src = this.nowplay.src;
this.emit('openaudio', audio);
}
}

修正src的方法

把emit注入到该function的回调末尾即可

Copay commented

比如说

function abc(next){
    fetch(xxx).then(()=>next())
}
EYHN commented
let player = new cplayer({
  playlist: [
    {
      src: () => { return fetch(xxx).then((res)=>res.text()) }
    }
  ]
})

我的意思是这样,然后每次都重新执行函数来获取src。

Copay commented

@EYHN 你那样会返回一个Promise,你需要在返回的Promise继续进行剩下来操作.在得到数据之前,对src的赋值过程是暂停的

播放下一首的时候给一个回调方法,允许修改列表除了现在播放的歌曲外的其他歌曲的信息,包括封面、歌曲链接等

0 0 你们都是大佬...
为什么不试试 302 呢?
比如: https://api.a632079.me/nm/redirect/music/477839635