Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
pengdyzhou opened this issue Aug 19, 2017 · 13 comments
Open

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

pengdyzhou opened this issue Aug 19, 2017 · 13 comments

Comments

@pengdyzhou
Copy link

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

@EYHN
Copy link
Member

EYHN commented Aug 25, 2017

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

能不能满足你的需求?

@Copay
Copy link
Member

Copay commented Aug 25, 2017

有时候歌曲链接会失效,需要接口更新播放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
Copy link
Member

EYHN commented Aug 26, 2017

为什么会突然失效呢?

@journey-ad
Copy link
Contributor

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

@EYHN
Copy link
Member

EYHN commented Aug 26, 2017

把src写成一个function如何?

@Copay
Copy link
Member

Copay commented Aug 26, 2017

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

@Copay
Copy link
Member

Copay commented Aug 26, 2017

额不对你是jad

@Copay
Copy link
Member

Copay commented Aug 26, 2017

@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
Copy link
Member

Copay commented Aug 26, 2017

比如说

function abc(next){
    fetch(xxx).then(()=>next())
}

@EYHN
Copy link
Member

EYHN commented Aug 26, 2017

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

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

@Copay
Copy link
Member

Copay commented Aug 26, 2017

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

@pengdyzhou
Copy link
Author

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

@a632079
Copy link

a632079 commented Feb 20, 2018

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants