Потоковое видео с RavenDB через ASP.Net MVC - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь передать видео, сохраненное в виде вложения в Ravendb-Database, через действие ASP.NET MVC 5 в WebBrowser. Он работает со следующим кодом, но видео полностью загружается до его запуска. Я не понимаю, что я делаю неправильно.

Я нашел несколько способов сделать Streaming в MVC, но они, похоже, ожидают Seekable Stream - но поток, который я получаю от Ravendb, не доступен для поиска; это даже не обеспечивает длину. Таким образом, единственный способ сделать это - скопировать поток ravendb в поток памяти и предоставить PartialContent или аналогичный оттуда.

У кого-нибудь есть лучшее решение? Я не могу быть единственным, кто хочет передавать видео из базы данных без загрузки всего видео в память перед его отправкой.

Я получаю вложение от ravendb, как это:

public async Task<System.IO.Stream> GetAttachmentAsync(IAttachmentPossible attachedObject, string key)
{
    using (var ds = InitDatabase())
    {
        using (var session = ds.OpenAsyncSession())
        {
            try
            {
                var result = await session.Advanced.Attachments.GetAsync(attachedObject.Id, key);
                return result.Stream;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }
}

После этого я отправляю поток в браузер так:

var file = await _database.GetAttachmentAsync(entry, attachmentId);

HttpResponseMessage msg = new HttpResponseMessage(HttpStatusCode.OK);
msg.Content = new StreamContent(file);
msg.Content.Headers.ContentType = new MediaTypeHeaderValue("video/mp4");
return msg;

Есть идеи? Большое спасибо!

1 Ответ

0 голосов
/ 30 августа 2018

Я думаю, что правильно копировать поток в поток памяти. С ответом вы связались (https://stackoverflow.com/a/39247028/10291808) вы можете сделать потоковое.

Может быть, стоит подумать о множественных вызовах, которые будут сделаны для извлечения файла из БД (возможно, вы можете кэшировать файл в течение ограниченного времени для повышения производительности).

...