ビデオ録画アプリケーション。バックグラウンドミュージックを停止/一時停止せずに(ユーザーがApple Musicを聴いているときなど)、これを動作させたい。これは、カテゴリーをmixWithOthers
、AVAudioSession
シングルトンに設定するときれいにできます。AVCaptureDeviceInputをCaptureSessionリセット/リフォーカスビデオに追加する
カテゴリを設定した後、AVCaptureDeviceInput
〜AVCaptureSession
を追加する必要があります(音声が録音されるようになります)。この結果、バックグラウンド・オーディオやビデオのリセット/再フォーカスに対する不具合が発生します。
私は調査しましたが、バックグラウンドのオーディオグリッチは避けられないものですが、入力が追加されるとビデオ自体はリセットされません。ビデオリセットの結果、記録されたビデオの最初のフレームは黒/黒のいずれかであるか、またはピントが合っていないフレームから開始してからピントを合わせます。
Snapchat iosアプリもチェックされていますが、録画を開始すると音声の不具合が発生しますが、動画はスムーズに録画されます。私は間違って何をしています。
マイコード:
//Setting audio session to mixWithOthers upon startup
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(AVAudioSessionCategoryPlayAndRecord,
with: [.mixWithOthers])
if session.mode != AVAudioSessionModeVideoRecording {
try session.setMode(AVAudioSessionModeVideoRecording)
}
} catch let error {
print("avsession category error: \(error)")
}
そして:
//Just before recording starts will add audio input
let audioDevice = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeAudio)
do
{
let deviceInput = try AVCaptureDeviceInput(device: audioDevice) as AVCaptureDeviceInput
if captureSession.canAddInput(deviceInput) {
captureSession.addInput(deviceInput)
}
else {
print("Could not add audio device input to the session")
}
}
catch let error as NSError {
print(error.localizedDescription)
return
}
すべてで任意のグリッチなしでこれを実行することは可能でしょうか? もしそうでなければ、どうすればSnapchat(addInput呼び出し時にビデオリセットなし)のようにすることができますか?
ない、それはSOで外部ファイルを共有しても大丈夫ですかどうかわからが、私はこののクリーンなサンプルプロジェクトをアップロードしました: https://www.dropbox.com/s/1x7bl4fkboxu9cf/VideoInputGlitch.zip?dl = 0 –
AVCaptureDeviceのプロパティは.focusがあなたのケースではおそらくautoFocusに設定されていますので、lockedに設定してみてください。 –
CameraEngine.swiftファイルとVideoWriter.swiftファイルがプロジェクトにありません。 – DisableR