我正在創建一個基於Web的移動應用程序,應該可以上傳視頻錄像。 有兩種方法來實現這一目標:HTML5記錄適中的視頻質量,可供Safari瀏覽器上傳
使用輸入:
<input type="file" name="video" accept="video/*" capture></input>
使用RTC MediaRecorder:
var recordedBlobs = [];
function handleDataAvailable(event) {
if (event.data && event.data.size > 0) {
recordedBlobs.push(event.data);
}
}
var options = {
mimeType: 'video/webm',
audioBitsPerSecond : 128000,
videoBitsPerSecond : 2500000
}
mediaRecorder = new MediaRecorder(window.stream, options);
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.start(10);
雖然第一個選項始終工作的主要問題是,它使用內置的移動照相機應用程序讓我們無法控制質量,這又導致潛在的非常大的文件(特別是在android上)
第二個版本讓我們完全控制質量,並讓操作系統創建適中的文件大小,這些文件大小在應用程序中的大小方面可以接受。 iOS/Safari目前還不支持此功能,但這樣做沒有問題,因爲從瀏覽器啓動時,iPhones默認記錄小文件。所以我可以在用戶代理是iOS時激活選項1。
現在的問題:
第一個選擇,如果我可以罰款:
- 控制移動應用程序的視頻錄製質量
- 後闡述的記錄來改變上傳面前的決議
選項2的問題是隻支持.webm容器類型,Safari不支持此類型。
所以我有點卡住了 - 現在看來,我唯一的選擇是將上傳的.webm文件轉換爲服務器上的.mp4文件。但它似乎是一個非常昂貴的CPU在服務器上的過程。
任何好主意?
如果要進行後期處理,您必須將'.webm'文件存儲在客戶端或服務器上,並將其轉換爲'.mp4'文件。在服務器端,你可以用FFMpeg來完成。在客戶端,您可以使用開源庫進行轉換。 –
我可以說,我一直在使用服務器端的ffmpeg將webm轉換爲mp4。我甚至做了一個很好的腳本,可以顯示進度的百分比。但轉換既耗時又耗CPU。我想做一個ffmpeg -c副本,從而省略重新編碼。但不幸的是,這對於webm容器來說是不可能的。如果我可以運行一個ffmpeg命令,它可以在不重新編碼的情況下進行轉換,那麼這就是解決方案。 –
*「如果我可以運行一個ffmpeg命令,可以轉換而不需要重新編碼」* - 不可能。如果不進行重新編碼,您無法將一種格式轉換爲另一種格式,.webm和.mp4會有很大不同。 –