Angular 如何在流式传输音频文件时设置HTTP头?
我正在按照教程“”进行操作,并设法使音频播放器正常工作 但是,为了从我的服务器加载音频,我需要设置标题。有办法做到这一点吗?对于所有其他请求,我已经使用了Angular 如何在流式传输音频文件时设置HTTP头?,angular,rxjs,html5-audio,audio-streaming,Angular,Rxjs,Html5 Audio,Audio Streaming,我正在按照教程“”进行操作,并设法使音频播放器正常工作 但是,为了从我的服务器加载音频,我需要设置标题。有办法做到这一点吗?对于所有其他请求,我已经使用了HttpInterceptor,但在加载音频文件时,似乎已绕过了侦听器 下面的代码是如何加载和播放音频的: 私有audioObj=新音频(); // ... 私有streamObservable(url:string):可观察{ 返回新的可观察对象(观察者=>{ //播放音频 this.audioObj.src=url; this.audio
HttpInterceptor
,但在加载音频文件时,似乎已绕过了侦听器
下面的代码是如何加载和播放音频的:
私有audioObj=新音频();
// ...
私有streamObservable(url:string):可观察{
返回新的可观察对象(观察者=>{
//播放音频
this.audioObj.src=url;
this.audioObj.load();
this.audioObj.play().then();
常量处理程序=(事件:事件)=>{
此.UpdateState事件(事件);
观察员:下一个(事件);
};
this.addEvents(this.audioObj、this.audioEvents、handler);
return()=>{
//别玩了
this.audioObj.pause();
this.audioObj.currentTime=0;
//删除事件侦听器
this.removeEvents(this.audioObj、this.audioEvents、handler);
//重置状态
这个.resetState();
};
});
}
您可以将授权标头作为URL参数添加到音频URL中,并与服务器中的自定义身份验证处理程序相结合
可选地(如果不需要流媒体),使用angularHttpClient
将音频文件作为Blob下载:
private play可观察(url:string):可观察{
this.http.get(url,{responseType:'blob'})
.烟斗(
映射(blob=>window.URL.createObjectURL(blob)),
开关映射(url=>{
返回新的可观察对象(观察者=>{
//播放音频
this.audioObj.src=url;
this.audioObj.load();
this.audioObj.play().then();
常量处理程序=(事件:事件)=>{
此.UpdateState事件(事件);
观察员:下一个(事件);
};
this.addEvents(this.audioObj、this.audioEvents、handler);
return()=>{
//别玩了
this.audioObj.pause();
this.audioObj.currentTime=0;
//删除事件侦听器
this.removeEvents(this.audioObj、this.audioEvents、handler);
//重置状态
这个.resetState();
window.URL.revokeObjectURL(URL)
};
})
})
)
你想通过流媒体播放吗?@RafiHenig理想情况下,我想真正将音频从服务器流到客户端,这样我就不必下载整个文件,但他的任务似乎更具挑战性。现在,我很乐意从服务器加载文件内容并播放(“流”)它在客户端。说到..在通过输出设备实际播放音频数据之前,是否可以转换音频数据?这对于调节音量和/或其他效果来说很方便。我现在明白了为什么你问我是否需要“通过流媒体”播放音频数据。我想这是一个误解。您的解决方案首先下载整个文件,然后播放该文件。不幸的是,在我的情况下,这不是一个解决方案,因为用户将不得不等待太长时间,直到音频播放。我以为您说“现在我很高兴从服务器加载文件内容并播放(“流”)是的,我想那是因为“流”这里有点模棱两可。我的意思是,我不需要像spotify/audible这样更复杂的机制,你可以立即跳转到任意位置。我认为他们所做的基本上是请求特定的音频块,并只将这些字节发送给客户端。这是另一个级别-但我需要(至少)播放音频单击“播放”按钮后立即播放。某些文件可能超过30MB,等待时间太长:/抱歉造成混淆。