[英]Video Streaming with HTML 5 and ASP.NET MVC 5
我正在研究一個媒體文件管理項目,我被要求評估包含視頻流來觀看視頻而不是下載視頻的可行性(這是當前的方式)。 可悲的是,我找不到很多指南(事實上,我發現很多指南,但大多數指南都已過時或最近引用了過時的教程)。 我正在關注的是本指南 ,雖然我不需要它全屏工作。
基本上我正在做的事情(根據教程)是將它添加到HomeController.cs:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
...
public ActionResult GetVideo()
{
var videoPath = Request.MapPath("~/Content/music.mp4");
FileStream fs = new FileStream(videoPath, FileMode.Open);
return new FileStreamResult(fs, "video/mp4");
}
這到Index.cshtml:
<video controls="controls" id="videoPlayer">
<source src="~/home/getvideo" type="video/mp4">
</video>
如您所見,我只是使用MVC 5和HTML5,因為我無法添加工具或插件以保持項目的簡單性。
無論如何,通過Chrome DevTools觀看網絡交易我可以看到GetVideo方法有兩個請求:
除此之外,我無法播放文件!
我在GetVideo方法中添加了一個斷點,我發現:
所以這是我的問題:為什么視頻沒有播放? 為什么控制器會收到兩個請求?
P / S:是的,視頻在該文件夾中。 是的,這是文件的名稱和擴展名。 是的,我可以直接使用瀏覽器播放視頻。
返回文件流與“流式傳輸”不同。 從技術上講,服務器只是一次性推送視頻文件。 然后客戶端只是下載文件,就像他們真正下載文件一樣。 如果客戶端(Web瀏覽器)能夠解釋視頻文件並且視頻文件能夠進行流式處理(前端加載標題),那么瀏覽器可能會在完全完成之前開始播放它,但這也不是真的流媒體 。 它更類似於加載漸進式JPEG:瀏覽器在全部信息可用之前主動嘗試盡快顯示信息。 如果連接速度變慢,視頻將停止。 沒有緩沖的概念。
如果您想真正流式傳輸視頻,則需要一個真正的流媒體服務器。 這里有各種各樣的選項,但通常它們的工作方式是通過調整視頻文件與客戶端的連接:更低或更高的比特率。 這種互動你不會只是通過MVC推送文件,甚至直接通過IIS推送文件。
無論您是使用真正的流媒體解決方案還是僅僅依靠瀏覽器播放視頻,您仍應將其與實際的MVC網站隔離開來。 Web服務器可以處理有限數量的請求,它們旨在盡快(幾秒甚至幾毫秒)清除這些請求。 它們不適合在單個響應中發送大量數據,這需要花費幾分鍾或更長時間。 如果視頻的請求數量足夠大,您最終可能會導致Web服務器死鎖並占用整個站點。 由於是不同的服務器,流媒體服務器不會造成這個問題。 或者,您可以在CDN上托管文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.