2013-04-08 12 views
8

Próbuję użyć AVCaptureSession do przechwytywania wideo z kamery, a następnie chciałbym użyć AVAssetWriter do zapisania wyników do pliku (w szczególności, użyj wielu AVAsetwriterów, aby zapisać przechwycenie do fragmentów filmów, ale nie potrzebujemy skomplikować to pytanie). Jednak mam problem z ustaleniem, gdzie dane muszą zostać przekazane do AVAssetWriter. W dokumentacji dla programistów Apple widziałem tylko dane AVCaptureSession przekazane do AVCaptureFileOutput. Może jednak coś mi brakuje. Czy AVAssetWriter może być użyty jako wynik sesji przechwytywania? Odpowiedni przykład lub fragment kodu (choć nie jest to konieczne) zostałby doceniony. Dziękuję bardzo!AvFoundation - Jak podłączyć AVCaptureSession i AVAssetWriter?

Odpowiedz

4

Jaki jest twój cel, dokładnie? Ponieważ o to pytasz (użycie AVAssetWriter jako wyjścia dla AVCaptureSession) nie jest możliwe.

Zasadniczo obiekt AVCaptureSession ma wejścia (np. Kamera reprezentowana przez niektóre podklasy AVCaptureInput) i wyjścia (w postaci AVCaptureOutput). I AVAssetWriter nie jest podklasą AVCaptureOutput, więc nie ma możliwości użycia jej bezpośrednio z AVCaptureSession.

Jeśli chcesz użyć AVAssetWriter, musisz zapisywać dane używając instancję AVCaptureFileOutput, a następnie odczytać go z powrotem z AVAssetReader, modyfikować swoje dane jakoś a następnie wyjście go poprzez AVAssetWriter.

Ostatnia rzecz, o której należy pamiętać: AVAssetReader jest udokumentowana, aby nie gwarantować działania w czasie rzeczywistym.

+1

Hmm, interesujące. Próbowałem odejść od tego, co znalazłem w odpowiedzi [tutaj] (http://stackoverflow.com/questions/13851481/http-live-streaming-server-on-iphone) i wznowionych komentarzy [tutaj] (http: //stackoverflow.com/questions/3444791/streaming-video-from-an-hiphone) (między innymi), w którym sugerują streaming można uzyskać poprzez utworzenie dwóch zestawów AVA i używanie ich pojedynczo. – golmschenk

+2

Wygląda na to, że na podstawie moich poszukiwań najpopularniejszy sposób przesyłania strumieniowego wideo z kamery na iPhone'a został osiągnięty. Teraz, kiedy już o tym wspomniałeś, jestem bardziej zdezorientowany, dlaczego ta metoda jest zasugerowana ... – golmschenk

+3

Nie musisz używać 'AVAssetWriter', aby podzielić wideo na porcje 10-sekundowe. Możesz to zrobić za pomocą 'AVCaptureMovieFileOutput'; ustaw właściwość 'maxRecordedDuration' na 10s i ponownie uruchom nagrywanie (do nowego pliku) w' -captureOutput: didFinishRecordingToOutputFileAtURL: fromConnections: error: ', aby uzyskać następne 10 sekund. – zadr