Потоковое видео показывает, не работает в Micorsoft Edge - PullRequest
0 голосов
/ 31 октября 2018

Я новичок в использовании потокового видео в проекте ASP.Net MVC. У меня есть веб-приложение для видеобиблиотеки, большинство видео имеют формат .mp4. Пожалуйста, смотрите мой код ниже.

Код

public HttpResponseMessage Get(string filename)
    {
        var filePath = new FileStreameHelpers().GetFilePath(filename);
        if (!File.Exists(filePath))
            return new HttpResponseMessage(HttpStatusCode.NotFound);

        var response = Request.CreateResponse();
        response.Headers.AcceptRanges.Add("bytes");

        var streamer = new FileStreameHelpers();
        streamer.FileInfo = new FileInfo(filePath);
        response.Content = new PushStreamContent(streamer.WriteToStream, new FileStreameHelpers().GetMimeType(Path.GetExtension(filePath)));

        RangeHeaderValue rangeHeader = Request.Headers.Range;
        if (rangeHeader != null)
        {
            long totalLength = streamer.FileInfo.Length;
            var range = rangeHeader.Ranges.First();
            streamer.Start = range.From ?? 0;
            streamer.End = range.To ?? totalLength - 1;

            response.Content.Headers.ContentLength = streamer.End - streamer.Start + 1;
            response.Content.Headers.ContentRange = new ContentRangeHeaderValue(streamer.Start, streamer.End,
                totalLength);
            response.StatusCode = HttpStatusCode.PartialContent;
        }
        else
        {
            response.StatusCode = HttpStatusCode.OK;
        }

        return response;
    }
  public async Task WriteToStream(Stream outputStream, HttpContent content, TransportContext context)
    {
        try
        {
            var buffer = new byte[6553600];
            using (var video = FileInfo.OpenRead())
            {
                if (End == -1)
                {
                    End = video.Length;
                }
                var position = Start;
                var bytesLeft = End - Start + 1;
                video.Position = Start;
                while (position <= End)
                {
                    var bytesRead = video.Read(buffer, 0, (int)Math.Min(bytesLeft, buffer.Length));
                    await outputStream.WriteAsync(buffer, 0, bytesRead);
                    position += bytesRead;
                    bytesLeft = End - position + 1;
                }
            }
        }
        catch (Exception ex)
        {
            // fail silently
            Utilities.SaveException("FileStreameHelpers - WriteToStream", ex);
        }
        finally
        {
            outputStream.Close();
        }
    }

отлично работает в Firefox и Chrome , но показывает ошибку в Microsoft Edge браузере, как показано ниже.

HTML

<video width="320" height="240" controls>
    <source src="/api/Media/Get?filename=SampleVideo_1280x720_1mb.mp4" type="video/mp4">
    Your browser does not support the video tag.
</video>

Удаленный хост закрыл соединение. Код ошибки: 0x800703E3.

Пожалуйста, совет.

1 Ответ

0 голосов
/ 22 ноября 2018

На самом деле это проблема, связанная с браузером. Я обновляю свой браузер MS Edge. теперь потоковое видео работает корректно.

...