2012-11-14 31 views
5

我有一個簡單的MVC操作,返回指向視頻的FilePathResult。由於某種原因,HTML5視頻(使用js-video.js)未播放該視頻。如果我將網址更改爲我知道的網址,則視頻播放效果良好。所以它必須與我提供文件的方式有關。HTML 5視頻未從我的MVC網站播放

如果我瀏覽到瀏覽器中的URL,視頻下載並播放正常。

該視頻爲.mp4,返回的MIME類型爲video/mp4

我正在使用Video Studio 2012,.NET 4, IIS 8 ExpressWindows 7 x64 Home Premium

這裏是我的各自的代碼:

[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"); 
    } 
} 

這裏是Chrome回報的屏幕截圖:

Network

File get request

Failed mp4 request

Failed mp4 request details

回答

6

的HTML5 Video踏歌需要Range Requests支持。

在靜態文件的情況下,此支持由服務器在內部提供,但在ASP.NET MVC的情況下,它需要在ActionResult級別實施。

文章Range Requests in ASP.NET MVC – RangeFileResult詳細描述瞭如何使用範圍請求支持創建ASP.NET MVC ActionResult。還有一個示例應用程序正在使用VideoJS可在此處獲得:​​

+0

謝謝。我有它與MP3文件,但我的MP4不工作。我在主帖中添加了錯誤信息的屏幕截圖。 – rhughes

+0

@rhughes您標記的內容長度是正確的,因爲請求具有'Range:bytes = 518758-518758'標頭(瀏覽器要求一個字節)。在Chrome上播放mp4文件有一些問題(不受支持的編碼等),只是谷歌找到一些。我建議在另一個瀏覽器中測試你的mp4文件,並測試一個已知在Chrome中工作的mp4(這應該很好 - http://www.longtailvideo.com/jw/upload/bunny.mp4首先測試它從此位置下載並在您的應用中使用)。還要確保您的HTML5視頻/來源標記中包含正確的代碼。 – tpeczek

+0

我已經嘗試過兔子視頻,它在IE 9中正常工作,但在Chrome中無法正常工作。你知道這是爲什麼嗎? – rhughes