AVCaptureSession을 사용하여 오디오가있는 비디오를 녹화하고 있습니다. 짧은 동영상의 경우 모든 것이 제대로 작동하는 것으로 보이지만 어떤 이유로 약 12 초보다 긴 동영상을 녹화하면 오디오가 작동하지 않습니다.긴 비디오의 경우 AVCaptureSession 오디오가 작동하지 않습니다.
답변
이 솔루션은 an answer to a completely different question으로 나타났습니다.
문제는 AVCaptureMovieFileOutput에서 movieFragmentInterval
속성입니다.
이 속성의 문서는이 조각이 무엇인지 설명 :
퀵타임 동영상이 미디어 샘플 구성 및 샘플 테이블 파일에서 자신의 위치를 식별한다. 샘플이없는 동영상 파일 테이블을 읽을 수 없습니다.
처리 된 파일에서 샘플 표는 일반적으로 파일의 시작 부분에 나타납니다. 파일 끝에 으로 나타날 수도 있는데,이 경우 헤더에 끝에 샘플 테이블에 대한 포인터가 들어 있습니다. 새 동영상 파일을 기록 할 때 파일 크기가 아직 알려지지 않았으므로 샘플 테이블에 쓸 수 없습니다. 대신 녹음이 완료되면 표를 작성해야합니다. 다른 조치가 수행되지 않으면 녹음이 이 성공적으로 완료되지 않은 경우 (예 : 충돌이 발생한 경우) 파일을 사용할 수 없음을 의미합니다 (샘플 표가 없으므로). 주기적으로 "동영상 조각"을 동영상 파일에 삽입하면 샘플 표는 증분으로 빌드 할 수 있습니다. 즉, 파일에 이 완전히 기록되지 않으면 영화 파일을 계속 사용할 수 있습니다 (마지막 조각이 인 지점까지).
또한 말한다 :
기본값은 10 초입니다. kCMTimeInvalid로 설정하여 동영상 조각 쓰기를 비활성화합니다 (일반적으로 권장하지 않음).
그래서 어떤 이유로 조각이 작성 될 때마다 내 녹음이 엉망이되어 버립니다. 방금 조각 쓰기를 사용하지 않도록 movieFileOutput.movieFragmentInterval = kCMTimeInvalid;
(movieFileOutput
이 AVCaptureSession에 추가 한 AVCaptureMovieFileOutput) 줄을 추가 했으므로 이제 오디오가 작동합니다.
업데이트 videoFileOutput.movieFragmentInterval = kCMTimeInvalid
이 문제가 해결되었습니다.
그러나 실수로 startRecordingToOutputFileURL
을 호출 한 후 movieFragmentInterval
을 설정했습니다. 괴로운 시간이 지난 후에 나는 내 실수를 깨달았다. 나와 같은 초보자를 위해서 이 명백한 순서을주의하십시오.
videoFileOutput.movieFragmentInterval = kCMTimeInvalid
videoFileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: recordingDelegate)
또한이 문제가 발생했습니다. 기본적으로 영화 조각 쓰기는 작동하지 않지만 문제를 실제로 설명하지는 않습니다. 대개 mp4
과 같이이 기능을 지원하지 않는 파일 확장명을 사용하여 출력 파일에 녹음하는 경우 일 수 있습니다. 확장자가 mov
인 출력 파일을 전달하는 경우 동영상 조각 쓰기를 사용하는 데 문제가 없어야하며 출력 파일에 오디오가 있어야합니다.