AVFoundation 名前空間
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
AVFoundation 名前空間には、オーディオの記録と再生に関する高レベルのクラスが用意されています。
クラス
構造体
AVAudio3DAngularOrientation |
リスナーの角度方向を 3D 空間に保持します。 |
AVAudio3DVectorOrientation |
3D 空間でのリスナーの位置を、直交する 'Up' ベクトルと 'Forward' ベクトルとして定義します。 |
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 |
P: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 |
注釈
この名前空間には、オーディオとビデオの高レベルの記録と再生機能が含まれています。
このライブラリは CoreMedia、CoreAudio、CoreVideo の上に配置されますが、UIKit のユーザー インターフェイス要素は提供されません。 これは、オーディオとビデオを記録して再生するためのツールキットです。
AV Foundation では、バックグラウンド処理が広範囲に使用されます。 アプリケーション開発者は、ユーザー インターフェイスを更新するときに、スレッドの安全性を確保し、またはその他の手法を使用 InvokeOnMainThread するように注意する必要があります。
AVFoundation は、一部の一般的なタスクでは必要ありません。
タスク | 手法 |
---|---|
ビデオを表示する | Media Player MPMoviePlayerController または を使用します MPMoviePlayerViewController。 |
写真やビデオをキャプチャする | UIKit のを使用する UIImagePickerController |
オーディオ ファイルを再生する | AV Foundation の AVAudioPlayerを使用します。 |
オーディオ ファイルをキャプチャする | 「オーディオ ファイルの AVAudioRecorderキャプチャ」で後述するように、AV Foundation の を使用します。 |
複雑なビデオディスプレイまたはオーディオ再生 | 「カスタム再生」で後述するように、AV Foundation を使用します。 |
カスタム メディア キャプチャ | 「カスタム メディア キャプチャ」で後述するように、AV Foundation を使用します。 |
メディア ファイルの書き込み、読み取り、およびコード変換 | 「メディア ファイルの書き込み、読み取り、コード変換」で後述するように、AV Foundation を使用します。 |
メディアの編集 | UIKit の T:UIKit.UIVideoKitController または AV Foundation の構成要素を使用します。 |
バーコード認識と顔検出 | 「ライブ認識」で後述するように、AV Foundation を使用します。 |
音声合成 | 「音声合成」で後述するように、AV Foundation を使用します。 |
は AVAsset 、1 つ以上のメディア資産を表します。 これらは、その Tracks プロパティに保持されます。 さらに、 には、 AVAssetメタデータ、追跡グループ化、メディアに関する基本設定が含まれます。
ムービーなどのメディア資産は大きいため、 を AVAsset インスタンス化すると、ファイルは自動的に読み込まれません。 プロパティは、 または への明示的な呼び出しを介してクエリを実行すると読みLoadValuesTaskAsyncLoadValuesAsynchronously込まれます。
オーディオ ファイルのキャプチャ
アプリケーション開発者は、まず、アプリとオペレーティング システムの間でサウンドを仲介する静的シングルトン オーディオ セッション オブジェクトと対話する必要があります。 と の両方 AudioSession で AVAudioSession 、この同じ基になるシングルトンを参照します。 の 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 には 1 つ以上 AVCaptureInputの と 1 つ以上 AVCaptureOutputの が含められます。 それぞれに 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 ();
は のカスタム サブクラスAVCaptureVideoDataOutputSampleBufferDelegateであることにoutputRecorder
注意してください。 この場合、受信データは に CIImage変換されます。このデータは、ディスプレイに CIColorInvert 送信される前にフィルターが適用されます。
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操作する前にデリゲート メソッドまで待機する必要があります (たとえば、 または WriteVideoToSavedPhotosAlbumAsyncを使用SaveToPhotosAlbumして Photos アルバムに保存する前)。
メディア ファイルの書き込み、読み取り、およびコード変換
iOS 7 でサポートされているオーディオ形式の公式リストを次に示します。
- AAC
- Apple Lossless (ALAC)
- A-law
- IMA/ADPCM (IMA4)
- リニア PCM
- μ法
- CLR/Intel IMA ADPCM
- Microsoft GSM 6.10
- AES3-2003
次のビデオ形式:
- H.264 ビデオ、最大 1.5 Mbps、640 x 480 ピクセル、1 秒あたり 30 フレーム、最大 160 Kbps、48 kHz、.m4v のステレオ オーディオ、.mp4、.mov ファイル形式の AAC-LC オーディオを使用した H.264 ベースライン プロファイルの Low-Complexity バージョン
- H.264 ビデオ、最大 768 Kbps、320 x 240 ピクセル、1 秒あたり 30 フレーム、AAC-LC オーディオ (最大 160 Kbps、48 kHz)、ステレオ オーディオ (.m4v、.mp4、.mov ファイル形式) を使用したレベル 1.3 までのベースライン プロファイル
- MPEG-4 ビデオ、最大 2.5 Mbps、640 x 480 ピクセル、30 フレーム/秒、最大 160 Kbps、48 kHz、ステレオ オーディオ (.m4v、.mp4、.mov ファイル形式)
この一覧は不完全です。たとえば、iPhone 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 では、言語とロケールにローカライズされた音声を使用した音声合成がサポートされています。
最も単純な形式では、テキスト読み上げは、次の 2 つのクラスだけで行うことができます。
var ss = new AVSpeechSynthesizer();
var su = new AVSpeechUtterance("Microphone check. One, two, one two.") {
Rate = 0.25f
};
ss.SpeakUtterance(su);
では AVSpeechSynthesizer 、 の内部キューが AVSpeechUtterance保持されます。 キューにはアプリケーション開発者がアクセスできませんが、 と StopSpeakingでシンセサイザーを一時停止または停止PauseSpeakingできます。 や WillSpeakRangeOfSpeechString などのDidStartSpeechUtteranceイベントは、アプリケーション開発者が以前にエンキューされたシーケンスを変更する機会です。