我有一個應用程序,旨在從我們的本地數據庫流式傳輸視頻。昨天我花了很多時間嘗試將數據返回RangeFileContentResult
或RangeFileStreamResult
而沒有成功。RangeFileContentResult和帶有遠程請求的視頻流
總之,當我將這兩個結果中的任何一個作爲返回文件時,我似乎無法獲得正確流式傳輸的視頻(或根本無法播放)。
來自瀏覽器的請求被用下面的頭部信息:
Range: bytes=0-
並附帶提供的答覆讓這些標題爲例:
Accept-Ranges: bytes
Content-Range: bytes 0-5103295/5103296
在網絡流量方面,我得到一系列206的部分結果,然後200結束(根據fiddler)這似乎是正確的。 Chrome瀏覽器的網絡標籤不同意這一點,並看到一個初始請求(總是13個字節,我認爲這是一個握手),然後是多個狀態爲取消或掛起的請求。 據我瞭解,這或多或少是正確的,206 - 取消,206 - 取消等,但視頻不會播放。
如果我將結果從我的控制器切換到FileResult,視頻會播放和Chrome,IE10和Firefox,並且在下載結束之前似乎開始播放(這有點像流媒體!雖然我懷疑它不是)
但隨着範圍的結果,我沒有得到任何鉻或IE瀏覽器和整個視頻下載一滴在Firefox。
據我所知,RangeFileContentResult
應處理響應客戶端的一系列字節下載(我似乎不這樣做,它只是告訴它獲取整個文件(由上面的響應說明) ))。客戶應該回應,但似乎沒有這樣做。
有沒有人在這方面有任何想法?具體來說:
a)RangeFileContentResult
應該發送一個字節範圍回客戶端? b)有什麼辦法可以明確地控制從客戶端請求的字節範圍嗎? c)當請求RangeFileContentResult
時,是否有任何原因或任何我在這裏做錯的事情,導致瀏覽器根本無法加載視頻?
編輯:增加了一個圖來幫助描述我所看到的:
EDIT2:好了,情節變稠。雖然與RangedFile格賓斯玩弄我們需要進行推另一個系統的測試版本,我離開了「RangeFileContentResult」在我的控制器操作如下:
private ActionResult RetrieveVideo(MediaItem media)
{
return new RangeFileContentResult(media.Content, media.MimeType, media.Id.ToString(), DateTime.Now);
}
而奇怪的是,這個現在看來工作我們天青如預期系統測試環境,但仍然不在我的本地機器上。我想知道是否有什麼基於IIS的東西在Azure IIS8上運行愉快,但不在我的本地7.5實例?
嗨。我是Lib.Web.Mvc作者,我很樂意在這個特定的問題上挖掘。我們與iPad上的Safari有類似之處,這是由於它沒有上限地請求獲取關於該文件的信息而引起的請求。然後瀏覽器取消請求而不等待數據被傳輸(通常協議被瀏覽器侵犯)。這可能是類似的東西。請給我發一封電子郵件,告知您的環境詳情,以便我可以重新解決問題。你也可以在這裏找到Lib.Web.Mvc的完整源代碼和一些其他的東西:http:\\ tpeczek.codeplex.com。 – tpeczek
@tpeczek嗨托馬斯,謝謝你,你能讓我知道最好的地址與你聯繫。我看到的主要奇怪的事情是從同一個版本加載之間的不一致。例如對於用戶1而言,它適用,對於用戶2則不適用。然後,用戶1刷新並工作,但用戶2刷新並且不刷新。讓我知道最好的地址,我會彈出一些細節。 – dougajmcdonald
從我的個人資料:[email protected]。請提供儘可能詳細的信息(代碼,視頻,涉及的瀏覽器,主機配置,例外情況,任何日誌等) – tpeczek