2017年01月03日SIN(328)47この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。AVFundationAVFoundationは、音声・動画などのメディアの再生や作成、編集を行うことの出来る巨大なフレームワークです。入力側をデバイスと考えた場合、AVFoundationは、大まかに、次の3つの構成になっているといえます。デバイス(AVCaptureDevice)セッション(AVCaptureSession)出力(AVCaptureOutput)AVFoundationを使用するには、まずは、中心となるAVCaptureSessionをインスタンス化します。このAVCaptureSessionに対して、使用したいデバイスを入力として接続し、利用目的に合致したAVCaptureOutputを出力に接続することで目的を達成します。「ビデオを録画してmp3ファイルに保存したい」というような場合は、入力デバイスとして「背面カメラ」及び「マイク」を設定し、出力として「動画ファイル」(AVCaptureMovieFileOutput)を設定すると言った感じです。下記の図は、その構成を表現したものですが、この時、AVCaptureSessionのinputs:[Any]!プロパティには、2つのAVCaptureDeviceオブジェクトが、そして、outputs:[Any]!には、1つのAVCaptureOutputオブジェクトが列挙されることになります。AVCaptureOutputの、connections:[Any]!プロパティでは、それぞれのデバイスとの間のコネクションとして、2つのAVCaptureConnectionが列挙されます。inputs:[Any]!、outputs:[Any]!、connections:[Any]!を使用して、それぞれのオブジェクトから、関連するオブジェクトを辿ることができます。AVCaptureDeviceAVCaptureDeviceオブジェクトは、物理的な入力デバイスと、そのデバイスに関連付けられたプロパティを表現しています。iPhoneの場合、AVFoundationで使用可能な入力デバイスは、前後のカメラとマイクになります。使用可能なデバイスを列挙するようなコードをiPhoneで実行すると、次のような出力が確認できます。デバイスの初期化defaultDevice(withDeviceType:mediaType:position:)にメディアの種類を指定してデバイスの初期化が可能です。AVMediaTypeAudio)なお、上記の場合は、カメラは、デフォルトとして背面のものが使用されますが、もし、前面のカメラが使用したいのであれば、下記のように記述します。デバイスのプロパティデバイスによって各種のプロパティが設定可能です。}この他にも、非常に多くのプロパティがありますが、詳しくは、下記をご参照ください。ロックと有効性確認デバイスのプロパティを設定する際は、lockForConfiguration()メソッドを使用してデバイスをロック(unlockForConfiguration()で解除)する必要があります。プロパティは、そのデバイスで有効なものしか設定できません。前面カメラでフラッシュをONに設定しようとしたりすると、たちまちアプリがクラッシュしてしまいます。プロパティ設定の前に、それが有効かどうかを確認しなければなりません。下記は、カメラのフラッシュをONに設定している例です。AVCaptureDeviceInputAVCaptureDeviceオブジェクトからデータをキャプチャするために使用するAVCaptureInputのサブクラスです。これを使用して、デバイスをAVCaptureSessionに繋ぎます。AVCaptureSessionAVCaptureSessionは、入力デバイスから出力へのデータの流れを管理するクラスです。下記は、AVCaptureSessionをインスタンス化し、入力側と出力側を初期化している例です。出力の接続captureSession.addOutput(fileOutput)上記のコードで設定されたAVCaptureSessionのinputs:[Any]及び、outputs:[Any]!は、次のようになります。0x136d32ee0>また、AVCaptureOutputのconnections:[Any]!プロパティは、次のようになります。startRunning/stopRunning入力側と出力側の接続が終わった後、startRunning()を呼び出して入力から出力までのデータフローを開始し、stopRunning()を呼び出してフローを停止します。startRunning()は、処理が重いため、ブロックしないようにする必要があります。sessionPresetsessionPresetプロパティを使用して、キャプチャの品質レベル、ビットレートなどのクオリティを設定できます。(高フレームレートなどの特殊なオプションは、AVCaptureDeviceで設定)なお、セッションが実行中の場合は、設定変更の前に、beginConfiguration()を呼ぶ必要があります。変更した設定は、commitConfiguration()を呼んだ時点で反映されます。AVCaptureSessionPresetHigh}captureSession.commitConfiguration()設定できるキャプチャのクオリティの種類は、次のとおりです。Notificatoinセッションの開始と停止のタイミングは、次のような通知を受け取る事が可能です。通常は、AVCaptureOutputのそれぞれのクラスに用意されているdelegateで処理することが多いようです。AVCaptureOutputAVCaptureOutputを基底クラスとする、出力に使用できるクラスには次のようなものが有ります。※AVCaptureStillImageOutputは、iOS10で廃止となっています。AVCaptureMetadataOutput(メタデータ)各種の出力を使用した例は、別記事とさせて頂きましたので、ぜひ、御覧ください。AVCaptureVideoPreviewLayerカメラを使用する場合、通常、リアルタイムにカメラに写っている映像を見ながら作業する事になると思います。このような場合、AVCaptureSessionを引数にして、AVCaptureVideoPreviewLayerオブジェクトを初期化し、表示したいビューのlayoutに追加することで、モニターが可能になります。captureSession:AVCaptureSessionの入力にはカメラが初期化されており、そのプレビューをmoniteorView:UIViewに表示しています。info.plistへの許可iOS10から、カメラやマイクを使用する場合に、info.plistに記述がないとアプリが落ちてしまいます。data.info.plistにカメラとマイクの利用についての記述した例は、次のようになります。<string>ビデオ撮影のためにカメラを使用します。<string>ビデオ撮影のためにマイクを使用します。使用する場合の、全体像を纏めてみました。すべての処理は、AVCaptureSessionを中心に作業しますので、この辺をしっかり押さえておけば、かなり見通しが良くなるのではと感じました。3,285,640CX事業本部の平内です。最近は、音声で操作するアプリの開発を担当させて頂いてます。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。〜ITエンジニアのお仕事とホンネ〜1月30日に新卒向けの会社説明会〜ITエンジニアのお仕事とホンネ〜を開催します。濱田孝治80EKS初心者の方向けに、EKS周辺のAWSリソースがどのように関連して動作しているのかをステップバイステップでEKSCTLが担っている役割を中心に説明しました。菊池修治45こんにちは、菊池です。VPNの冗長化について、最近何度か続けて社内で質問を受けましたのでまとめようと思います。大前諒祐26MediaLiveでの配信終了時に自動でアーカイブファイルをMediaConvertで変換する仕組みを作ってみました。武田隆志1179このエントリは、2018年、2019年に公開したAWS全サービスまとめの2020年版です。これまではいくつかに分割して公開していましたが、1エントリにまとめてほしいという要望をもらっていたため、今年は1エントリに集約してみました。クラスメソッドの関連会社であるアノテーション株式会社の研修として依頼を受け、チームと心理的安全性、それに礼節というテーマで話をしてきました。CAFEのサービスが「LINEアプリ」として利用できるようになりました。これまではLINEのトークから利用する形でしたが、LINEサービス内から利用できるようになりました。これまでより便利に、シームレスにご利用いただけます。Cafe328件のシェア(そこそこ話題の記事)インフラ未経験の私が内定から入社までに読んだ技術書11冊ブログ記事2020年01月16日Yui328インフラ未経験で入社した私がインフラを勉強するために読んだ技術書11冊を感想とともにまとめました。濱田孝治272「ふわわぁ、眠いな。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。