2014-11-05 3 views

답변

23

이 솔루션은 an answer to a completely different question으로 나타났습니다.

문제는 AVCaptureMovieFileOutput에서 movieFragmentInterval 속성입니다.

이 속성의 문서는이 조각이 무엇인지 설명 :

퀵타임 동영상이 미디어 샘플 구성 및 샘플 테이블 파일에서 자신의 위치를 ​​식별한다. 샘플이없는 동영상 파일 테이블을 읽을 수 없습니다.

처리 된 파일에서 샘플 표는 일반적으로 파일의 시작 부분에 나타납니다. 파일 끝에 으로 나타날 수도 있는데,이 경우 헤더에 끝에 샘플 테이블에 대한 포인터가 들어 있습니다. 새 동영상 파일을 기록 할 때 파일 크기가 아직 알려지지 않았으므로 샘플 테이블에 쓸 수 없습니다. 대신 녹음이 완료되면 표를 작성해야합니다. 다른 조치가 수행되지 않으면 녹음이 이 성공적으로 완료되지 않은 경우 (예 : 충돌이 발생한 경우) 파일을 사용할 수 없음을 의미합니다 (샘플 표가 없으므로). 주기적으로 "동영상 조각"을 동영상 파일에 삽입하면 샘플 표는 증분으로 빌드 할 수 있습니다. 즉, 파일에 이 완전히 기록되지 않으면 영화 파일을 계속 사용할 수 있습니다 (마지막 조각이 인 지점까지).

또한 말한다 :

기본값은 10 초입니다. kCMTimeInvalid로 설정하여 동영상 조각 쓰기를 비활성화합니다 (일반적으로 권장하지 않음).

그래서 어떤 이유로 조각이 작성 될 때마다 내 녹음이 엉망이되어 버립니다. 방금 조각 쓰기를 사용하지 않도록 movieFileOutput.movieFragmentInterval = kCMTimeInvalid; (movieFileOutput이 AVCaptureSession에 추가 한 AVCaptureMovieFileOutput) 줄을 추가 했으므로 이제 오디오가 작동합니다.

2

업데이트 videoFileOutput.movieFragmentInterval = kCMTimeInvalid이 문제가 해결되었습니다.

그러나 실수로 startRecordingToOutputFileURL을 호출 한 후 movieFragmentInterval을 설정했습니다. 괴로운 시간이 지난 후에 나는 내 실수를 깨달았다. 나와 같은 초보자를 위해서 이 명백한 순서을주의하십시오.

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

또한이 문제가 발생했습니다. 기본적으로 영화 조각 쓰기는 작동하지 않지만 문제를 실제로 설명하지는 않습니다. 대개 mp4과 같이이 기능을 지원하지 않는 파일 확장명을 사용하여 출력 파일에 녹음하는 경우 일 수 있습니다. 확장자가 mov 인 출력 파일을 전달하는 경우 동영상 조각 쓰기를 사용하는 데 문제가 없어야하며 출력 파일에 오디오가 있어야합니다.