Я разрабатываю веб-сайт, где люди могут получить доступ к аудио- и видеофайлам. У меня есть код для загрузки файлов, которая состоит из двух методов действий следующим образом ...Как передать видеофайл с помощью ASP.NET MVC?
public ActionResult GetAudioFile(int id) {
return GetFile(id, true);
}
public ActionResult GetVideoFile(int id) {
return GetFile(id, false);
}
private ActionResult GetFile(int id, bool isAudio) {
// Code to get info about the file, etc omitted for clarity
string downloadFileName = // full path to audio/video file
byte[] bytes = GetFileBytes(fileName); // also omitted
return File(bytes, (isAudio ? "audio/mpeg" : "video/mp4"), downloadFileName + (isAudio ? ".mp3" : ".mp4"));
}
Они оба работает хорошо, и я могу загрузить любой тип файла.
Теперь я хочу добавить два вида Razor, один для прослушивания аудиофайла и один для просмотра видео. Я сделал следующее на аудио взгляд, и она отлично работает ...
<audio src='@Url.Action("GetAudioFile", "Search", new {ID = @Model.ID})'
controls preload="auto"></audio>
Затем я попытался сделать то же самое для просмотра видео ...
<video src='@Url.Action("GetVideoFile", "Search", new {ID = @Model.ID})'
controls preload="auto" width="640" height="368"></video>
Однако это дает систему .OutOfMemoryException, когда я пытаюсь запустить его. Видеоролики в среднем около 400-500 МБ каждый.
Затем я попытался с помощью метода Response.TransmitFile следующим образом ...
Response.ContentType = "video/mp4";
Response.AddHeader("content-disposition", "attachment; filename=myvideo.mp4"));
Response.TransmitFile(fileName);
Response.End();
return null;
... но это не работает. В Chrome я вижу сообщение «Ресурс, интерпретируемый как Документ, но переданный с MIME-типом видео/mp4» в консоли, а в FireFox я получаю такое же сообщение в видеоконтроллере.
Кто-нибудь знает, как я могу это исправить? В идеале, я хотел бы передать файл, чтобы он начинал играть, как только первые байты достигают пользователя, вместо того, чтобы ждать, пока файл не будет полностью загружен.
Я пробовал пару видеопроигрывателей Javascript, но имел и успех с ними.
Update мне интересно, если это не действие контроллера, что проблема вообще, как я пытался указывать свой веб-браузер непосредственно на видеофайл, и я получил то, что выглядело как аудио-плеер, но без видео , и ничего не происходит, когда я нажимаю кнопку воспроизведения. Не уверен, что это помогает.