我正在尋找最佳方式(如果有...)將連續視頻捕獲到SD卡上的循環緩衝區,以便用戶在事件發生後捕獲事件。將視頻錄製到Android上的循環緩衝區中
標準視頻錄製API允許您直接寫入文件,當達到極限(由用戶設置或SD卡的容量)時,必須停止並重新開始錄製。這會創建長達2秒的記錄未運行的長窗口。這就是DailyRoads Voyager等一些現有的應用程序已經做到的。爲了儘量減少丟失重要事物的機會,可以將分離時間設置爲很長的時間,例如10分鐘,但是如果在該時間段結束時發生事件,則通過在開始處存儲9分鐘沒有任何內容而浪費空間。
因此,我現在的想法如下:我將有一個大文件作爲緩衝區。我將使用我發現的一些代碼來捕獲這些幀,並將它們保存到文件中,最後環繞它們。當用戶想要保留某個部分時,我會通過指向緩衝區中開始和結束的指針來標記它。錄音可以像以前一樣繼續,跳過標記爲保留的區域。
錄製停止後,或者在後臺線程中(取決於電話/卡的速度),我會將標記區域複製到另一個文件並刪除覆蓋保護。
主要問題,如果你不關心上述細節:我似乎無法找到一種方法來將單個幀轉換爲Android SDK中的視頻文件。可能嗎?如果沒有,有沒有可用的庫,也許在本地代碼,可以做到這一點?
我並不關心非壓縮幀的大緩衝區,但導出的視頻應該以Android友好的格式進行壓縮。但是如果有一種方法來壓縮緩衝區,我想知道它。
謝謝。
看起來像獲得編碼視頻流的好方法,謝謝。我必須嘗試一下它的表現。但是解碼單個幀會使用太多的CPU,甚至在某些手機上甚至可能不會實時(編碼+同時解碼)。所以我認爲我只是將編碼流寫入一些循環文件緩衝區,而不用標題等等。然後在導出過程中,我會嘗試將編碼的幀連同一些標頭一起打補丁並創建一個有效的視頻文件。 – lacop
@albwq,你的方法是否適合你? – Felix
你能提供一些模擬代碼嗎?這將是非常有益的! =) –