2013-04-23 23 views
6

Obecnie używam onPreviewCallback, więc mogę przechwytywać klatki z kamery podczas podglądu i przesyłać strumieniowo przez http.Prowadzenie podglądu połączenia zwrotnego podczas nagrywania wideo?

To działa, ale potem wydaje polecenie, aby rozpocząć nagrywanie i wydaje się, że nie mam już podglądu oddzwaniania.

Jak zatem zachować wywołanie zwrotne podglądu, aby zarówno wysłać ramki z powierzchni do mojego serwera, jak i nagrać wideo na urządzeniu?

Odpowiedz

5

Nie pracowałem przez dłuższy czas z kamerą z Androidem. Jednak, jak pamiętam

1) onPreviewCallback nie jest wywoływana podczas nagrywania

To wspomniano w parę pytań:

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

2) Widziałem, że był to obchodzić w Sipdroid i kilku innych klientów Android SIP następujący sposób (to było 1-2 lat temu, więc ta metoda może być deaktualizuje):

  • rury jest utworzone
  • Otrzymywanie gniazdo rury owinięto deskryptora i przekazywane do MediaRecorder setOutputFile
  • Przesyłanie gniazdo rury ciągle odczytywane w wątku.
  • W ten sposób można otrzymać zawartości, co jest napisane w pliku
  • Teraz kwestia, jak radzić sobie z zawartością (ponieważ jest to H.263 lub H.264 zakodowany i może być mieszany z dźwiękiem, jeśli nagrywasz wideo z dźwiękiem).
  • Było kilka heuristical algorytmy, które analizowany zawartość (jednak jest to ból w dupie)

3) Można używać onPreviewFrame + rozpocznie AudioRecorder i zakodować go samodzielnie (za pomocą ffmpeg czy coś takiego) do mp4 plik. W ten sposób nie musisz uruchamiać nagrywania MediaRecorder.

1

Kiedy dostałem aparat i MediaRecorder, aby rozpocząć i zatrzymać nagrywanie bez awarii (nie było to łatwe) Wciąż miałem problem, jak opisałeś, gdzie wywołanie zwrotne podglądu przestałoby być wywoływane.

Rozwiązaniem, które znalazłem w końcu, było dodanie wywołania setPreviewCallback po mediaRecorder.start(), a kolejne po mediaRecorder.stop(). Nie jestem pewien, czy to jest poprawne, ale działało na Razr M, który testuję.

2

można nazwać tych metod po swojej recorder.start multimediów() wywoływanej w następujący sposób:

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

Powody:

  1. Po camera.unlock() jest wywoływana, inny proces (tutaj jest proces nagrywania multimediów) może korzystać z kamery; Po zakończeniu tego procesu musisz ponownie połączyć się z kamerą, która ponownie uzyska blokadę i pozwoli ci dalej korzystać z aparatu.
  2. A następnie ponownie zarejestruj wywołanie zwrotne danych ramki widoku powierzchni po ponownym podłączeniu kamery , ponieważ jej stan może zostać zmieniony po ponownym podłączeniu.

W moim zgłoszeniu zawsze byłam tym samym problemem, co Ty, i naprawiłam go przez to. Mam nadzieję, że rozwiąże Twoje problemy!

Powiązane problemy