正确提供的数据?我将二进制数据提供给HTML5音频through.aspx页面。该文件可以播放,但在Safari(iPad)、Chrome和Firefox中的SeekBar和重播有问题。编辑我简化了(希望不要太多)代码和完整列表(页面文件名显然是play.aspx)。protectedvoidPage_Load(objectsender,EventArgse){if(Request["filename"]!=null){stringFilePath=MapPath(Request["filename"]);longfSize=(newSystem.IO.FileInfo(FilePath)).Length;//标题Response.AddHeader("Content-Length",fSize.ToString());Response.ContentType="音频/mp3";//数据响应.WriteFile(FilePath);响应.End();};}DirectProvided因此提供了Content-Length和Content-Type标头。当直接访问文件或通过.aspx页面访问文件时,这两个标记都启用比较行为。问题是如何在所有必需的浏览器(ff、safari、chrome、IE9+)上正确地为标签提供数据。问题Safari(iPad):按下播放按钮时,会播放声音,但使用“Streaming...”而不是SeekBar时,播放似乎会一直持续下去,并且不会播放声音。Firefox(窗口):显示搜索栏,但显示增加的时间直到结束,并且在重播时表现正常。Chrome(Windows):正确的搜索栏但不可重播。IE10:好的,我发现了类似的问题,但没有答案。从fiddler查看另一页,标题Accept-Ranges:bytes和Content-Range:bytes0-8100780/8100781似乎可以提供帮助。但是提供必要的功能似乎太难了,既然只是尝试,就没有尝试。注意我正在寻找其他连接问题的解决方案如何在IE(9+)和Safari(Pad)中使用HTML5音频播放.m4a?简单回答:有必要处理浏览器范围请求。全文当比较Fiddler在Firefox和IIS之间捕获的通信时,我注意到直接链接的响应状态是206PartialContent,而间接链接是200OK。更仔细地分析请求表明,Firefox请求Range:bytes=0-和iPadRange:bytes=0-1及更高版本Range:bytes=0-fullsize(从iOS设备捕获流量)。设置Response.StatusCode=206足以欺骗Firefox而不是Safari。但我知道关键信息,剩下的就很简单了。有必要遵守范围请求,请参阅:SO:HTML5videowon'tloop。我在啊哈找到了如何做的解释!#1-用于HTML5video的ASP.NETASHXvideo流。所以新代码是(只有活动部分现在rest与答案中相同):protectedvoidPage_Load(objectsender,EventArgse){if(Request["filename"]!=null){stringFilePath=MapPath(Request["filename"]);longfSize=(newSystem.IO.FileInfo(FilePath)).Length;长起始字节=0;长字节=fSize-1;内部状态码=200;if((Request.Headers["Range"]!=null)){//从范围头字符串中获取实际的字节范围,并设置起始字节。string[]range=Request.Headers["Range"].Split(newchar[]{'=','-'});startbyte=Convert.ToInt64(范围[1]);if(range.Length>2&&range[2]!="")endbyte=Convert.ToInt64(range[2]);//如果起始字节不为零,则表示用户正在请求部分内容。if(startbyte!=0||endbyte!=fSize-1||range.Length>2&&range[2]==""){statusCode=206;}//设置响应的状态码为206(Partial内容)并添加一个内容范围标题。}longdesSize=endbyte-startbyte+1;//标题响应.StatusCode=状态码;Response.ContentType="音频/mp3";Response.AddHeader("Content-Length",desSize.ToString());Response.AddHeader("Content-Range",string.Format("bytes{0}-{1}/{2}",startbyte,endbyte,fSize));//数据响应.WriteFile(FilePath,startbyte,desSize);响应.End();};添加其他标头(Content-Disposition、Accept-Ranges、Access-Control-Allow-Origin)可能很方便,但目的当然是提供尽可能简单的解决方案:如果我不修复它,也看看起来,我会更快地找到解决方案。以上就是C#学习教程:如何正确提供数据?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
