2012-11-14 30 views
5

Tôi có một hành động MVC đơn giản trả về một FilePathResult trỏ đến một video. Vì lý do nào đó, HTML5 video (sử dụng js-video.js) không phát video. Nếu tôi thay đổi URL thành URL tôi biết, video sẽ phát tốt. Vì vậy, nó phải được làm với cách tôi phục vụ các tập tin.HTML 5 Video không phát từ trang web MVC của tôi

Nếu tôi duyệt đến URL trong trình duyệt, video sẽ tải xuống và sau đó phát tốt.

Video là .mp4 với loại MIME trả về là video/mp4.

Tôi đang sử dụng Video Studio 2012, .NET 4, IIS 8 ExpressWindows 7 x64 Home Premium.

Đây là mã tương ứng của tôi:

[Authorize(Roles = "File_Read")] 
public FileResult Get(int? id) 
{ 
    try 
    { 
     if (id == null) 
      throw new ArgumentNullException("id"); 

     var fileRepo = FileRepositoryFactory.Repository; 

     var file = fileRepo.GetById(id.Value); 
     if (file == null) 
      throw new InvalidOperationException(String.Format("Failed to find file with id: {0}", id)); 

     if (String.IsNullOrWhiteSpace(file.FilePath)) 
     { 
      return this.File(file.Data, file.MIMEType, file.FileName); 
     } 
     else 
     { 
      return this.File(file.FilePath, file.MIMEType, file.FileName); 
     } 
    } 
    catch (Exception ex) 
    { 
     return this.File("failed.txt", "text/plain"); 
    } 
} 

Đây là một ảnh chụp màn hình của những gì Chrome lợi nhuận:

Network

File get request

Failed mp4 request

Failed mp4 request details

Trả lời

6

HTML5 Video Tage yêu cầu hỗ trợ Range Requests.

Trong trường hợp tệp tĩnh hỗ trợ này được cung cấp nội bộ bởi máy chủ, nhưng trong trường hợp ASP.NET MVC hành động cần được triển khai ở mức ActionResult.

Bài viết Range Requests in ASP.NET MVC – RangeFileResult mô tả chi tiết cách tạo ASP.NET MVC ActionResult với Yêu cầu phạm vi hỗ trợ. Ngoài ra còn có một ứng dụng mẫu đang sử dụng VideoJS có sẵn tại đây: VideoJS in ASP.NET MVC

+0

Cảm ơn điều đó. Tôi có nó làm việc với các tập tin mp3, nhưng mp4 của tôi không hoạt động. Tôi đã thêm ảnh chụp màn hình với thông tin lỗi trong bài đăng chính của mình. – rhughes

+0

@rhughes Độ dài nội dung bạn đã đánh dấu là chính xác vì yêu cầu có tiêu đề 'Phạm vi: byte = 518758-518758' (trình duyệt yêu cầu một byte). Có một số vấn đề với các tập tin mp4 chơi trên Chrome (mã hóa không được hỗ trợ vv) chỉ cần google để tìm một số. Tôi khuyên bạn nên kiểm tra tệp mp4 của mình trong một trình duyệt khác và thử nghiệm mp4 được biết là đang hoạt động trong Chrome (điều này sẽ tốt - http://www.longtailvideo.com/jw/upload/bunny.mp4 trước tiên hãy thử nghiệm nó từ vị trí này hơn là tải xuống và sử dụng trong ứng dụng của bạn). Ngoài ra, hãy đảm bảo có mã thích hợp trong đánh dấu video/nguồn HTML5 của bạn. – tpeczek

+0

Tôi đã thử video chú thỏ và nó hoạt động tốt trong IE 9, nhưng không hoạt động trong Chrome. Bạn có biết tại sao không? – rhughes

Các vấn đề liên quan