Apple iOS AppでAVFoundationを利用する際のメモを残しています。
iPhoneカメラをアプリで利用についての概要となります。
1.AVCaptureSessionの設定
2.AVCaptureDeviceクラスを用いたデバイスの設定
3.入力・出力データの設定
4.カメラの取得している映像の表示
5.UIの設定
6.カメラと写真の利用許可
7.撮影ボタン押下時のアクション設定
8.撮影した画像の保存
AVFoundation
Overview
The AVFoundation framework combines six major technology areas that together encompass a wide range of tasks for capturing, processing, synthesizing, controlling, importing and exporting audiovisual media on Apple platforms.
AVFoundationフレームワークは、Appleプラットフォームでオーディオビジュアルメディアをキャプチャ、処理、合成、制御、インポート、およびエクスポートするための幅広いタスクを一緒に含む6つの主要なテクノロジー領域を組み合わせたものです。
CAMERAアプリをXcodeに実装する。
AVFoundation Capture
写真をキャプチャし、ビデオとオーディオを記録します。 内蔵カメラとマイクまたは外部キャプチャデバイスを構成します。
AVFoundation Captureを使うとカメラが使えるようになりそうです。
それでは詳細を見に行きます。
Cameras and Media Capture
Overview
The AVFoundation Capture subsystem provides a common high-level architecture for video, photo, and audio capture services in iOS and macOS. Use this system if you want to:
AVFoundation Captureサブシステムは、iOSおよびmacOSのビデオ、写真、およびオーディオキャプチャサービスに共通の高レベルアーキテクチャを提供します。 次の場合にこのシステムを使用します。
- Build a custom camera UI to integrate shooting photos or videos into your app’s user experience.
- カスタムカメラUIを構築して、写真や動画の撮影をアプリのユーザーエクスペリエンスに統合します。
- Give users more direct control over photo and video capture, such as focus, exposure, and stabilization options.
- フォーカス、露出、安定化オプションなど、写真やビデオのキャプチャをより直接的に制御できるようにします。
- Produce different results than the system camera UI, such as RAW format photos, depth maps, or videos with custom timed metadata.
- RAW形式の写真、深度マップ、カスタムのタイミングメタデータを使用したビデオなど、システムカメラのUIとは異なる結果を生成します。
- Get live access to pixel or audio data streaming directly from a capture device.
- キャプチャデバイスから直接、ピクセルまたはオーディオデータストリーミングへのライブアクセスを取得します。
Note 注意
To instead let the user capture media with the system camera UI within your app, see UIImage
.
代わりに、ユーザーがアプリ内のシステムカメラUIを使用してメディアをキャプチャできるようにするには、UIImagePickerControllerを参照してください。
The main parts of the capture architecture are sessions, inputs, and outputs: Capture sessions connect one or more inputs to one or more outputs. Inputs are sources of media, including capture devices like the cameras and microphones built into an iOS device or Mac. Outputs acquire media from inputs to produce useful data, such as movie files written to disk or raw pixel buffers available for live processing.
キャプチャアーキテクチャの主要部分は、セッション、入力、および出力です。キャプチャセッションは、1つ以上の入力を1つ以上の出力に接続します。 入力は、iOSデバイスまたはMacに組み込まれているカメラやマイクなどのキャプチャデバイスを含むメディアのソースです。 出力は入力からメディアを取得して、ディスクに書き込まれたムービーファイルやライブ処理に使用できる生のピクセルバッファなどの有用なデータを生成します。
詳細は以下を参照する。
Requesting Authorization for Media Capture on iOS メディアキャプチャの許可を要求するiOS
写真、オーディオ、およびビデオをキャプチャして保存する許可を求めることにより、ユーザーのプライバシーを尊重します。
iOSでは、ユーザーは各アプリにカメラとマイクへのアクセスを明示的に許可する必要があります。アプリがキャプチャシステムを初めて使用する前に、iOSは、以下に示すように、アプリにカメラへのアクセスを許可するようにユーザーに求めるアラートを表示します。iOSは、このアラートに対するユーザーの応答を記憶しているため、キャプチャシステムを後で使用しても、アラートが再び表示されることはありません。ユーザーは、[設定]> [プライバシー]でアプリの権限設定を変更できます。
メディアをキャプチャする前にアプリに権限があることを確認するには、以下の手順に従います。
アプリのInfo.plistファイルを構成する
iOSでは、システムがカメラまたはマイクの許可を求めたときにユーザーに表示する静的メッセージをアプリが提供する必要があります。
- アプリでデバイスカメラを使用している場合は、アプリのInfo.plistファイルにNSCameraUsageDescriptionキーを含めます。
- アプリがデバイスのマイクを使用している場合は、アプリのInfo.plistファイルにNSMicrophoneUsageDescriptionキーを含めます。
キーごとに、アプリがメディアをキャプチャする必要がある理由をユーザーに説明するメッセージを提供します。これにより、ユーザーはアプリにアクセス許可を自信を持って付与できるようになります。
キャプチャの承認を確認して要求する
キャプチャセッションを設定する前に、必ずメソッドをテストしてください。ユーザーがキャプチャ権限をまだ付与または拒否していない場合、承認ステータスはです。この場合、このメソッドを使用して、iOSにユーザーにプロンプトを表示するように指示します。AVCapture
authorization
AVAuthorization
request
この方法は非同期です。iOSが権限アラートを表示している間、アプリは実行を継続します。ユーザーが応答すると、システムは完了ハンドラーを呼び出します。完了ハンドラーのsuccessパラメーターがtrueの場合、キャプチャー・セッションのセットアップと開始に進むことができます。request
キャプチャされたメディアを保存する前に認証を要求する
写真やビデオをキャプチャした後、それらをユーザーのフォトライブラリに保存することをお勧めします。写真ライブラリにアクセスするには、ユーザーの許可も必要です(カメラとマイクの許可とは別に)。許可を要求する方法とタイミングは、メディアの保存に使用する機能によって異なります。
- ほとんどの写真およびビデオキャプチャワークフロー(ライブ写真およびRAW形式のキャプチャを含む)では、およびクラスを使用します。これらのクラスにはフォトライブラリへの読み取り/書き込みアクセスが必要なため、Info.plistのNSPhotoLibraryUsageDescriptionキーを使用して、アクセスを要求するときにユーザーにメッセージを提供する必要があります。詳細については、キャプチャした写真の保存を参照してください。
PHPhoto
Library PHAsset
Creation Request - アプリがムービーファイルをフォトライブラリに保存するだけでよい場合、この関数は。のより簡単な代替手段を提供します。この関数はライブラリへの書き込みアクセスのみを必要とするため、Info.plistのNSPhotoLibraryAddUsageDescriptionキーを使用して、フォトライブラリに保存する許可を求めるときにユーザーにメッセージを提供します。
UISave
Video At Path To Saved Photos Album(_: _: _: _:) PHPhoto
Library
NSCameraUsageDescription
NSCameraUsageDescription
(String
–iOS)は、アプリ(iMessageアプリを含む)がデバイスのカメラにアクセスする理由を説明します。システムがユーザーにアクセスを許可するように求めると、この文字列がアラートの一部として表示されます。
重要: ユーザーのプライバシーを保護するために、iOS 10.0以降にリンクされ、デバイスのカメラにアクセスするiOSアプリは、そうする意図を静的に宣言する必要があります。NSCameraUsageDescriptionキーをアプリのInfo.plist
ファイルに含め、このキーの目的の文字列を指定します。アプリが対応する目的文字列なしでデバイスのカメラにアクセスしようとすると、アプリは終了します。
このキーはiOS7.0以降でサポートされています。
Xcodeでは、info.polstファイルにこの定義を追加する。
プログラムへの追加は不要。
“Privacy – Camera Usage Description”
写真を撮影するためにカメラを使用します。
Captureの対応
キャプチャセッションの設定
フレームワーク
- AVFoundation
概要
これは、iOSおよびmacOSでのすべてのメディアキャプチャの基礎です。これは、OSキャプチャインフラストラクチャとキャプチャデバイスへのアプリの排他的アクセス、および入力デバイスからメディア出力へのデータのフローを管理します。入力と出力の間の接続をどのように構成するかによって、キャプチャセッションの機能が定義されます。たとえば、次の図は、iPhoneのバックカメラとマイクを使用して、写真と動画の両方をキャプチャし、カメラのプレビューを提供するキャプチャセッションを示しています。AVCapture
入力と出力をセッションに接続する
すべてのキャプチャセッションには、少なくとも1つのキャプチャ入力とキャプチャ出力が必要です。キャプチャ入力(サブクラス)はメディアソースです。通常、iOSデバイスまたはMacに組み込まれているカメラやマイクなどの録音デバイスです。キャプチャ出力(サブクラス)は、キャプチャ入力によって提供されるデータを使用して、画像やムービーファイルなどのメディアを生成します。AVCapture
AVCapture
ビデオ入力にカメラを使用するには(写真やムービーをキャプチャするため)、適切なを選択し、対応するを作成して、セッションに追加します。AVCapture
AVCapture
コメント