Streaming video in modo asincrono in ASP.NET Core 2 con API Web

 C Programming >> Programmazione C >  >> Tags >> API
Streaming video in modo asincrono in ASP.NET Core 2 con API Web

Introduzione

Indipendentemente dal tipo di progetto su cui stai lavorando, a un certo punto troverai la necessità di trasmettere video in streaming nel tuo sito Web o nelle app mobili per molti scopi. Quindi, impareremo come possiamo trasmettere in streaming i nostri contenuti video su HTTP, utilizzando le API Web ASP.NET Core 2.

Configura un servizio che ottenga uno Stream da un video ospitato sul Web utilizzando HttpClient

Esempio con video ospitati in 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);
}

Quindi non dimenticare di registrare il servizio e la sua interfaccia nel sistema Injection Dependency

public void ConfigureServices(IServiceCollection services)
{
   services.AddMvc();
   services.AddScoped<IAzureVideoStreamService, AzureVideoStreamService>();
}

Configura un controller di streaming per lo streaming di video utilizzando l'oggetto FileStreamResult

Risultati FileStream termina il contenuto binario alla risposta utilizzando un Stream istanza

Esempio di API che restituisce un video in base al nome:

[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");
   }
}

Esegui l'API Web per testare….

Facile no? 😉