2012-12-01 63 views
4

我已成功使用Android上的mediaRecorder類錄製視頻。mediaRecorder錄製最後X秒

但是,我現在需要做的是將它記錄下來,直到我告訴它停止,但只保留記錄的最大X秒。例如,如果我在時間= 0(秒)開始錄製,並且已將其設置爲記錄最大10秒,如果我在時間= 20(秒)時停止錄製,則錄製的視頻將是10..20秒的時間。

唯一類似於我發現的是setMaxDuration,但在指定時間設置後自動停止,所以在我的情況下它只會記錄前10秒。

+0

你解決了嗎? –

+0

@Tushar號對不起。很久以前了。 –

+1

@Tushar我還不知道這是否是一個有效的例子,因爲我剛開始調查它,但是當我從源代碼對我的手機進行測試時,這聽起來非常有希望。查看Grafika的ContinuousCaptureActivity,它使用CircularEncoder作爲視頻。我想你可以搭配另一個用於音頻流的環形編碼器。 [grafika github](https://github.com/google/grafika/blob/master/src/com/android/grafika/ContinuousCaptureActivity.java) – jschlepp

回答

0

我不知道有什麼方法可以使用SDK來完成您的需要。你可以讓它錄製視頻,然後當你確定它將視頻剪切到最後10秒。

我還沒有使用它,但這個傢伙表明他的圖書館在這個answer

+0

mp4parser庫似乎很有前途。我可以使用2個緩衝區文件解決方案,當我準備好停止錄製時,合併這兩個文件,然後裁剪合併的文件。你確定沒有其他解決方法嗎?也許將記錄的outputStream設置爲一個緩衝區,我將負責在需要的地方切割? –

3

於媒體記錄器來記錄X秒我只好簡單地把這些代碼YOR錄像CODE

Intent captureVideoIntent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE); 
captureVideoIntent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10); 
captureVideoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
startActivityForResult(captureVideoIntent, VIDEO_CAPTURED); 
+2

你不明白:我需要在應用程序中完成它,再加上我需要它來不斷記錄,當我告訴它停止時,我應該只給我最後的X秒。 –

0

用於搜索的正確關鍵字是「循環緩衝區」。 你會看到一些方法,這些方法不是微不足道的。 一些使用NDK解決方案。

我的想法是: 你知道X秒你想記錄。 比記錄到文件X_1,之後它結束記錄。 自動啓動並記錄fileX_2直到結束。 當它結束時,然後記錄到fileX_3並刪除fileX_2以節省空間。

所以最大存儲和視頻長度可以是X * 2,最小可以是X.

要使用圓形記錄我認爲它有將其解碼的幀,存儲它,對其進行編碼,很多的處理能力被使用,這導致電池漏液和加熱裝置!

+0

沒有更好的方法嗎?安全攝像頭是否以相同的方式工作? –