从经过身份验证的网址流式传输音频

时间:2014-06-23 10:46:41

标签: c# javascript .net streaming html5-audio

我有一个外部服务器网址,我传递凭据和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>元素中播放流。

以下是我面临的问题:

  • 当流正在播放时,搜索控制栏始终停留在0,因为音频长度为无穷大。由于此原因,我无法使用控制滑块来寻找缓冲区域
  • 当流结束时,$("audio")[0].duration返回9188187664790.943(或某个巨大的数字,20 - 30秒音频),音频的显示时间显示为-596523:-14:-8(播放时这是一个从00开始的数字) :01到00:24,然后突然变为负数。)
  • 我无法找到能够进入无缓冲区域的解决方案。

我也不太确定这是否是一种正确/最好的方法,因此对方法的建议也会非常有帮助。

1 个答案:

答案 0 :(得分:1)

我能够解决这个问题。

我做的是检查了我的HTTP服务器对静态存储在服务器上的常规mp3文件的请求的响应。我注意到服务器正在设置我错过的两个标题。这些是Accept-Ranges: bytesContent-Length: xxx

当我设置这些标题时,问题中的所有问题都消失了。

希望这会对某人有所帮助。