Submit Search
Upload
AVFoundationを使ったキャプチャ機能
•
8 likes
•
45,053 views
智也 大西
Follow
http://tomoyaonishi.hatenablog.jp/entry/2014/06/29/024010
Read less
Read more
Technology
Report
Share
Report
Share
1 of 21
Download now
Download to read offline
Recommended
クラス・メソッド・定数・変数宣言時に使えそうなものまとめ
クラス・メソッド・定数・変数宣言時に使えそうなものまとめ
智也 大西
AVFoundationを使った無音カメラアプリの作り方
AVFoundationを使った無音カメラアプリの作り方
Takashi Ohtsuka
iPhoneカメラアプリ開発入門(第1回)
iPhoneカメラアプリ開発入門(第1回)
Takashi Ohtsuka
6秒動画アプリ Vineの作り方
6秒動画アプリ Vineの作り方
Hiramatsu Ryosuke
OpenCV 3.0 on iOS
OpenCV 3.0 on iOS
Shuichi Tsutsumi
意外と苦労する、一部の画面のみ ランドスケープ表示を許容する方法 (potatotips 第17回)
意外と苦労する、一部の画面のみ ランドスケープ表示を許容する方法 (potatotips 第17回)
将之 小野
iOS 9 の新機能 Core Image 編
iOS 9 の新機能 Core Image 編
Shuichi Tsutsumi
これからの時代に! パソコン離れの中のパソコン選び
これからの時代に! パソコン離れの中のパソコン選び
teapipin
Recommended
クラス・メソッド・定数・変数宣言時に使えそうなものまとめ
クラス・メソッド・定数・変数宣言時に使えそうなものまとめ
智也 大西
AVFoundationを使った無音カメラアプリの作り方
AVFoundationを使った無音カメラアプリの作り方
Takashi Ohtsuka
iPhoneカメラアプリ開発入門(第1回)
iPhoneカメラアプリ開発入門(第1回)
Takashi Ohtsuka
6秒動画アプリ Vineの作り方
6秒動画アプリ Vineの作り方
Hiramatsu Ryosuke
OpenCV 3.0 on iOS
OpenCV 3.0 on iOS
Shuichi Tsutsumi
意外と苦労する、一部の画面のみ ランドスケープ表示を許容する方法 (potatotips 第17回)
意外と苦労する、一部の画面のみ ランドスケープ表示を許容する方法 (potatotips 第17回)
将之 小野
iOS 9 の新機能 Core Image 編
iOS 9 の新機能 Core Image 編
Shuichi Tsutsumi
これからの時代に! パソコン離れの中のパソコン選び
これからの時代に! パソコン離れの中のパソコン選び
teapipin
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
teapipin
OpenCVの基礎
OpenCVの基礎
領一 和泉田
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
徹 上野山
Photos vs Assets Library - いまさら始めるPhotos.framework
Photos vs Assets Library - いまさら始めるPhotos.framework
Kaname Noto
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
IBDesignable / IBInspectable で UIプロトタイピンガブル
IBDesignable / IBInspectable で UIプロトタイピンガブル
Masaki Oshikawa
Proactive Suggestions
Proactive Suggestions
Gaprot
iOS 10 new Camera
iOS 10 new Camera
Gaprot
日本らしいスタートアップエコシステムの新しい形
日本らしいスタートアップエコシステムの新しい形
Yagi Sohei
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahoo
Hiramatsu Ryosuke
Ios8yahoo swift-json
Ios8yahoo swift-json
dankogai
iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"
智也 大西
大人のHomekit
大人のHomekit
Ken Haneda
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Chris Adamson
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
niwatako
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
Tomoki Hasegawa
Stupid Video Tricks (CocoaConf DC, March 2014)
Stupid Video Tricks (CocoaConf DC, March 2014)
Chris Adamson
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記
yohei sugigami
Amazon Web Servicesで未来へススメ!
Amazon Web Servicesで未来へススメ!
Genta Watanabe
Xcode 6の新機能
Xcode 6の新機能
Shingo Sato
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
More Related Content
Viewers also liked
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
teapipin
OpenCVの基礎
OpenCVの基礎
領一 和泉田
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
徹 上野山
Photos vs Assets Library - いまさら始めるPhotos.framework
Photos vs Assets Library - いまさら始めるPhotos.framework
Kaname Noto
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
Norishige Fukushima
IBDesignable / IBInspectable で UIプロトタイピンガブル
IBDesignable / IBInspectable で UIプロトタイピンガブル
Masaki Oshikawa
Proactive Suggestions
Proactive Suggestions
Gaprot
iOS 10 new Camera
iOS 10 new Camera
Gaprot
日本らしいスタートアップエコシステムの新しい形
日本らしいスタートアップエコシステムの新しい形
Yagi Sohei
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahoo
Hiramatsu Ryosuke
Ios8yahoo swift-json
Ios8yahoo swift-json
dankogai
iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"
智也 大西
大人のHomekit
大人のHomekit
Ken Haneda
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Chris Adamson
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
niwatako
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
Tomoki Hasegawa
Stupid Video Tricks (CocoaConf DC, March 2014)
Stupid Video Tricks (CocoaConf DC, March 2014)
Chris Adamson
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記
yohei sugigami
Amazon Web Servicesで未来へススメ!
Amazon Web Servicesで未来へススメ!
Genta Watanabe
Xcode 6の新機能
Xcode 6の新機能
Shingo Sato
Viewers also liked
(20)
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
ツイッター調査:約173万ツイートを調査して分かったTwitterの利用動向 #twtr_hack
OpenCVの基礎
OpenCVの基礎
OpenCVをAndroidで動かしてみた
OpenCVをAndroidで動かしてみた
Photos vs Assets Library - いまさら始めるPhotos.framework
Photos vs Assets Library - いまさら始めるPhotos.framework
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
IBDesignable / IBInspectable で UIプロトタイピンガブル
IBDesignable / IBInspectable で UIプロトタイピンガブル
Proactive Suggestions
Proactive Suggestions
iOS 10 new Camera
iOS 10 new Camera
日本らしいスタートアップエコシステムの新しい形
日本らしいスタートアップエコシステムの新しい形
iOS 8/Swift 概要 #ios8yahoo
iOS 8/Swift 概要 #ios8yahoo
Ios8yahoo swift-json
Ios8yahoo swift-json
iOS8勉強会@Yahoo! JAPAN "Document Provider"
iOS8勉強会@Yahoo! JAPAN "Document Provider"
大人のHomekit
大人のHomekit
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
もしiOS8のカスタムキーボードがガジェットのSDKを搭載したら Ver.#ios8yahoo
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
オプショナル型。 〜 なんとなく付ける ! ? 撲滅
Stupid Video Tricks (CocoaConf DC, March 2014)
Stupid Video Tricks (CocoaConf DC, March 2014)
SwiftでSioriを開発した体験記
SwiftでSioriを開発した体験記
Amazon Web Servicesで未来へススメ!
Amazon Web Servicesで未来へススメ!
Xcode 6の新機能
Xcode 6の新機能
Recently uploaded
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
Recently uploaded
(8)
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
AVFoundationを使ったキャプチャ機能
1.
Capturing with AVFoundation 2014/03/12 iOS_LT
#8 @Tomoya_Onishi
2.
自己紹介 • iOS開発歴約3年 • ツイート専用アプリ「FasPos」:累計5万DL •
その他位置情報ログアプリなどいくつか
3.
AVFoundation @import AVFoundation;
4.
音声、画像、動画 の再生や作成の細かい作業を行うための 超強力な低レベルObjective-C API
5.
今回はキャプチャ機能を かなりざっくりと
6.
AVCaptureSession 入力と出力を管理する カメラ マイク 静止画 音声データ 動画 メタデータ AVCaptureDeviceInput AVCaptureDevice AVCaptureOutput …
7.
AVCaptureSession • デバイスからの入力と出力を管理するクラス @property(nonatomic, copy)
NSString *sessionPreset; キャプチャクオリティの調整 AVCaptureSessionPresetPhoto AVCaptureSessionPresetHigh AVCaptureSessionPresetMedium … self.session = [[AVCaptureSession alloc] init];
8.
AVCaptureDevice • デバイスそのものを表現するクラス self.camera = [AVCaptureDevice
defaultDeviceWithMediaType:AVMediaTypeVideo]; @property(nonatomic) AVCaptureFocusMode focusMode; @property(nonatomic) CGPoint focusPointOfInterest; … @property(nonatomic, readonly) AVCaptureDevicePosition position; @property(nonatomic) AVCaptureExposureMode exposureMode; @property(nonatomic) AVCaptureWhiteBalanceMode whiteBalanceMode;
9.
AVCaptureDeviceInput • 指定したデバイスをセッションに入力する時に使うクラス self.cameraInput = [[AVCaptureDeviceInput
alloc] initWithDevice:self.camera error:NULL]; [self.session addInput:self.cameraInput]; セッションにカメラが入力機器として接続された状態
10.
AVCaptureOutput • AVCaptureStillImageOutput(静止画) • AVCaptureMovieFileOutput(動画) •
AVCaptureVideoDataOutput(ビデオデータ) • AVCaptureAudioDataOutput(音声データ) • AVCaptureMetadataOutput(顔、QRコードなど) [self.session addOutput:self.output]; セッションへの入力を特定の方法で出力できる状態
11.
AVCaptureStillImageOutput • カメラから入力されたデータを静止画として出力するクラス self.stillImageOutput =
[[AVCaptureStillImageOutput alloc] init]; @property(nonatomic) BOOL automaticallyEnablesStillImageStabilizationWhenAvailable NS_AVAILABLE_IOS(7_0) 手ぶれ補正ON [self.session addOutput:self.stillImageOutput]; 静止画のキャプチャ準備完了
12.
- (void)captureStillImageAsynchronouslyFromConnection:(AVCaptureConnection *)connection completionHandler: (void
(^)(CMSampleBufferRef imageDataSampleBuffer, NSError *error))handler; + (NSData *)jpegStillImageNSDataRepresentation:(CMSampleBufferRef)jpegSampleBuffer; JPEG画像がNSDataで取得できる このメソッドを呼ぶと自動でシャッター音が鳴る Exifなどのメタデータも含まれる 非同期で静止画をキャプチャ CoreMediaのままではUIKitで使いづらいので変換
13.
AVCaptureMovieFileOutput • 動画を簡単にキャプチャできるクラス self.movieFileOutput =
[[AVCaptureMovieFileOutput alloc] init]; self.movieFileOutput.maxRecordedDuration = CMTimeMake(10 * 30, 30); 最大10秒キャプチャする [self.session addOutput:self.movieFileOutput]; 動画のキャプチャ準備完了
14.
キャプチャ開始 [self.movieFileOutput startRecordingToOutputFileURL:self.movieURL recordingDelegate:self]; キャプチャ終了 self.movieFileOutput
stopRecording]; - (void)captureOutput:(AVCaptureFileOutput *)captureOutput didStartRecordingToOutputFileAtURL:(NSURL *)fileURL fromConnections:(NSArray *)connections AVCaptureFileOutputRecordingDelegate - (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error AVCaptureFileOutputRecordingDelegate outputFileURLに動画が保存されている
15.
AVCaptureVideoDataOutput • 映像の各フレームをそのまま取得できるクラス self.videoDataOutput =
[[AVCaptureVideoDataOutput alloc] init]; self.videoDataOutput.videoSettings = @{ (NSString *)kCVPixelBufferPixelFormatTypeKey : @(kCVPixelFormatType_32BGRA) }; self.videoDataQueue = dispatch_queue_create("jp.co.xxx.videoDataQueue", DISPATCH_QUEUE_SERIAL); [self.videoDataOutput setSampleBufferDelegate:self queue:self.videoDataQueue]; [self.session addOutput:self.videoDataOutput]; 映像フレームのキャプチャ準備完了
16.
AVCaptureVideoDataOutputSampleBufferDelegate - (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection
*)connection sampleBufferがフレーム 1秒に何十回も呼ばれるので重い処理はしないように 各フレームの取得
17.
プレビュー AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer
alloc] initWithSession:self.session]; previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; previewLayer.frame = self.view.bounds; セッションからレイヤーを生成して画面に貼り付けるだけ 盗撮防止のため?renderInContextが効かないようになっている
18.
セッションを動かす 入出力をセッションに接続した状態で呼ぶ 実際に入力データがセッションに入って、出力できるようになる [self.session startRunning]; [self.session stopRunning]; 止める
19.
Tips • AVCaptureSession startRunning •
AVCaptureVideoPreviewLayerの生成が遅い dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session]; [self.session startRunning]; ! dispatch_async(dispatch_get_main_queue(), ^{ previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; previewLayer.frame = frame; }); ! }); 非同期で
20.
その他 • QRコードのキャプチャ及び生成 AVCaptureMetadataOutput, CIFilter •
動画の再構成や画像との合成など AVMutableComposition, AVVideoCompositionCoreAnimationTool • 動画変換 AVAssetExportSession • フレームから動画構築 AVAssetWriter
21.
参考 • https://developer.apple.com/jp/devcenter/ios/library/ documentation/AVFoundationPG.pdf#search='AVFoundation' • https://developer.apple.com/library/ios/navigation/ •
ヘッダーファイル
Download now