Transmisión de video de forma asíncrona en ASP.NET Core 2 con Web API

 C Programming >> Programación C >  >> Tags >> API
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? 😉