2013-04-23 117 views
6

我目前使用onPreviewCallback,因此我可以在預覽時捕獲攝像頭的幀並通過http進行流式傳輸。在錄製視頻時保持預覽回調?

這一工程,但後來我發出命令開始錄製和,看來,我沒有預覽回調了。

那麼,我該如何保持預覽回調,所以我可以同時發送從表面框架到我的服務器和記錄設備上的視頻?

回答

5

我在Android Camera上工作了很長時間。然而,當您正在錄製

我記得

1)onPreviewCallback不叫它在幾個問題中提到:

Camera onPreviewFrame not called How to show real time filtered camera preview while recording videos?

2)我看到它是處理在SipDroid和情侶以下方式其他Android SIP客戶端的(這是一個1-2年前,所以這種方法可能是outdates):

  • 的管被創建
  • 接收到該管的插座被包裹在的FileDescriptor並傳遞給MediaRecorder setOutputFile
  • 發送管的插座中的螺紋不斷讀出。
  • 這樣你就可以收到一個寫入文件的內容
  • 現在,如何處理內容的問題(因爲,它的H.263或H.264編碼,並可能與聲音混合,如果你用聲音錄製視頻)。
  • 有其解析的內容(然而,這是痛苦的屁股)

3)您可以使用onPreviewFrame +啓動AudioRecorder和自己進行編碼(使用ffmpeg的或類似的東西)的MP4一些啓發式算法文件。這樣您就不需要啓動MediaRecorder錄音。

1

一旦我的相機和MediaRecorder啓動並沒有崩潰停止記錄(不容易),如你所說,在預覽回調將停止獲取調用我仍然有一個問題。

我終於找到了修復程序將調用mediaRecorder.start()後setPreviewCallback,另有mediaRecorder.stop後()。不知道這是否正確,但它對我正在測試的Razr M有效。

2

你可以叫你的媒體recorder.start後,這些方法()被調用如下:

camera.reconnect(); 
camera.setPreviewCallback(); 
surfaceview.getHolder().addCallback(); 

的原因:

  1. camera.unlock後()被調用,另一個進程(這裏是媒體記錄過程)可以使用相機;過程完成後,您必須重新連接相機,相機將重新獲取鎖定並允許您繼續使用相機。
  2. 然後照相機 重新連接後重新註冊surfaceview幀數據回調,因爲重新連接後的狀態的一些可以改變。

我曾經在你的應用程序中遇到同樣的問題,我通過這個來解決它。希望它能解決你的問題!