Transmisión de video desde un servicio externo

Estoy trabajando en un proyecto (lado del servidor) donde necesito transmitir datos (videos, archivos grandes) a los clientes.

Esto funcionó perfecto usandoByteRangeStreamContent, ya que estaba sirviendo archivos desde el disco y podía crear una secuencia buscable (FileStream)

    if (Request.Headers.Range != null)
    {
                try
                {
                        HttpResponseMessage partialResponse = Request.CreateResponse(HttpStatusCode.PartialContent);
                        partialResponse.Content = new ByteRangeStreamContent(fs, Request.Headers.Range, mediaType);
                        return partialResponse;
                }
                catch (InvalidByteRangeException invalidByteRangeException)
                {
                        return Request.CreateErrorResponse(invalidByteRangeException);
                }
     }
     else
     {
                    response.Content = new StreamContent(fs);
                    response.Content.Headers.ContentType = mediaType;
                    return response;
     }

Pero, moví el proveedor de archivos del disco a un servicio externo. El servicio me permite obtener fragmentos de datos (Rango {0} - {1}).

Por supuesto, no es posible descargar todo el archivo en la memoria y luego usar unMemoryStream paraByteRangeStreamContent debido a las razones obvias (demasiadas descargas simultáneas consumirán toda la memoria disponible en algún momento).

Encontre este articulohttps://vikingerik.wordpress.com/2014/09/28/progressive-download-support-in-asp-net-web-api/ donde el autor dice:

Una solicitud de cambio que recibí para mi biblioteca fue para permitir leer solo los datos necesarios y enviarlos en lugar de abrir una secuencia para los datos completos. No estaba seguro de lo que esto compraría hasta que el usuario señaló que está leyendo sus datos de recursos de una secuencia WCF que no admite la búsqueda y necesitaría leer toda la secuencia en un MemoryStream para permitir que la biblioteca genere la salida .

Esa limitación todavía existe en este objeto específico, pero hay una solución alternativa. En lugar de usar un ByteRangeStreamContent, podría usar un objeto ByteArrayContent. Dado que la mayoría de las solicitudes de RANGE serán para un solo byte de inicio y finalización, puede extraer el rango del HttpRequestMessage, recuperar solo los bytes que necesita y enviarlo nuevamente como una secuencia de bytes. También deberá agregar el encabezado CONTENT-RANGE y establecer el código de respuesta en 206 (PartialContent), pero esta podría ser una alternativa viable (aunque no lo he probado) para usuarios que no quieren o no pueden obtener fácilmente Un objeto de flujo compatible.

Entonces, mi pregunta básicamente es: ¿cómo puedo hacer eso?

Respuestas a la pregunta(1)

Su respuesta a la pregunta