問題タブ [avcapturemoviefileoutput]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - maxRecordedFileSize を使用して AVCaptureSession の記録時間を制限する
私は、AVFoundation を使用して記録と保存を設定および処理する iOS 8 用のカメラ アプリを作成しています (ImagePickerController ではありません)。AVCaptureMovieFileOutput クラスの maxRecordedFileSize 属性を使用して、ユーザーが電話で利用可能なすべてのスペースを埋めることができるように保存しようとしています (Apple 用に残された 250MB のバッファを差し引いたもの)。
}
AVErrorMaximumFileSizeReached は、使用可能なスペース (マイナス バッファー) がゼロになるとスローされ、保存エラーはスローされませんが、ビデオはカメラ ロールに表示されず、保存されません。maxRecordedDuration フィールドを設定すると、 AVErrorMaximumDurationReached がスローされ、ビデオは保存されます。最大サイズから最大時間を計算しますが、フレーム圧縮のために常に十分なスペースが残っています。
両方のエラーがスローされると、「写真アルバムへの書き込み」が表示されます。私はこれに完全に困惑しています。iOSに関する洞察はありますか?
xcode - SampleBufferDelegate が機能しない
奇妙な理由で、AVCaptureVideoDataOutputSampleBufferDelegate がトリガーされません。デリゲートとすべてを追加しましたが、コードで実行されていない理由がわかりません。誰でも理由を理解するのを手伝ってもらえますか?
私の .h のデリゲート
.m コード (initializeCamera は ViewDidLoad で呼び出されています)
ios - AVFoundation ビデオをローカル URL に保存できません
私はプログラミングと Objective-C の初心者であり (~6 週間)、AVFoundation を初めて使用しています。私の目標は、自分のレベルを伸ばすことですが、フレームワークに精通している人にとってはそれほど難しくないはずです。
私の目標は、ボタンをタップすると静止画像をキャプチャし、ボタンを押したままにするとビデオを録画する「Snapchat」スタイルのカスタム カメラ インターフェースを作成することです。
ほとんどのコード (ビデオ プレビュー、静止画像のキャプチャ、プログラム ボタンなど) をまとめて押しつぶすことはできましたが、ビデオをローカルに正常に保存することはできません(ビルドされたプロジェクトに追加します)。今週後半にParseの上に)。
ViewController.h (リファレンス)
ViewController.m
私がコードを作成した方法は、最初の一連のメソッドでセッションを初期化し、次に画像とビデオのキャプチャを個別のセクションに分割することです。入力デバイスは AVMediaTypeVideo で、それぞれ AVCaptureStillImageOutput と AVCaptureMovieFileOutput に出力します。
コードは次の行で中断されます。
頭のてっぺんから、それはいくつかの可能性があると考えています。
- データはそこにありますか (ログに記録されていますが、確認できません)?
- リンク先 URL を適切に初期化していますか?
- データは宛先と互換性がありますか? それは事ですか?
これをチェック、テスト、またはデバッグする方法についてのあなたの視点/新鮮な目/考えが大好きです。
乾杯、J
ios - ファイルへの記録に適した最高解像度の AVCaptureDeviceFormat を見つける方法は?
を使用して、AVFoundation を使用して、デバイスのカメラからムービー ファイルに記録していますAVCaptureMovieFileOutput
。AVCaptureDeviceFormat
録画を開始する前にユーザーが高フレーム レート モードと高解像度モードを切り替えられるようにしたいのですが、どちらがビデオ録画に適した最高の解像度をもたらすかを知る方法がわかりません。
たとえば、私がテストしている iPod touch では、リア カメラの次のデバイス フォーマットが一覧表示されます。
最高のフレーム レートを選択するのは簡単です (ドキュメントに例が示されています)。フォーマットとサポートされているフレーム レート範囲を反復処理して、フレーム レートが最も高いものを見つけるだけです。私が知る限り、最高のフレーム レートのフォーマットは、常にビデオ ファイルへの記録に使用できます。
最高解像度のフォーマットを見つけようとすると、問題が発生します。この場合、1080p が記録可能な最高値ですが、フォーマットは 2448p までリストされています。カメラのハードウェアをこの形式に切り替えることはできますが、1080p を超えるファイルへの記録を拒否します。もちろん、1080p のみを使用するようにハードコーディングすることもできますが、現在、4K での録画をサポートするデバイスがあります。
私の質問は、このリストをフィルタリングして、記録に適した形式のみを表示するにはどうすればよいですか? AVCaptureDeviceFormat
とのドキュメントを調べましたがCMFormatDescription
、指定された形式が記録可能かどうかを示すものは見つかりません。この質問は似ていますが、trueになるまでフォーマットを常に切り替えるのisActive
は悪い方法のようです。
どれが機能するかを確認するためにすべてを試すことなく、使用する正しい形式を見つけることができますか?
avfoundation - AVCaptureSession でキャプチャされた最初と最後のムービー フレームの正確な時間を記録する方法は?
AVCaptureSession
ビデオをムービーファイルにキャプチャするために使用しています。映画の最初と最後のフレームの正確なタイムスタンプを取得したい。どうすればいいですか?
では、ムービーの録画が開始されたときAVCaptureFileOutputRecordingDelegate
にメソッドcaptureOutput(_:didStartRecordingToOutputFileAtURL:fromConnections:)
が呼び出されますが、録画が終了したときのコールバックと同様に、私の目的には不正確です。フレームの正確なタイムスタンプが必要です。
ではAVCaptureVideoDataOutputSampleBufferDelegate
、メソッドcaptureOutput:didOutputSampleBuffer:fromConnection:
はフレームごとに呼び出され、フレームの明示的なタイムスタンプ情報にアクセスするために使用できるため、十分に正確です。
残念ながら、ビデオ ファイルへの記録と生のサンプル データの提供を同時に行うようにキャプチャ セッションを構成することはできないようです。そのため、これを使用してファイルにキャプチャしながらフレームのタイムスタンプを取得することはできません。
または、両方を同時に使用する方法はありますか?または、使用できる別の API が不足していますか?