2017-08-18 81 views
4

我正在創建一個基於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。

現在的問題:

第一個選擇,如果我可以罰款:

  1. 控制移動應用程序的視頻錄製質量
  2. 後闡述的記錄來改變上傳面前的決議

選項2的問題是隻支持.webm容器類型,Safari不支持此類型。

所以我有點卡住了 - 現在看來,我唯一的選擇是將上傳的.webm文件轉換爲服務器上的.mp4文件。但它似乎是一個非常昂貴的CPU在服務器上的過程。

任何好主意?

+0

如果要進行後期處理,您必須將'.webm'文件存儲在客戶端或服務器上,並將其轉換爲'.mp4'文件。在服務器端,你可以用FFMpeg來完成。在客戶端,您可以使用開源庫進行轉換。 –

+0

我可以說,我一直在使用服務器端的ffmpeg將webm轉換爲mp4。我甚至做了一個很好的腳本,可以顯示進度的百分比。但轉換既耗時又耗CPU。我想做一個ffmpeg -c副本,從而省略重新編碼。但不幸的是,這對於webm容器來說是不可能的。如果我可以運行一個ffmpeg命令,它可以在不重新編碼的情況下進行轉換,那麼這就是解決方案。 –

+0

*「如果我可以運行一個ffmpeg命令,可以轉換而不需要重新編碼」* - 不可能。如果不進行重新編碼,您無法將一種格式轉換爲另一種格式,.webm和.mp4會有很大不同。 –

回答

2

您可以將H.264錄製到webm容器中。 Chrome支持此功能。

var options = {mimeType: 'video/webm;codecs=h264'}; 

media_recorder = new MediaRecorder(stream, options); 

雖然它是視頻格式和容器的通常組合 - 它是有效的。

現在您可以將H.264/webm轉換爲H.264/mp4,而無需使用ffmepg(-vcodec copy)對視頻流進行轉碼。

您也可以嘗試使用ffmpeg.js在JavaScript中重新從webm轉換到mp4客戶端。

+0

我剛剛在視頻/ webm; codecs = h264錄製的feed上嘗試了-vcodec副本。我跑這個命令: 'ffmpeg的test.webm -vcodec副本test.mp4' 得到了以下錯誤:輸出文件#0中不包含任何流 –

+0

如果我能做的非轉碼格式的變化,那麼它是肯定是我需要的解決方案。 –

+0

我忘記了'-i'的人:-D –

相關問題