AVFoundation 네임스페이스
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다.
클래스
구조체
AVAudio3DAngularOrientation |
수신기의 각 방향을 3D 공간에 저장합니다. |
AVAudio3DVectorOrientation |
3D 공간에서 수신기의 위치를 직교 '위쪽' 및 '앞으로' 벡터로 정의합니다. |
AVAudioConverterPrimeInfo |
오디오 변환 초기화 정보입니다. |
AVBeatRange |
특정 AVMusicTrack내에서 범위를 정의합니다. |
AVCaptureWhiteBalanceChromaticityValues |
CIE 1931 xy 색도 값을 보유하는 구조체입니다. |
AVCaptureWhiteBalanceGains |
흰색 균형에 대한 RGB 게인 값을 포함합니다. |
AVCaptureWhiteBalanceTemperatureAndTintValues |
화이트 밸런싱에 사용되는 값 에는 상관 관계가 있는 온도 및 색조가 포함됩니다. |
AVEdgeWidths |
에서 사용하는 에지 너비를 캡슐화하는 클래스입니다 AVVideoCompositionRenderContext. |
AVPixelAspectRatio |
픽셀의 가로 세로 비율을 캡슐화합니다. PixelAspectRatio를 사용합니다. |
AVSampleCursorChunkInfo |
미디어 샘플 청크 메타데이터를 포함합니다. |
AVSampleCursorDependencyInfo |
시퀀스의 샘플 및 기타 샘플에 대한 미디어 샘플 상호 종속성 데이터를 포함합니다. |
AVSampleCursorStorageRange |
미디어 샘플 또는 청크의 위치와 크기를 포함합니다. |
AVSampleCursorSyncInfo |
미디어 샘플 동기화 특성을 포함합니다. |
인터페이스
열거형
AVAssetDownloadedAssetEvictionPriority |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVAssetExportSessionPreset |
자산 내보내기 세션에 대한 사전 설정을 열거합니다. |
AVAssetExportSessionStatus |
내보내기 작업의 상태 플래그입니다. |
AVAssetImageGeneratorResult |
값이 이미지 생성 결과를 나타내는 열거형입니다. |
AVAssetReaderStatus |
값이 의 상태 지정하는 AVAssetReader열거형입니다. |
AVAssetReferenceRestrictions |
값이 에 관련된 제한을 정의하는 열거형입니다 AVAsset. |
AVAssetWriterInputMediaDataLocation |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVAssetWriterStatus |
값이 개체의 상태 나타내는 열거형입니다AVAssetWriter. |
AVAudio3DMixingRenderingAlgorithm |
유효한 3D 오디오 렌더링 알고리즘을 열거합니다. |
AVAudioBitRateStrategy |
값이 오디오 비트 전송률의 형식을 지정하는 열거형입니다. BitRateStrategy에 사용됩니다. |
AVAudioCommonFormat |
오디오 데이터의 형식을 열거합니다(참조 CommonFormat). |
AVAudioConverterInputStatus |
입력 스트림의 상태를 열거합니다. |
AVAudioConverterOutputStatus |
오디오 변환 중에 출력 스트림의 상태를 열거합니다. |
AVAudioConverterPrimeMethod |
에 대한 AVAudioConverterPrimeInfo초기화 전략을 열거합니다. |
AVAudioDataSourceLocation |
AV 디바이스에서 데이터 원본의 물리적 위치를 열거합니다. |
AVAudioDataSourceOrientation |
AV 디바이스에서 데이터 원본의 물리적 방향을 열거합니다. |
AVAudioDataSourcePolarPattern |
마이크 직접성 값을 열거합니다. |
AVAudioEngineManualRenderingError |
수동 렌더링 오류에 대한 오류 코드입니다. |
AVAudioEngineManualRenderingMode |
수동 렌더링이 오프라인으로 수행되는지 아니면 실시간 제약 조건에서 수행되는지를 열거합니다. |
AVAudioEngineManualRenderingStatus |
수동 렌더링의 상태 열거합니다. |
AVAudioEnvironmentDistanceAttenuationModel |
에서 사용하는 AVAudioEnvironmentDistanceAttenuationParameters감쇠 모델을 열거합니다. |
AVAudioPlayerNodeBufferOptions |
에 대한 호출에서 값이 유효한 옵션인 열거형 플래그 지정 ScheduleBufferAsync(AVAudioPcmBuffer, AVAudioTime, AVAudioPlayerNodeBufferOptions, AVAudioPlayerNodeCompletionCallbackType) |
AVAudioPlayerNodeCompletionCallbackType |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVAudioQuality |
오디오 인코더에서 사용하는 샘플 속도 변환 품질을 나타냅니다. |
AVAudioSessionActivationOptions |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVAudioSessionCategory |
AVAudioSession에서 지원하는 다양한 오디오 범주를 정의하는 열거형입니다. |
AVAudioSessionCategoryOptions |
값이 선택적 오디오 동작을 지정하는 열거형입니다. |
AVAudioSessionErrorCode |
값이 에 관련된 다양한 오류를 지정하는 AVAudioSession열거형입니다. |
AVAudioSessionFlags |
AVAudioSession.SetActive에 전달된 플래그 |
AVAudioSessionInterruptionFlags |
값이 에서 플래그로 사용될 수 있는 EndInterruption(IAVAudioSessionDelegate, AVAudioSessionInterruptionFlags)열거형입니다. |
AVAudioSessionInterruptionOptions |
값이 선택적 오디오 동작을 지정하는 열거형입니다. |
AVAudioSessionInterruptionType |
값이 오디오 중단의 시작과 끝을 지정하는 열거형입니다. |
AVAudioSessionIOType |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVAudioSessionPortOverride |
오디오 세션이 기본 제공 스피커를 통해 오디오 포트 및 출력을 재정의해야 하는지 여부를 정의하는 값의 열거형입니다. |
AVAudioSessionPromptStyle |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVAudioSessionRecordPermission |
에 대한 AVAudioSession유효한 권한을 열거합니다. |
AVAudioSessionRouteChangeReason |
값이 오디오 경로가 변경된 이유를 지정하는 열거형입니다. |
AVAudioSessionRouteSharingPolicy |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVAudioSessionSetActiveOptions |
오디오 세션이 비활성화된 후 이전에 중단된 오디오 세션이 다시 활성화되어야 하는지 여부를 정의하는 값의 열거형입니다. |
AVAudioSessionSilenceSecondaryAudioHintType |
에 유효한 값을 열거합니다 Hint. |
AVAudioUnitDistortionPreset |
에 전달할 수 있는 유효한 값을 열거합니다 LoadFactoryPreset(AVAudioUnitDistortionPreset). |
AVAudioUnitEQFilterType |
필터 형식. 속성과 FilterType 함께 사용됩니다. |
AVAudioUnitReverbPreset |
반향 사전 설정을 설명하는 상수를 열거합니다. |
AVAuthorizationMediaType |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVAuthorizationStatus |
값이 사용자가 사용 권한을 부여했는지 여부를 AVCaptureDevice 지정하는 열거형입니다. GetAuthorizationStatus(NSString)를 사용합니다. |
AVCaptureAutoFocusRangeRestriction |
값이 자동 포커스에 대한 힌트를 지정하는 열거형입니다. AutoFocusRangeRestriction를 사용합니다. |
AVCaptureAutoFocusSystem |
디바이스의 자동 초점 시스템과 관련된 상수를 열거합니다. |
AVCaptureColorSpace |
비디오 캡처 색 공간을 열거합니다. |
AVCaptureDevicePosition |
값이 의 위치를 지정하는 열거형입니다 AVCaptureDevice. |
AVCaptureDeviceTransportControlsPlaybackMode |
값이 가 재생 중인지 여부를 지정하는 AVCaptureDevice 열거형입니다. |
AVCaptureDeviceType |
시청각 데이터를 캡처할 수 있는 디바이스 유형을 열거합니다. |
AVCaptureExposureMode |
캡처하는 동안 다양한 노출 모드에 대한 옵션을 지정하는 값의 열거형입니다. |
AVCaptureFlashMode |
플래시 모드. |
AVCaptureFocusMode |
자동 포커스 상태입니다. |
AVCaptureLensStabilizationStatus |
물리적 이미지 손떨림 보정 하드웨어에 대한 상태를 열거합니다. |
AVCaptureOutputDataDroppedReason |
캡처 데이터가 삭제된 이유를 열거합니다. |
AVCaptureSessionInterruptionReason |
캡처 세션이 중단될 수 있는 방법을 열거합니다. |
AVCaptureSystemPressureFactors |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVCaptureSystemPressureLevel |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVCaptureTorchMode |
캡처 디바이스 토치 모드입니다. |
AVCaptureVideoOrientation |
비디오 캡처 방향. |
AVCaptureVideoPreviewLayer.InitMode |
캡처 세션 연결의 존재 여부 또는 부재를 지정하는 값을 열거합니다. |
AVCaptureVideoStabilizationMode |
디바이스 형식에서 지원하는 비디오 손떨림 보정 유형을 열거합니다. |
AVCaptureWhiteBalanceMode |
화이트 밸런스 모드를 캡처합니다. |
AVContentAuthorizationStatus |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVContentKeyRequestRetryReason |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVContentKeyRequestStatus |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVContentKeySystem |
콘텐츠 키에 대한 배달 방법을 열거합니다. |
AVDepthDataAccuracy |
깊이 데이터 정확도 형식을 열거합니다. |
AVDepthDataQuality |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVError |
값이 다양한 시청각 오류를 정의하는 열거형입니다. |
AVFileTypes |
AVFoundation 파일 형식에 대한 범용 형식 정보를 열거합니다. |
AVKeyValueStatus |
값이 지정된 속성의 로드 상태 지정하는 열거형입니다. |
AVLayerVideoGravity |
값이 레이어 내에 표시되도록 비디오의 크기를 조정하는 방법을 지정하는 열거형입니다 Bounds. |
AVMediaCharacteristics |
미디어 특성을 열거합니다. |
AVMediaTypes |
미디어 형식을 열거합니다. |
AVMetadataFormat |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVMetadataObjectType |
바코드 설명을 열거합니다. |
AVMovieWritingOptions |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVMusicSequenceLoadOptions |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVMusicTrackLoopCount |
루프 수 제한을 열거합니다. |
AVPlayerActionAtItemEnd |
재생을 완료할 때 플레이어의 동작을 지정하는 값의 열거형입니다. |
AVPlayerHdrMode |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVPlayerItemStatus |
값이 의 상태 지정하는 열거형입니다AVPlayerItem. |
AVPlayerLooperStatus |
개체의 AVPlayerLooper 상태를 열거합니다. |
AVPlayerStatus |
값이 의 상태 나타내는 열거형입니다AVPlayer. |
AVPlayerTimeControlStatus |
허용 가능한 시간 TimeControlStatus 값을 열거합니다. |
AVQueuedSampleBufferRenderingStatus |
AVFoundation.AVSampleBuffer.Status 필드의 가능한 값을 열거합니다. |
AVSampleBufferRequestDirection |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVSampleBufferRequestMode |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVSampleRateConverterAlgorithm |
값이 유효한 속도 변환 알고리즘을 지정하는 열거형입니다. P:AVFoundation.AVAudioSettings.SampleRateConverterAlgorithm과 함께 사용됩니다. |
AVSpeechBoundary |
값이 가 즉시 일시 중지 또는 중지할지 또는 전체 단어를 완료해야 하는지를 AVSpeechSynthesizer 지정하는 열거형입니다. |
AVSpeechSynthesisVoiceQuality |
음성 합성의 품질을 열거합니다. |
AVVideoApertureMode |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVVideoCodec |
비디오 코드가 H264인지 JPEG인지를 지정하는 열거형 |
AVVideoCodecType |
알려진 비디오 코덱에 대한 상수입니다. |
AVVideoFieldMode |
값이 인터레이스 필드를 처리하는 방법을 지정하는 열거형입니다. |
AVVideoH264EntropyMode |
값이 에 대한 값을 지정하는 열거형입니다 EntropyEncoding. |
AVVideoProfileLevelH264 |
비디오 프로필 수준. |
AVVideoScalingMode |
지정된 영역에 맞게 비디오 크기를 조정하는 방법을 지정합니다. |
대리자
AVAssetImageGeneratorCompletionHandler |
에 대한 처리기를 정의하는 대리자입니다 GenerateCGImagesAsynchronously(NSValue[], AVAssetImageGeneratorCompletionHandler). |
AVAudioConverterInputHandler |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVAudioEngineManualRenderingBlock |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVAudioIONodeInputBlock |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVAudioNodeTapBlock |
출력의 복사본을 받는 대리자 AVAudioNode |
AVAudioUnitComponentFilter |
AVFoundation 네임스페이스는 오디오 녹음 및 재생을 위한 고급 클래스를 제공합니다. |
AVCaptureCompletionHandler |
의 CaptureStillImageAsynchronously(AVCaptureConnection, AVCaptureCompletionHandler)완료 처리기에 대한 대리자입니다. |
AVCompletion |
및 의 다양한 메서드 AVPlayer 에 대한 완성 처리기를 정의하는 대리자입니다. AVPlayerItem |
AVPermissionGranted | |
AVRequestAccessStatus |
의 대리자입니다 RequestAccessForMediaTypeAsync(NSString). |
설명
이 네임스페이스에는 오디오 및 비디오에 대한 높은 수준의 녹음 및 재생 기능이 포함되어 있습니다.
이 라이브러리는 CoreMedia, CoreAudio 및 CoreVideo 위에 있지만 UIKit에 대한 사용자 인터페이스 요소를 제공하지 않습니다. 오디오 및 비디오를 녹음 및 재생하기 위한 도구 키트입니다.
AV Foundation은 백그라운드 처리를 광범위하게 사용합니다. 애플리케이션 개발자는 사용자 인터페이스를 업데이트할 때 스레드 안전성 및 사용 InvokeOnMainThread 또는 기타 기술을 보장하기 위해 주의해야 합니다.
AVFoundation은 몇 가지 일반적인 작업에 필요하지 않습니다.
작업 | 방법 |
---|---|
비디오 표시 | Media Player 또는 MPMoviePlayerControllerMPMoviePlayerViewController를 사용합니다. |
사진 또는 비디오 캡처 | UIKit 사용 UIImagePickerController |
오디오 파일 재생 | AV Foundation의 AVAudioPlayer를 사용합니다. |
오디오 파일 캡처 | 아래 "오디오 파일 캡처"에서 설명한 대로 AV Foundation의 AVAudioRecorder를 사용합니다. |
복잡한 비디오 디스플레이 또는 오디오 재생 | 아래 "사용자 지정 재생"에 설명된 대로 AV Foundation을 사용합니다. |
사용자 지정 미디어 캡처 | 아래 "사용자 지정 미디어 캡처"에서 설명한 대로 AV Foundation을 사용합니다. |
미디어 파일 쓰기, 읽기 및 코드 변환 | 아래 "미디어 파일 쓰기, 읽기 및 코드 변환"에서 설명한 대로 AV Foundation을 사용합니다. |
미디어 편집 | UIKit의 T:UIKit.UIVideoKitController 또는 AV Foundation 구성 요소를 사용합니다. |
바코드 인식 및 얼굴 감지 | 아래 "라이브 인식"에 설명된 대로 AV Foundation을 사용합니다. |
음성 합성 | 아래 "음성 합성"에서 설명한 대로 AV Foundation을 사용합니다. |
는 AVAsset 하나 이상의 미디어 자산을 나타냅니다. 이러한 속성은 해당 Tracks 속성에 보관됩니다. AVAsset또한 s에는 메타데이터, 추적 그룹화 및 미디어에 대한 기본 설정이 포함됩니다.
동영상과 같은 미디어 자산이 크므로 를 인스턴스화 AVAsset 해도 파일이 자동으로 로드되지 않습니다. 속성은 쿼리되거나 또는 LoadValuesAsynchronously에 대한 명시적 호출을 LoadValuesTaskAsync 통해 로드됩니다.
오디오 파일 캡처
애플리케이션 개발자는 먼저 앱과 운영 체제 간에 소리를 중재하는 정적 싱글톤 오디오 세션 개체와 상호 작용해야 합니다. 및 는 AVAudioSession 모두 AudioSession 동일한 기본 싱글톤을 참조합니다. 의 AudioSession 대부분의 속성은 iOS 7 이상에서 더 이상 사용되지 않으며 애플리케이션 개발자는 의 AVAudioSession속성을 선호해야 합니다.
작업 | AVAudioSession 사용 | AudioSession 사용 |
---|---|---|
초기화 | SharedInstance (명시적 초기화는 필요하지 않음) | |
범주 설정 | M:AVFoundation.AVAudioSession.SetCategory(string, out NSError) | Category |
활성 설정 |
다음 코드는 오디오 녹음을 준비하는 데 필요한 단계를 보여줍니다.
var session = AVAudioSession.SharedInstance();
NSError error = null;
session.SetCategory(AVAudioSession.CategoryRecord, out error);
if(error != null){
Console.WriteLine(error);
return;
}
session.SetActive(true, out error);
if(error != null){
Console.WriteLine(error);
return;
}
//Declare string for application temp path and tack on the file extension
string fileName = string.Format("Myfile{0}.aac", DateTime.Now.ToString("yyyyMMddHHmmss"));
string tempRecording = NSBundle.MainBundle.BundlePath + "/../tmp/" + fileName;
Console.WriteLine(tempRecording);
this.audioFilePath = NSUrl.FromFilename(tempRecording);
var audioSettings = new AudioSettings() {
SampleRate = 44100.0f,
Format = MonoTouch.AudioToolbox.AudioFormatType.MPEG4AAC,
NumberChannels = 1,
AudioQuality = AVAudioQuality.High
};
//Set recorder parameters
NSError error;
recorder = AVAudioRecorder.Create(this.audioFilePath, audioSettings, out error);
if((recorder == null) || (error != null))
{
Console.WriteLine(error);
return false;
}
//Set Recorder to Prepare To Record
if(!recorder.PrepareToRecord())
{
recorder.Dispose();
recorder = null;
return false;
}
recorder.FinishedRecording += delegate (object sender, AVStatusEventArgs e) {
recorder.Dispose();
recorder = null;
Console.WriteLine("Done Recording (status: {0})", e.Status);
};
recorder.Record();
사용자 지정 재생
T:AVFoundation.Player 개체는 개체를 사용하여 AVPlayerItem 미디어를 재생합니다. 는 AVPlayerItem 의 프레젠테이션 상태를 캡슐화합니다 AVAsset.
사용자 지정 미디어 캡처
많은 캡처 시나리오는 사용하기 UIImagePickerController 쉬운 클래스와 AVAudioRecorder 클래스에 만족할 수 있습니다. 더 복잡한 시나리오는 AV Foundation AVCaptureSession 및 관련 클래스를 사용할 수 있습니다.
AVCaptureSession 일반적으로 에는 하나 이상의 s와 하나 이상의 AVCaptureInputAVCaptureOutput가 있습니다. 각각 AVCaptureInput 에는 AVCaptureDevice 특정 미디어 유형(오디오 또는 비디오)에 대한 가 있습니다. 각 T:AVFoundation.AVCaptureOuput 에는 렌더링, 파일에 쓰기, 분석 등을 수행할 수 있는 들어오는 데이터로 반복적으로 호출되는 "버퍼 대리자"가 있습니다.
다음 다이어그램 및 소스 코드는 의 초기화 시퀀스를 보여줍니다.
session = new AVCaptureSession () {
SessionPreset = AVCaptureSession.PresetMedium
};
// create a device input and attach it to the session
var captureDevice = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video);
if (captureDevice == null){
Console.WriteLine ("No captureDevice - this won't work on the simulator, try a physical device");
return false;
}
// If you want to cap the frame rate at a given speed, in this sample: 15 frames per second
NSError error = null;
captureDevice.LockForConfiguration(out error);
if(error != null){
Console.WriteLine(error);
captureDevice.UnlockForConfiguration();
return false;
}
captureDevice.ActiveVideoMinFrameDuration = new CMTime(1, 15);
captureDevice.UnlockForConfiguration();
var input = AVCaptureDeviceInput.FromDevice (captureDevice);
if (input == null){
Console.WriteLine ("No input - this won't work on the simulator, try a physical device");
return false;
}
session.AddInput (input);
// create a VideoDataOutput and add it to the sesion
var output = new AVCaptureVideoDataOutput () {
VideoSettings = new AVVideoSettings (CVPixelFormatType.CV32BGRA),
};
// configure the output
queue = new MonoTouch.CoreFoundation.DispatchQueue ("myQueue");
outputRecorder = new OutputRecorder ();
output.SetSampleBufferDelegate (outputRecorder, queue);
session.AddOutput (output);
session.StartRunning ();
는 outputRecorder
의 AVCaptureVideoDataOutputSampleBufferDelegate사용자 지정 하위 클래스입니다. 이 경우 들어오는 데이터는 디스플레이로 전송되기 전에 필터가 CIColorInvert 적용되는 로 CIImage변환됩니다.
public class OutputRecorder : AVCaptureVideoDataOutputSampleBufferDelegate {
readonly CIColorInvert filter;
public OutputRecorder()
{
filter = new CIColorInvert();
}
public override void DidOutputSampleBuffer (AVCaptureOutput captureOutput, CMSampleBuffer sampleBuffer, AVCaptureConnection connection)
{
try {
var image = ImageFromSampleBuffer (sampleBuffer);
filter.Image = image;
// Do something with the image, we just stuff it in our main view.
AppDelegate.ImageView.BeginInvokeOnMainThread (delegate {
AppDelegate.ImageView.Image = UIImage.FromImage(filter.OutputImage);
});
//
// Although this looks innocent "Oh, he is just optimizing this case away"
// this is incredibly important to call on this callback, because the AVFoundation
// has a fixed number of buffers and if it runs out of free buffers, it will stop
// delivering frames.
//
sampleBuffer.Dispose ();
} catch (Exception e){
Console.WriteLine (e);
}
}
CIImage ImageFromSampleBuffer (CMSampleBuffer sampleBuffer)
{
// Get the CoreVideo image
using (var pixelBuffer = sampleBuffer.GetImageBuffer () as CVPixelBuffer){
// Lock the base address
pixelBuffer.Lock (0);
// Get the number of bytes per row for the pixel buffer
var baseAddress = pixelBuffer.BaseAddress;
int bytesPerRow = pixelBuffer.BytesPerRow;
int width = pixelBuffer.Width;
int height = pixelBuffer.Height;
var flags = CGBitmapFlags.PremultipliedFirst | CGBitmapFlags.ByteOrder32Little;
// Create a CGImage on the RGB colorspace from the configured parameter above
using (var cs = CGColorSpace.CreateDeviceRGB ())
using (var context = new CGBitmapContext (baseAddress,width, height, 8, bytesPerRow, cs, (CGImageAlphaInfo) flags))
using (var cgImage = context.ToImage ()){
pixelBuffer.Unlock (0);
return cgImage;
}
}
}
}
비디오는 를 사용하여 파일에 AVCaptureMovieFileOutput직접 캡처할 수 있습니다. 그러나 이 클래스에는 표시할 수 있는 데이터가 없으며 와 AVCaptureVideoDataOutput동시에 사용할 수 없습니다. 대신 애플리케이션 개발자는 다음 예제와 같이 와 함께 AVCaptureVideoPreviewLayer사용할 수 있습니다.
var session = new AVCaptureSession();
var camera = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video);
var mic = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Audio);
if(camera == null || mic == null){
throw new Exception("Can't find devices");
}
if(session.CanAddInput(camera)){
session.AddInput(camera);
}
if(session.CanAddInput(mic)){
session.AddInput(mic);
}
var layer = new AVCaptureVideoPreviewLayer(session);
layer.LayerVideoGravity = AVLayerVideoGravity.ResizeAspectFill;
layer.VideoGravity = AVCaptureVideoPreviewLayer.GravityResizeAspectFill;
var cameraView = new UIView();
cameraView.Layer.AddSublayer(layer);
var filePath = System.IO.Path.Combine( Path.GetTempPath(), "temporary.mov");
var fileUrl = NSUrl.FromFilename( filePath );
var movieFileOutput = new AVCaptureMovieFileOutput();
var recordingDelegate = new MyRecordingDelegate();
session.AddOutput(movieFileOutput);
movieFileOutput.StartRecordingToOutputFile( fileUrl, recordingDelegate);
애플리케이션 개발자는 T:AVFoundation.AVCaptureMovieFileOutput.StopRecording 함수가 비동기적이라는 점에 유의해야 합니다. 개발자는 파일을 조작하기 전에 대리자 메서드까지 FinishedRecording 기다려야 합니다(instance 경우 또는 WriteVideoToSavedPhotosAlbumAsync을 사용하여 사진 앨범 SaveToPhotosAlbum 에 저장하기 전에).
미디어 파일 쓰기, 읽기 및 코드 변환
다음은 iOS 7에 지원되는 오디오 형식의 공식 목록입니다.
- AAC
- Apple 무손실(ALAC)
- A-law
- IMA/ADPCM(IMA4)
- 선형 PCM
- μ-law
- DVI/Intel IMA ADPCM
- Microsoft GSM 6.10
- AES3-2003
다음 비디오 형식은 다음과 같습니다.
- H.264 비디오, 최대 1.5Mbps, 640x480픽셀, 초당 30프레임, AAC-LC 오디오가 최대 160Kbps, 48kHz, 스테레오 오디오(.m4v, .mp4 및 .mov 파일 형식의 H.264 기준 프로필의 Low-Complexity 버전)
- H.264 비디오, 최대 768Kbps, 320x240픽셀, 초당 30프레임, AAC-LC 오디오가 최대 160Kbps, 48kHz, 스테레오 오디오(.m4v, .mp4 및 .mov 파일 형식의 기준 프로필)
- MPEG-4 비디오, 최대 2.5Mbps, 640x480픽셀, 초당 30프레임, AAC-LC 오디오가 최대 160Kbps, 48kHz, 스테레오 오디오.m4v, .mp4 및 .mov 파일 형식의 단순 프로필
이 목록은 불완전: 아이폰 5S, 예를 들어, 기본적으로 캡처 1280 x 720.
미디어 파일을 읽는 작업은 로 수행됩니다 AVAssetReader. 많은 AV Foundation 클래스와 마찬가지로 비동기 방식으로 데이터를 제공합니다. 합니다 Outputs 속성에 들어 AVAssetReaderOutput 개체입니다. 이러한 개체의 메서드는 CopyNextSampleBuffer 기본 Asset를 처리할 때 AVAssetReader 주기적으로 호출됩니다.
미디어 파일 작성은 로 수행할 AVAssetWriter수 있지만 미디어 캡처 세션에서는 , 또는 AVCaptureMovieFileOutput를 사용하여 UIImagePickerController더 자주 수행AVAudioRecorder됩니다. 의 장점 AVAssetWriter 은 하드웨어 인코딩을 사용한다는 것입니다.
라이브 인식
iOS는 비디오 디바이스에서 캡처되는 바코드와 얼굴을 인식할 수 있습니다.
다음 예제에서는 QR 및 EAN13 바코드를 인식하는 방법을 보여 줍니다. 가 AVCaptureSession 구성되고 T:AFoundation.AVCaptureMetadataOutput 이 추가됩니다. MyMetadataOutputDelegate
의 하위 클래스 AVCaptureMetadataOutputObjectsDelegate 는 P:AVFoundation.AVCaptureMetadataObject.Delegate 속성에 할당됩니다.
MetadataObjectTypes 이 에 추가된 후에 AVCaptureMetadataOutput 배열을 설정해야 합니다.
이 예제에서는 바코드가 인식될 때 이벤트를 발생시키는 의 AVCaptureMetadataOutputObjectsDelegate 간단한 하위 클래스를 보여 줍니다.
session = new AVCaptureSession();
var camera = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video);
var input = AVCaptureDeviceInput.FromDevice(camera);
session.AddInput(input);
//Add the metadata output channel
metadataOutput = new AVCaptureMetadataOutput();
var metadataDelegate = new MyMetadataOutputDelegate();
metadataOutput.SetDelegate(metadataDelegate, DispatchQueue.MainQueue);
session.AddOutput(metadataOutput);
//Confusing! *After* adding to session, tell output what to recognize...
metadataOutput.MetadataObjectTypes = new NSString[] {
AVMetadataObject.TypeQRCode,
AVMetadataObject.TypeEAN13Code
};
//...etc...
public class MyMetadataOutputDelegate : AVCaptureMetadataOutputObjectsDelegate
{
public override void DidOutputMetadataObjects(AVCaptureMetadataOutput captureOutput, AVMetadataObject[] metadataObjects, AVCaptureConnection connection)
{
foreach(var m in metadataObjects)
{
if(m is AVMetadataMachineReadableCodeObject)
{
MetadataFound(this, m as AVMetadataMachineReadableCodeObject);
}
}
}
public event EventHandler<AVMetadataMachineReadableCodeObject> MetadataFound = delegate {};
}
음성 합성
iOS 7 이상에서 AV Foundation은 언어 및 로캘에 대해 지역화된 음성을 사용하여 음성 합성을 지원합니다.
가장 간단한 형식으로 텍스트 음성 변환은 다음 두 가지 클래스로 수행할 수 있습니다.
var ss = new AVSpeechSynthesizer();
var su = new AVSpeechUtterance("Microphone check. One, two, one two.") {
Rate = 0.25f
};
ss.SpeakUtterance(su);
는 AVSpeechSynthesizer 의 내부 큐를 AVSpeechUtterance유지 관리합니다. 애플리케이션 개발자는 큐에 액세스할 수 없지만 및 를 사용하여 신시사이저를 일시 중지하거나 중지 PauseSpeakingStopSpeaking할 수 있습니다. 또는 WillSpeakRangeOfSpeechString 와 같은 DidStartSpeechUtterance 이벤트는 애플리케이션 개발자가 이전에 큐에 추가한 시퀀스를 수정할 수 있는 기회입니다.