2013-02-16 13 views
8

Próbuję dowiedzieć się, w jaki sposób mogę zaimplementować funkcjonalność, aby wielokrotnie wstrzymywać i wznawiać przechwytywanie wideo w pojedynczej sesji, ale mieć każdy nowy segment (przechwycone segmenty po każdym pauza) dodane do tego samego pliku wideo, z AVFoundation. Obecnie za każdym razem, gdy naciskasz "stop", a następnie "nagrywaj" ponownie, po prostu zapisuje nowy plik wideo w albumie mojego iPhone'a i rozpoczyna przechwytywanie do osobnego/nowego pliku. Muszę być w stanie naciskać przycisk "zapisz/zatrzymaj" w kółko ... tylko przechwytywanie wideo & audio, gdy rekord jest aktywny ... następnie po naciśnięciu przycisku "done", mieć pojedynczy plik AV ze wszystkimi segmenty razem. A wszystko to musi się zdarzyć w tej samej sesji sesji przechwytywania/podglądu.Wstrzymywanie i wznawianie przechwytywania wideo dla tego samego pliku z AVFoundation w iOS

Jedyny sposób, w jaki mogę to wypróbować, to naciśnięcie przycisku "done", pobranie każdego pojedynczego pliku wyjściowego i połączenie ich w jeden plik ... Ale jestem pewien, że czas przetwarzania zasadniczo wkleja się kilka osobnych klipów nie będzie do zaakceptowania. Poza tym, wygląda na to, że będzie to niepotrzebny sposób na zbieranie informacji, zbyt dużo kodu.

Czy istnieje prosty sposób, aby po prostu wstrzymać przechwytywanie wideo w ramach jednej sesji i po prostu wznowić przechwytywanie do tego samego pliku? Lub jakieś inne pomysły?

Jeśli to nie będzie kłopot, to przykładowy kod pomoże mi tony ... Wciąż uczę się & ucząc samego siebie, więc nie jestem świetny w stosowaniu terminologii w objaśnieniach. Dzięki

edit: to jest projekt Ja zaczynając nauczyć AVFoundation ... więc jest to kod szukam zmienić, aby osiągnąć powyższą funkcjonalność: http://developer.apple.com/library/ios/#samplecode/AVCam/Introduction/Intro.html

+0

Jeśli znajdziesz odpowiedź na to pytanie, wyślij mi do niego zapytanie. –

+0

@Daniel Czy otrzymałeś rozwiązanie? –

Odpowiedz

10

Zamiast używać wyjścia pliku filmowego z sesji przechwytywania, można użyć AVCaptureVideoDataOutput, a w swoim uczestniku przekazać próbki do instancji AVAssetWriterInput. Następnie możesz odłączyć podgląd od nagrania. Jeśli Twój delegat nie przekazuje buforów do autora zasobów, nie ma nagrania dla tej części.

Gdy chcesz rozpocząć nagrywanie drugiej (i kolejnej) sesji do tego samego pliku, musisz dostosować sygnatury czasowe tak, aby były sekwencyjne od miejsca, w którym się zatrzymałeś, i musisz upewnić się, że dokonujesz takiej samej regulacji zarówno dla audio, jak i wideo, aby pozostać w zlewie. Tak trochę skrzypiące, ale na pewno wykonalne.

Edit: tam próbka aplikacja na iPhone, która pokazuje to co http://www.gdcl.co.uk/2013/02/20/iPhone-Pause.html

G

+0

Dzięki, Geraint, za odpowiedź. Wciąż jestem nowy w stosunku do celu i próbuję przebić się przez rozumienie tego, co powiedziałeś. Z pewnością rozumiem logikę, która kryje się za twoją odpowiedzią, i wygląda na to, że prawdopodobnie to zadziała. Problemem dla mnie jest zastanawianie się, jak właściwie zaimplementować. Przeglądałem przykłady/przykładowy kod dla bitów i fragmentów tego, co sugerowałeś, ale mam ciężki czas. Będę kontynuował polowanie i jeśli będę mógł to załatwić, natychmiast przyjmuję twoją odpowiedź. W międzyczasie, jeśli masz przykładowy kod lub linki, które pomogą mi zacząć, bardzo mi to pomoże! Thx –

+0

Mam trochę kodu. Sprzątnę to do postaci do opublikowania. Pinguj mnie, jeśli nic nie zauważysz w ciągu kilku dni. –

+0

@Geraint Davies - Szukam dokładnie tego samego. Czy możesz opublikować swój kod tutaj na github. Ja też nie mogę znaleźć żadnego zapisu ani przykładu na ten temat. Dzięki –

1

Generalnie używam startRunning i stopRunning jeśli używam AVCaptureSession. Zakładam, że będziesz.

Zobacz dokumentację programu AVCaptureSession.

+0

Nie zatrzymuj się Czy chcesz zatrzymać całą sesję i zakończyć podgląd na żywo, co kamera będzie rejestrować podczas nagrywania? –

+0

Prawidłowo, ponieważ podczas tworzenia obiektu AVCaptureVideoPreviewLayer robisz to w określonej sesji. Czy chcesz zachować warstwę podglądu i móc rozpocząć przechwytywanie/zatrzymywanie przechwytywania?podobne do magnetowidu? – Spectravideo328

+0

Tak, muszę utrzymywać warstwę podglądu. użytkownik musi zasadniczo być w stanie wskazać, przechwycić na kilka sekund, zatrzymać .... spojrzeć na coś innego, punkt, uchwycić, zatrzymać .... spojrzeć na coś innego, punkt, strzelać, zatrzymać ... itp, wszystko w tej samej sesji. Następnie, gdy skończysz, przygotuj pojedynczy plik wideo, który po prostu odtwarza każde przechwycenie w jednym, ciągłym pliku. Ja również trochę zmodyfikowałem moje pytanie, aby mieć nadzieję, że będzie to bardziej przejrzyste i mieć nieco więcej sensu. –

0

można po prostu użyć HBRecorder. HBRecorder to narzędzie do nagrywania wideo z funkcją pauzy/rozpoczęcia & piękne animacje pomiędzy segmentami wideo.

+0

Czy mogę prosić o zapoznanie się z [Jak oferować osobiste biblioteki open source?] (// meta.stackexchange.com/q/229085)? –

Powiązane problemy