의 시작 가입일 :아이폰 OS 올바른 방법 AVFoundation이 캡처 파이프 라인을 사용하여 녹화 중 시간 라벨을 업데이트하는 방법 녹화
Mic -> AVCaptureDeviceInput -> AVCaptureSession -> AVCaptureAudioDataOutput
AVCaptureAudioDataOutput 출력 파일에 sampleBuffers을 쓰고 위임 및 AVAssetWritter 있습니다. 이 솔루션에서는 녹음 시간을 업데이트하고 싶습니다. 사용자가 녹음/일시 정지/다시 시작/중지 버튼을 누를 때 시간을 기록 할 수 있지만 처음에는 00:00:00 시간으로 UILabel을 업데이트하는 방법은 Apple의 공식적인 방법입니다. 나는 NSTimer를 사용할 수 있습니다 알고 있지만 내가 AVAudioRecorder 일하던 나는 재산했다 : 위의 속성이 일시 정지 작업을했다
var currentTime: TimeInterval
// The time, in seconds, since the beginning of the recording.
/뿐만 아니라 버튼을 계속합니다.
이 새로운 파이프 라인에서 나는이 속성을 가지지 않고 무언가를 놓치고 어디서나 찾을 수 없는지 궁금합니다. 또한 AVCaptureSession에는 masterClock이라는 CMClock 속성이 있지만 녹음 시작부터 시간을 계산하는 방법을 모르겠습니다.
CMClockGetHostTimeClock()
CMSyncConvertTime
어떻게 sampleBuffer에 따라 AVCaptureAudioDataOutputSampleBufferDelegate 방법의 녹화 시작부터 초 수를 구하는 :
내가 좋아하는 시계 및 방법이 모든 생각을하지?
UPDATE 나는 CMTimebase라는 클래스를 발견하고 나는 이것이 내가 찾던 exacly 생각합니다. 현재 나는 그것을 사용하는 방법을 모르지만 놀이터에서 몇 가지 실험을 한 후에 발견했습니다.
import CoreMedia
let masterClock = CMClockGetHostTimeClock() // This masterclock should be from captureSession
var timebase: CMTimebase? = nil
CMTimebaseCreateWithMasterClock(kCFAllocatorDefault, masterClock, &timebase)
print(CMTimeGetSeconds(CMTimebaseGetTime(timebase!)))
CMTimebaseSetRate(timebase!, 1.0) // Start/Resume recording
sleep(1)
print(CMTimeGetSeconds(CMTimebaseGetTime(timebase!)))
sleep(1)
CMTimebaseSetRate(timebase!, 0.0) // Pause Recording
print(CMTimeGetSeconds(CMTimebaseGetTime(timebase!)))
sleep(1)
print(CMTimeGetSeconds(CMTimebaseGetTime(timebase!)))
이 개체는 정말 유용합니다. 속도를 1.0으로 설정하면 masterClock과 동기화되어 시간 측정이 시작됩니다. 속도를 0.0으로 설정하면 시간 측정이 중지됩니다. 나는이 객체에 Timer를 첨부 할 수 있다는 것을 알았다. 불행히도 애플 사이트의 API 문서에는이 핵심 미디어 자료에 대한 훌륭한 자습서가 없습니다. CoreMedia Framework와 관련된 주제에 대한 WWDC의 훌륭한 자습서/비디오가 있다면 누구도 알고 있습니까?
나는 전에 CMTimebase를 사용하지 않았지만 원하는 것을하기 위해 사용할 수 있어야합니다. 녹화를 시작할 때 AVCaptureSession 시계에 연결하고 시간을 업데이트하려면 CMTimebase를 읽으십시오. 당신은 여전히 타이머 또는 트리거를 필요로 할 것이고 "너무 자주"버퍼가 디스플레이 업데이트를 얻는다. 불행히도 나는 어떤 문서에 익숙하지 않고 빠른 구글도 어떤 것도 보여주지 않는다. 행운을 빕니다! –