Actualmente estoy construyendo una API en ASP.NET Core 3 como mi primer proyecto con .NET Core.
Actualmente estoy tratando de enviar un video a mi interfaz de React.js para verlo en el navegador. La carga de archivos y videos funciona sin problemas y el método que ve a continuación también envía un archivo al cliente, pero si el video dura más de unos segundos, el reproductor de video es realmente lento y también toma mucho tiempo omitirlo. unos segundos del video. Creo que es porque el archivo primero se descarga completamente y luego se reproduce.
[Route("getFileById")]
public FileResult getFileById(int fileId)
{
var context = new DbContext();
var file = context.File.Find(fileId);
if (file == null)
{
Console.WriteLine("file " + fileId + " not found");
return null;
}
var content = new FileStream(file.Name, FileMode.Open, FileAccess.Read, FileShare.Read);
var response = File(content, "application/octet-stream");
return response;
}
Creo que la forma de resolver mi problema es transmitir el archivo y no enviarlo como un todo. Ya busqué en Google cómo transmitir videos con ASP.NET Core 3, pero solo encuentro sitios web que lo explican para ASP.NET Core 2 (por ejemplo, http://anthonygiretti.com/2018/01/16/streaming-video-asynchronnous -in-asp-net-core-2-with-web-api / )
Ya intenté usar el código en estos sitios web, pero la forma en que lo hicieron no es compatible con ASP.NET Core 3.
¿Cómo puedo transmitir archivos en ASP.NET Core 3?
fuente
Respuestas:
Si desea transmitir el video en el navegador, su servidor debe admitir solicitudes de rango HTTP . En tal caso, el servidor puede enviar solo una pequeña porción de un contenido solicitado por el cliente. Como desea transmitir video en el navegador, puede usar la
video
etiqueta html que solicita un contenido usando encabezados de rango. Por lo tanto, también puede omitir un tiempo e inmediatamente reproducir la película desde esa posición, antes de que se descargue completamente.ASP.NET Core 3 ya tiene soporte para solicitudes de rango HTTP, se implementa en un
PhysicalFile
método que tiene el atributo enableRangeProcessing . Como dice la documentación:Tenga en cuenta que la ruta debe ser absoluta (no relativa).
fuente