Операция Swift AVAssetExportSession остановлена ⇐ IOS
Операция Swift AVAssetExportSession остановлена
Я пытаюсь экспортировать файл .wav из видеофайла, извлеченного из UIImagePickerController
UIImagePickerController.InfoKey.mediaURL
Пример URL-адреса, переданного в функцию:
file:///private/var/mobile/Containers/Data/PluginKitPlugin/BCE1C3A1-AA62-4D89-9487-05E19DB476A7/tmp/trim.3C31A33B-A99E-45B7-9101-5C225CFCFF2B.MOV
Я могу успешно использовать эту функцию для извлечения файла m4a, но не могу заставить ее работать с файлом WAV. Ошибка, которую я получаю при запуске приведенного ниже кода: "Извлечение аудио из WAV завершилось с ошибкой: операция остановлена"
Я не знаю, почему я получаю сообщение об ошибке «Операция остановлена» в файле wav, а не в файле m4a? Альтернатива, которую я попробовал, — это преобразовать m4a в wav постфактум и получить ту же ошибку...
func ExtractAudioAsWAV(from mediaURL: URL) { пусть inputAsset = AVAsset (url: mediaURL) пусть outputFilePath = URL (fileURLWithPath: NSTemporaryDirectory() + «out.wav») пусть audioAsset = inputAsset.tracks(withMediaType: .audio).first если пусть audioAsset = audioAsset { пусть композиция = AVMutableComposition() let audioTrack = Composition.addMutableTrack(withMediaType: .audio,eferredTrackID: kCMPersistentTrackID_Invalid) делать { попробуйте audioTrack?.insertTimeRange(CMTimeRange(start: CMTime.zero, продолжительность: inputAsset.duration), of: audioAsset, at: CMTime.zero) let ExportSession = AVAssetExportSession (актив: композиция, PresetName: AVAssetExportPresetPassthrough) ExportSession?.outputFileType = AVFileType.wav ExportSession?.outputURL = URL(fileURLWithPath: outputFilePath.absoluteString) ExportSession?.exportAsynchronous(completionHandler: { если ExportSession?.status == .completed { print("Извлечение аудио в формат WAV завершено.") } else if let error = ExportSession?.error { print("Извлечение аудио в формате WAV не удалось с ошибкой: \(error.localizedDescription)") } }) } ловить { print("Ошибка: \(error.localizedDescription)") } } } func imagePickerController (_ Picker: UIImagePickerController, DidFinishPickingMediaWithInfo информация: [UIImagePickerController.InfoKey: Any]) { пусть videoURL = info[UIImagePickerController.InfoKey.mediaURL] как? НГУУРЛ self.dismiss(анимация: правда, завершение: ноль) ExtractAudioAsWAV (из: videoURL! как URL-адрес) } func PresentImagePicker() { imagePickerController.sourceType = .photoLibrary imagePickerController.delegate = сам imagePickerController.mediaTypes = ["public.movie"] присутствует (imagePickerController, анимированный: true, завершение: ноль) }
Я пытаюсь экспортировать файл .wav из видеофайла, извлеченного из UIImagePickerController
UIImagePickerController.InfoKey.mediaURL
Пример URL-адреса, переданного в функцию:
file:///private/var/mobile/Containers/Data/PluginKitPlugin/BCE1C3A1-AA62-4D89-9487-05E19DB476A7/tmp/trim.3C31A33B-A99E-45B7-9101-5C225CFCFF2B.MOV
Я могу успешно использовать эту функцию для извлечения файла m4a, но не могу заставить ее работать с файлом WAV. Ошибка, которую я получаю при запуске приведенного ниже кода: "Извлечение аудио из WAV завершилось с ошибкой: операция остановлена"
Я не знаю, почему я получаю сообщение об ошибке «Операция остановлена» в файле wav, а не в файле m4a? Альтернатива, которую я попробовал, — это преобразовать m4a в wav постфактум и получить ту же ошибку...
func ExtractAudioAsWAV(from mediaURL: URL) { пусть inputAsset = AVAsset (url: mediaURL) пусть outputFilePath = URL (fileURLWithPath: NSTemporaryDirectory() + «out.wav») пусть audioAsset = inputAsset.tracks(withMediaType: .audio).first если пусть audioAsset = audioAsset { пусть композиция = AVMutableComposition() let audioTrack = Composition.addMutableTrack(withMediaType: .audio,eferredTrackID: kCMPersistentTrackID_Invalid) делать { попробуйте audioTrack?.insertTimeRange(CMTimeRange(start: CMTime.zero, продолжительность: inputAsset.duration), of: audioAsset, at: CMTime.zero) let ExportSession = AVAssetExportSession (актив: композиция, PresetName: AVAssetExportPresetPassthrough) ExportSession?.outputFileType = AVFileType.wav ExportSession?.outputURL = URL(fileURLWithPath: outputFilePath.absoluteString) ExportSession?.exportAsynchronous(completionHandler: { если ExportSession?.status == .completed { print("Извлечение аудио в формат WAV завершено.") } else if let error = ExportSession?.error { print("Извлечение аудио в формате WAV не удалось с ошибкой: \(error.localizedDescription)") } }) } ловить { print("Ошибка: \(error.localizedDescription)") } } } func imagePickerController (_ Picker: UIImagePickerController, DidFinishPickingMediaWithInfo информация: [UIImagePickerController.InfoKey: Any]) { пусть videoURL = info[UIImagePickerController.InfoKey.mediaURL] как? НГУУРЛ self.dismiss(анимация: правда, завершение: ноль) ExtractAudioAsWAV (из: videoURL! как URL-адрес) } func PresentImagePicker() { imagePickerController.sourceType = .photoLibrary imagePickerController.delegate = сам imagePickerController.mediaTypes = ["public.movie"] присутствует (imagePickerController, анимированный: true, завершение: ноль) }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение