Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何在流式传输音频文件时设置HTTP头?_Angular_Rxjs_Html5 Audio_Audio Streaming - Fatal编程技术网

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中,并与服务器中的自定义身份验证处理程序相结合

可选地(如果不需要流媒体),使用angular
HttpClient
将音频文件作为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,等待时间太长:/抱歉造成混淆。