这个问题可能与Forward multipart/x-mixed-replace livestream ASP.NET Core有关,但是虽然我的情况略有不同,但我提出了一个新问题。我已经遵循了 TS 从上述问题中提出的其他问题中的所有建议和其他问题/建议,但没有运气。
我的控制器使用 http 客户端从摄像头请求 RTSP 流,以将其提供给 api 使用者。从 .net core2 开始,这在所有系统上都可以正常工作。将所有代码升级/更新到 .net 6 后,camerastream 不再在所有系统上运行。某些系统(基于同一虚拟机)显示流,但其他系统则不显示。
到目前为止我做了什么:
控制器代码如下所示:
[ResponseCache(NoStore = true)]
public async Task<IActionResult> ImageStream(int cameraId, int maxfps = 30)
{
var stream = await _cameraService.GetCameraStreamAsync(cameraId, credentials, maxfps);
return new FileStreamResult(
stream,
"multipart/x-mixed-replace; boundary=\"myBoundary\"");
}
_cameraService:
public async Task<Stream> GetCameraStreamAsync(int cameraId, CameraCredentialsDto credentials, int maxFps)
{
var client = new HttpClient { BaseAddress = new Uri($"http://{credentials.IPaddress}") };
client.SetBasicAuthentication(credentials.Username, credentials.Password);
client.DefaultRequestHeaders.ExpectContinue = false;
string relativeUrl = $"cameraSpecificURL";
return await client.GetStreamAsync(relativeUrl);
}
--更新
我比较了工作系统和非工作系统的请求标头,但从客户端来看,两个请求之间没有区别。
GET /appapi/v1/camera/1003/stream?maxfps=30&token=**redacted** HTTP/1.1
Host: ipaddress:5001
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9,nl;q=0.8
返回的数据格式也正确,两个破折号位于新段的前面。此外,通过直接从系统上的摄像机请求流,该流不是由控制器提供的,来自摄像机的数据很好。
嗯。想通了。这只是我的代码。我们有一些令人毛骨悚然的中间件(在开发中),它检查每个请求以用于记录目的并将主体的位置倒回至 0。通过删除这个中间件,它被修复了。