Asp.net core 移动网络上的.Net Core 206部分内容错误
我有一个从客户端后端流式传输视频的客户端和一个api 在客户端后端,视频流有时会在移动网络上出现故障,而api则不会出现这种情况 (.net核心2.0版) 以下是我在客户端后端的文件流(现在已替换为v2.1): 此外,我还启用了我的Asp.net core 移动网络上的.Net Core 206部分内容错误,asp.net-core,.net-core,http-headers,html5-video,filestream,Asp.net Core,.net Core,Http Headers,Html5 Video,Filestream,我有一个从客户端后端流式传输视频的客户端和一个api 在客户端后端,视频流有时会在移动网络上出现故障,而api则不会出现这种情况 (.net核心2.0版) 以下是我在客户端后端的文件流(现在已替换为v2.1): 此外,我还启用了我的程序.cs中的范围处理 AppContext.SetSwitch(“Switch.Microsoft.AspNetCore.Mvc.EnableRangeProcessing”,true) 更新到(.net core v2.1)后,仍然存在相同的问题: [HttpGe
程序.cs中的范围处理
AppContext.SetSwitch(“Switch.Microsoft.AspNetCore.Mvc.EnableRangeProcessing”,true)代码>
更新到(.net core v2.1)后,仍然存在相同的问题:
[HttpGet("ConvertedVideo/{path}")]
public FileStreamResult ConvertedVideo(string path)
{
var stream = _fileManager.ConvertedStream(path);
return File(stream, "video/mp4", path, true);
}
这两种方法都可以正常工作,此方法返回success 206,然后根据视频的大小进行以下几个调用(1-3)
当我的手机使用移动网络时,这两个功能都不起作用,通过wifi也可以
以下是请求标头(为清楚起见,省略了其他标头):
以下是响应标题:
Accept-Ranges: none
Cache-Control: no-cache
Connection: close
Content-Length: 1247369
Content-Range: bytes 0-1247368/1247369
Content-Type: video/mp4
Date: Sun, 22 Jul 2018 16:27:13 GMT
Pragma: no-cache
Server: Kestrel
X-Powered-By: ASP.NET
以下是控制台中的错误外观:
GEThttp://example.com/ConvertedVideo/video.mp4 206(部分内容)
在“网络”选项卡中:
net::错误内容长度不匹配
我不明白为什么它在移动网络上不起作用?它是否因为部分内容而中断
编辑:在客户端上传输视频之前,使用ffmpeg
包装器:MediaToolKit
将视频转换为较低质量。我怀疑这可能是问题的一部分,但为什么它能在wifi上工作而不能在移动网络上工作呢?在相同的视频被发送到api并从api流式传输后,可以通过wifi和移动设备正常工作
api和客户端都托管在IIS共享托管平台上
PS:这是一个动态创建的html5视频
容器,src
也是动态生成的,并且加载了vuejs,我怀疑这可能是原因,但我不明白为什么它可以在wifi上工作,而不能在移动网络上工作
编辑:
将客户端项目更新为2.1,仍然是相同的问题
这个问题不会发生在iPhone上。是的。它在iPhone上的作用比不起作用的多
在客户端上工作的Api视频流:
[HttpGet("matchvid/{id}/{path}")]
public FileStreamResult Get(string id, string path)
{
return new FileStreamResult(_fileManager.VideoStream(id, path), "video/mp4");
}
这就是我读取文件的方式(更改为Path.Combine(类型、名称)
并不能解决问题):
我尝试过的其他事情
- 我在某个地方读到这可能是防火墙问题,我联系了我的主机提供商,他们确认不是
- 在流式方法、彻底过滤器、自定义中间件中手动设置标头
接受范围:“字节”
编辑:Firefox移动浏览器上的测试问题:
第一个请求/响应与失败的请求/响应相同。(工作的流不以接受范围开始:“无”)
但是FF会发出第二个请求/响应(这在chrome中不会发生)
请求:
Accept: video/webm,video/ogg,video/*;q…q=0.7,audio/*;q=0.6,*/*;q=0.5
Accept-Language: en-GB,en;q=0.5
Connection: keep-alive
Range: bytes=8904-
答复:
Accept-Ranges: bytes
Connection: keep-alive
Content-Disposition: attachment; filename=received_…received_1416546955092120.mp4
Content-Length: 1330243
Content-Range: bytes 8904-1339146/1339147
Content-Type: video/mp4
下面是错误(src
预期video/mp4
,文件流返回video/mp4
,文件为mp4
格式。)
无法解码媒体资源。
未能加载所有候选资源。媒体加载已暂停。
无法解码媒体资源,错误:错误代码:(0x806e0006)详细信息:静态MP4Metadata::ResultAndByteBuffer mozilla::MP4Metadata::Metadata(mozilla::ByTestStream*):无法分析元数据
因此,现在我有一个编码错误或部分内容错误。您应该使用Wireshark捕获TCP会话并检查数据。ERR_CONTENT_LENGTH_MISMATCH提示发送的实际有效负载与标头不匹配,可能连接正在终止。@rudolfsfbundulis我将查看它
private FileStream VideoStream(string type, string name)
{
var fileStream = new FileStream($"{type}/{name}",
FileMode.Open,
FileAccess.Read);
return fileStream;
}
Accept: video/webm,video/ogg,video/*;q…q=0.7,audio/*;q=0.6,*/*;q=0.5
Accept-Language: en-GB,en;q=0.5
Connection: keep-alive
Range: bytes=8904-
Accept-Ranges: bytes
Connection: keep-alive
Content-Disposition: attachment; filename=received_…received_1416546955092120.mp4
Content-Length: 1330243
Content-Range: bytes 8904-1339146/1339147
Content-Type: video/mp4