Transmisión de video de forma asíncrona en ASP.NET Core 2 con Web API
Introducción
No importa en qué tipo de proyecto esté trabajando, en algún momento encontrará la necesidad de transmitir videos en su sitio web o aplicaciones móviles para muchos propósitos. Entonces, aprenderemos cómo podemos transmitir en vivo nuestro contenido de video a través de HTTP, utilizando las API web de ASP.NET Core 2.
Configure un servicio que obtenga una transmisión de un video alojado en la web usando HttpClient
Ejemplo con videos alojados en Azure:
public class AzureVideoStreamService : IAzureVideoStreamService { private HttpClient _client; public AzureVideoStreamService() { _client = new HttpClient(); } public async Task<Stream> GetVideoByName(string name) { var urlBlob = string.Empty; switch (name) { case "earth": urlBlob = "https://anthonygiretti.blob.core.windows.net/videos/earth.mp4"; break; case "nature1": urlBlob = "https://anthonygiretti.blob.core.windows.net/videos/nature1.mp4"; break; case "nature2": default: urlBlob = "https://anthonygiretti.blob.core.windows.net/videos/nature2.mp4"; break; } return await _client.GetStreamAsync(urlBlob); } ~AzureVideoStreamService() { if (_client != null) _client.Dispose(); } }
public interface IAzureVideoStreamService { Task<Stream> GetVideoByName(string name); }
Entonces no olvide registrar el servicio y su interfaz en el sistema de dependencia de inyección
public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddScoped<IAzureVideoStreamService, AzureVideoStreamService>(); }
Configure un controlador de transmisión que transmita videos usando el objeto FileStreamResult
FileStreamResults finaliza el contenido binario de la respuesta mediante un Stream instancia
Ejemplo de una API que devuelve un video por su nombre:
[Route("api/[controller]")] public class StreamingController : Controller { private IAzureVideoStreamService _streamingService; public StreamingController(IAzureVideoStreamService streamingService) { _streamingService = streamingService; } [HttpGet("{name}")] public async Task<FileStreamResult> Get(string name) { var stream = await _streamingService.GetVideoByName(name); return new FileStreamResult(stream, "video/mp4"); } }
Ejecute la API web para probar...
fácil no? 😉