2014-11-05 7 views

Odpowiedz

23

Znalazłem rozwiązanie jako an answer to a completely different question. Jest to właściwość movieFragmentInterval w pliku AVCaptureMovieFileOutput.

Dokumentacja dla tej nieruchomości wyjaśnia czym te fragmenty są:

filmu QuickTime składa się z próbek mediów i stół próbki identyfikowanie ich lokalizacji w pliku. Plik filmu bez przykładowej tabeli jest nieczytelny.

W przetworzonym pliku przykładowa tabela zazwyczaj pojawia się na początku pliku. Może również pojawić się na końcu pliku, w tym przypadku nagłówek zawiera wskaźnik do tabeli próbek na końcu . Kiedy nagrywany jest nowy plik filmu, nie można zapisać tabeli próbek, ponieważ rozmiar pliku nie jest jeszcze znany. Zamiast tego tabela musi zostać zapisana po zakończeniu nagrywania. Jeśli nie zostanie wykonana żadna inna czynność, oznacza to, że jeśli nagranie nie zakończy się pomyślnie (na przykład w przypadku awarii), dane pliku nie będą się nadawać (ponieważ nie ma tabeli próbek). Okresowo wstawiając "fragmenty filmu" do pliku filmu, tabelę próbek można stopniowo zwiększać. Oznacza to, że jeśli plik nie jest w całości zapisany jako , plik filmowy nadal nadaje się do użytku (do momentu, w którym został napisany ostatni fragment ).

mówi również:

Wartość domyślna to 10 sekund. Ustaw wartość kCMTimeInvalid, aby wyłączyć zapisywanie fragmentów filmu (zwykle niezalecane).

Z jakiegoś powodu moje nagranie jest pomijane za każdym razem, gdy zostanie napisany fragment. Właśnie dodałem linię movieFileOutput.movieFragmentInterval = kCMTimeInvalid; (gdzie movieFileOutput jest AVCaptureMovieFileOutput, którą dodałem do AVCaptureSession), aby wyłączyć pisanie fragmentów, a dźwięk teraz działa.

2

Aktualizacja videoFileOutput.movieFragmentInterval = kCMTimeInvalid rozwiązała to dla mnie.

Jednak, po wywołaniu movieFragmentInterval, ustawiłem startRecordingToOutputFileURL. Bolesna godzina później uświadomiłem sobie mój błąd. Dla początkujących, takich jak ja, odnotuj tę oczywistą sekwencję.

videoFileOutput.movieFragmentInterval = kCMTimeInvalid 
videoFileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: recordingDelegate) 
2

Wystąpił również ten problem. Zasadniczo wyłączenie pisania fragmentów filmu będzie działało, ale w rzeczywistości nie wyjaśnia problemu. Najprawdopodobniej nagrywasz do pliku wyjściowego przy użyciu rozszerzenia pliku, które nie obsługuje tej funkcji, na przykład mp4. Jeśli prześlesz plik wyjściowy o rozszerzeniu mov, nie powinieneś mieć problemów z pisaniem fragmentów filmu, a plik wyjściowy będzie miał dźwięk.