@Shaidulint

Как в Asp.net mvc транслировать видео с возможностью перемотки?

Здравствуйте, учусь выводить видео на сайт из файла. Если брать файл целиком и передать его на страницу - он работает, видео отображается, но хотелось бы разобраться со следующим вопросом: как выводить видео не целиком, а например с середины? это может понадобится например, если видео длится 2 часа, и что бы сразу после открытия страницы пользователь мог перемотать видео на 01 час 45 минут и не ждать полной загрузки файла.
Я подобное видел на YouTube. Когда вы перематываете - пред. запрос на видео отменяется, и создается новый запрос на видео уже не с начала а с нужной минуты.

С помощью след. кода я попытался просто перескакивать на 2500000 байт вперед (видео весит 5мб в сумме), но видео не отображается.

Формат видео: mp4

public override void ExecuteResult(ControllerContext context)
        {

            var strVideoFilePath = HostingEnvironment.MapPath("~/Content/big_buck_bunny.mp4");

            context.HttpContext.Response.ContentType = "video/mp4";
            context.HttpContext.Response.AddHeader("Content-Disposition", "attachment; filename=Test2.mp4");

            var objFile = new FileInfo(strVideoFilePath);

            var stream = objFile.OpenRead();

            int fakeLen = (int)stream.Length - 2500000;
            var objBytes = new byte[fakeLen];
            stream.Seek(2500000, SeekOrigin.Begin);
            stream.Read(objBytes, 0, fakeLen);
            
            context.HttpContext.Response.BinaryWrite(objBytes);

        }
    }
  • Вопрос задан
  • 601 просмотр
Пригласить эксперта
Ответы на вопрос 1
impwx
@impwx
Разработчик
Файл видео должен отдаваться с сервера целиком. Его нельзя разрезать, как обычный массив байтов - это нарушает формат, и воспроизвести видео будет невозможно.

Вместо этого используйте API самого плеера на клиентской стороне - при загрузке страницы выполните скрипт, который скажет плееру перемотать на определенный момент. Если плеер (и ваш сервер) поддерживают подгрузку файлов с произвольного места (а не с самого начала), то должно работать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы