視頻轉碼(Video Transcoding)是指將已經壓縮編碼的視頻碼流轉換成另一個視頻碼流,以適應不同的網絡帶寬、不同的終端處理能力和不同的用戶需求。轉碼本質上是一個先解碼,再編碼的過程,因此轉換前后的碼流可能遵循相同的視頻編碼標准,也可能不遵循相同的視頻編碼標准。
從上傳視頻到用戶能看到上傳的視頻為止,它需要在服務器內部經歷復雜的過程,下圖就是一段視頻在服務器內部掙扎的過程:
一般我們在使用此項技術(要引入ffmpeg文件)的時候,通常另配置一台視頻轉碼的服務器,我們就從上傳視頻開始來模擬它在服務器內部的處理過程:
一、用戶上傳視頻文件:Asp.net為了防止過大的http惡意請求阻塞網站,限定了每次上傳文件最大4M,如果上傳的文件不大,則先把它保存在內存中,如果文件過大,就會保存在磁盤中。為了保證安全,我們可以只對上傳的ashx文件夾添加獨立的web.config。其配置如下:
<system.web>
<HttpRuntime maxRequestLength="204800" requestLengthDiskThreshold="1024"/>
</system.web>
首先,我們需要上傳視頻,視頻上傳前台代碼部分如下:
視頻上傳到服務器的代碼如下:
視頻上傳成功之后,會將上傳視頻的內容保存在數據庫中,並將它的狀態信息設置為“已經上傳到服務器上”另外會將它的信息通
過url傳參的形式上傳到解碼服務器上,視頻在解碼服務器上的處理過程如下:
由於會經常有視頻文件進行上傳,我們的服務器需要不停的判斷是否有新的視頻進行轉碼操作,所以我們可以通過采用網站應
用程序啟動的時候調用啟動線程的方法。在Global.asax.cs文件的Application_Start方法下啟動線程,啟動方式為
ConverterMgr.Instance.Start();
將視頻文件進行轉碼之后,將數據庫中的視頻的狀態更新為"轉換完成”,將轉碼視頻文件的信息回交給原來的服務器,也是通
過url傳參的形式,在一般程序中進行處理,原因是一般處理程序不走頁面生命周期,執行效率高。
接收到內容以后,我們可以使用Dreamweaver CS3插入flash文件(這樣做比在.aspx文件中做要簡單),播放文件,后台代碼
為:
我們從網站上看到的視頻就可以這樣來做了。