我有一个外部服务器网址,我传递凭据和id以获取音频文件,如http://myexternalserver.com/?u=xxx&p=xxx&id=xxx
为了避免从javascript和向用户公开凭据,我试图从后端调用url并将其流式传输到UI请求(在我的服务器上)
using (Stream mystream = httpResponse2.GetResponseStream())
{
using (BinaryReader reader = new BinaryReader(mystream))
{
int length = 2048;
byte[] buffer = new byte[length];
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.BufferOutput = true;
response.ContentType = "audio/wav";
while((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
{
response.OutputStream.Write(buffer, 0, bytesRead);
}
response.End();
}
}
使用这种方法,我成功地能够在<audio>
元素中播放流。
以下是我面临的问题:
$("audio")[0].duration
返回9188187664790.943(或某个巨大的数字,20 - 30秒音频),音频的显示时间显示为-596523:-14:-8(播放时这是一个从00开始的数字) :01到00:24,然后突然变为负数。)我也不太确定这是否是一种正确/最好的方法,因此对方法的建议也会非常有帮助。
答案 0 :(得分:1)
我能够解决这个问题。
我做的是检查了我的HTTP服务器对静态存储在服务器上的常规mp3文件的请求的响应。我注意到服务器正在设置我错过的两个标题。这些是Accept-Ranges: bytes
和Content-Length: xxx
。
当我设置这些标题时,问题中的所有问题都消失了。
希望这会对某人有所帮助。