老闆給了我一些挑戰,這個挑戰有點超出了我平常的看法,而且我很難確定我應該使用哪些技術/項目。 (我不介意,我問了一些'新':)我應該使用哪些技術從一系列內存位圖生成WebM實時流?
作業:建立一個.NET服務器端進程,可以從緩衝區每秒拾取一次位圖10次,併產生/提供10fps視頻流在現代HTML5瀏覽器中顯示。
我應該在這裏找什麼樂高積木?
Dave
老闆給了我一些挑戰,這個挑戰有點超出了我平常的看法,而且我很難確定我應該使用哪些技術/項目。 (我不介意,我問了一些'新':)我應該使用哪些技術從一系列內存位圖生成WebM實時流?
作業:建立一個.NET服務器端進程,可以從緩衝區每秒拾取一次位圖10次,併產生/提供10fps視頻流在現代HTML5瀏覽器中顯示。
我應該在這裏找什麼樂高積木?
Dave
你會想要使用FFmpeg。這裏的基本流程:
Your App -> FFmpeg STDIN -> VP8 or VP9 video wrapped in WebM
如果你在這些圖像流,可能是最簡單的事是位圖解碼成原始RGB或RGBA位圖,然後寫每一幀FFmpeg的STDIN。您必須首先讀取第一個位圖以確定尺寸和顏色信息,然後使用正確的參數執行FFmpeg子進程。完成後關閉管道,FFmpeg將完成輸出文件。如果你願意,你甚至可以將FFmpeg的STDOUT重定向到S3之類的blob存儲之類的地方。
如果所有的圖像都立即上傳,然後然後您創建視頻,它更容易。只需按順序列出文件並執行FFmpeg即可。當FFmpeg完成後,你應該有一個視頻。
另外一點信息可以幫助您瞭解如何構建FFmpeg命令行:WebM是一種容器格式。它沒有做任何事情,只是記錄了多少個視頻流,多少個音頻流,用於這些流的什麼編解碼器,字幕流,元數據(如縮略圖)等等.WebM基本上是Matroska(.mkv
),但是與一些禁用的功能使瀏覽器製造商更容易採用WebM標準。在WebM內部,您至少需要一個視頻流。 VP8和VP9是非常兼容的編解碼器。如果您想添加音頻,Opus是您可以使用的標準編解碼器。
一些資源,讓你開始:
任何提示我如何從ffmpeg的ST DOUT到瀏覽器? – davecove
@davecove你想直接輸出到瀏覽器?只需將流傳輸到客戶端流。自從我使用.NET以來已經有很多年了,但事情就是這樣。確保你的內容類型頭是正確的,並且你正在使用分塊傳輸編碼。 – Brad