public async Task <ActionResult> GetStream(string name)
        {
            ViewBag.Title = "Video Streaming";
            List <string> list = await SqlStreamController.GetVideoList();

            TableVM model = new TableVM
            {
                Rows    = list,
                Headers = new List <string> {
                    "Nombre", "Acción"
                },
                CurrentVideo = name
            };

            return(View("index", model));
        }
Esempio n. 2
0
        public async Task <HttpResponseMessage> GetStream(string name)
        {
            var response = Request.CreateResponse();

            response.Headers.AcceptRanges.Add("bytes");

            if (String.IsNullOrEmpty(name))
            {
                return(response);
            }

            byte[] videobytes;
            if (cache[name] == null)
            {
                videobytes = await SqlStreamController.GetBinaryValue(name);

                cache.Set(name, videobytes, DateTime.Now.AddMinutes(30));
            }
            else
            {
                videobytes = cache[name] as byte[];
            }

            if (videobytes == null)
            {
                return(response);
            }

            MemoryStream     stream             = new MemoryStream(videobytes);
            RangeHeaderValue currentRangeHeader = Request.Headers.Range;

            const int        blockSize   = 1024 * 512;
            const string     videoType   = "video/mp4";
            long             totalLength = stream.Length;
            var              range       = currentRangeHeader.Ranges.First();
            var              start       = range.From ?? 0;
            var              ends        = range.To ?? (start + blockSize - 1 > totalLength ? totalLength - 1 : start + blockSize - 1);
            RangeHeaderValue rangeHeader = new RangeHeaderValue(start, ends);

            response.Content = new ByteRangeStreamContent(stream, rangeHeader, videoType);
            response.Content.Headers.ContentLength = ends - start + 1;
            response.Content.Headers.ContentRange  = new ContentRangeHeaderValue(start, ends, totalLength);
            response.Content.Headers.ContentType   = new MediaTypeHeaderValue(videoType);
            response.StatusCode = HttpStatusCode.PartialContent;
            return(response);
        }