Asynchrones Streamen von Videos in ASP.NET Core 2 mit Web-API

 C Programming >> C-Programmierung >  >> Tags >> API
Asynchrones Streamen von Videos in ASP.NET Core 2 mit Web-API

Einführung

Ganz gleich, an welcher Art von Projekt Sie arbeiten, irgendwann werden Sie feststellen, dass Sie für viele Zwecke Videos auf Ihrer Website oder in mobilen Apps streamen müssen. Wir werden also lernen, wie wir unsere Videoinhalte mithilfe von ASP.NET Core 2-Web-APIs live über HTTP streamen können.

Richten Sie einen Dienst ein, der einen Stream von einem im Web gehosteten Video mit HttpClient erhält

Beispiel mit in Azure gehosteten Videos:

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

Vergessen Sie dann nicht, den Dienst und seine Schnittstelle im Injection Dependency-System zu registrieren

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

Richten Sie einen Streaming-Controller ein, der Videos mit dem FileStreamResult-Objekt streamt

FileStreamResult s beendet binäre Inhalte an der Antwort mit einem Stream Instanz

Beispiel für eine API, die ein Video anhand seines Namens zurückgibt:

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

Führen Sie die Web-API zum Testen aus….

Einfach nicht wahr? 😉