c#之从经过身份验证的 URL 传输音频
softidea
阅读:32
2025-12-25 22:24:30
评论:0
我有一个外部服务器 URL,我将凭据和 id 传递到该 URL 以获取音频文件,如 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。因此,我无法使用控制 slider 来搜索缓冲区
- 当流结束时,
$("audio")[0].duration返回 9188187664790.943 (或 20 - 30 秒音频的某个巨大数字)并且音频的显示时间显示 -596523:-14:-8 (播放时这是一个从 00:01 到 00:24 的数字,然后突然变为负数)。 - 我无法找到允许搜索无缓冲区域的解决方案。
我也不太确定这是否是正确/最佳方法,因此有关方法的建议也会非常有帮助。
请您参考如下方法:
我能够解决这个问题。
我所做的是检查我的 HTTP 服务器对静态存储在服务器上的常规 mp3 文件的请求的响应。我注意到服务器正在设置两个我错过的 header 。它们是 Accept-Ranges: bytes 和 Content-Length: xxx。
当我设置这些标题时,问题中的所有问题都消失了。
希望这会对某人有所帮助。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



