Je veux enregistrer la vidéo et audio jouer simultanément. Lorsque vous démarrez l'enregistrement de la vidéo, la lecture du début audio préchargé et lorsque vous arrêtez l'enregistrement vidéo, le son s'arrête également.Enregistrement vidéo et lecture audio en même temps ios
J'ai essayé d'enregistrer une vidéo en utilisant la bibliothèque tiers « SwiftyCam » (https://github.com/Awalz/SwiftyCam) et commencer la lecture audio en mode de démarrage lorsque délégué écrit le fichier d'enregistrement vidéo.
principal code viewControllerest ci-dessous:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
var temp = Data()
let audioPath = Bundle.main.path(forResource: "ab1-FAST", ofType: "mp3")
temp = FileManager.default.contents(atPath: (audioPath)!)!
do {
player = try AVAudioPlayer(data: temp)
}
catch let error {
print(error)
}
self.configureAudioSession()
player!.delegate = self
self.player!.prepareToPlay()
}
// MARK: -
// MARK: - SwiftyCamViewControllerDelegate method
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didBeginRecordingVideo camera: SwiftyCamViewController.CameraSelection) {
self.player?.play()
}
func swiftyCam(_ swiftyCam: SwiftyCamViewController, didFinishRecordingVideo camera: SwiftyCamViewController.CameraSelection)
{
if self.player != nil{
if (self.player?.isPlaying)! {
self.player?.stop()
}
}
}
@IBAction func btnStartStopClick(_ sender: UIButton) {
sender.isSelected = !sender.isSelected
if sender.isSelected{
DispatchQueue.main.async {
self.objVideoRecorderVC.startVideoRecording()
}
}else{
self.objVideoRecorderVC.stopVideoRecording()
}
}
swiftycam Bibliothèque:
/**
Begin recording video of current session
SwiftyCamViewControllerDelegate function SwiftyCamDidBeginRecordingVideo() will be called
*/
public func startVideoRecording() {
guard let movieFileOutput = self.movieFileOutput else {
return
}
if currentCamera == .rear && flashEnabled == true {
enableFlash()
}
if currentCamera == .front && flashEnabled == true {
flashView = UIView(frame: view.frame)
flashView?.backgroundColor = UIColor.white
flashView?.alpha = 0.85
previewLayer.addSubview(flashView!)
}
sessionQueue.async { [unowned self] in
if !movieFileOutput.isRecording {
if UIDevice.current.isMultitaskingSupported {
self.backgroundRecordingID = UIApplication.shared.beginBackgroundTask(expirationHandler: nil)
}
// Update the orientation on the movie file output video connection before starting recording.
let movieFileOutputConnection = self.movieFileOutput?.connection(withMediaType: AVMediaTypeVideo)
//flip video output if front facing camera is selected
if self.currentCamera == .front {
movieFileOutputConnection?.isVideoMirrored = true
}
movieFileOutputConnection?.videoOrientation = self.getVideoOrientation()
// Start recording to a temporary file.
let outputFileName = UUID().uuidString
let outputFilePath = (NSTemporaryDirectory() as NSString).appendingPathComponent((outputFileName as NSString).appendingPathExtension("mov")!)
movieFileOutput.startRecording(toOutputFileURL: URL(fileURLWithPath: outputFilePath), recordingDelegate: self)
self.isVideoRecording = true
DispatchQueue.main.async {
self.cameraDelegate?.swiftyCam(self, didBeginRecordingVideo: self.currentCamera)
}
}
else {
movieFileOutput.stopRecording()
}
}
}
question: obtenir parfois un retard de démarrage lecture audio en une microseconde. lors de la lecture du début audio et de l'enregistrement du son dans l'enregistrement vidéo, une synchronisation de l'heure correcte et un certain retard dans le son.
Je vérifie avec audio de fusion avec le son original et il y a un certain retard, comme indiqué ci-dessous l'image. le problème n'est pas toujours mais aléatoire et pas synchronisé.
sont des solutions? comment faire enregistrer de la vidéo et la lecture audio en même temps (clic sur un seul bouton) démarrer et sans délai et sans problème de synchronisation? est-ce un autre moyen?
pour l'audio de jeu utilisé: AVAudioPlayer
pour la vidéo d'enregistrement utilisé: Swiftycam (AVCaptureSession)
Peut-être que vous pouvez essayer cet AS: http://stackoverflow.com/a/36912798/2859764 –
@AshitZaveri ,,, Je peux jouer audio et enregistrer des vidéos les deux fois. Sur un seul bouton, cliquez sur démarrer la lecture audio et démarrer l'enregistrement vidéo. mais le problème est en cours de lecture audio est de 0,5 sec retardé (pas toujours). –
En théorie, je pense que c'est possible, mais je ne sais pas comment synchroniser ces deux tâches. Espérons que quelqu'un va nous montrer solution élégante – sage444