- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在将 AVAsset 导出到本地目录时遇到问题。我收到以下错误消息:
failed Error Domain=AVFoundationErrorDomain Code=-11838 "Operation Stopped" UserInfo={NSLocalizedFailureReason=The operation is not supported for this media., NSLocalizedDescription=Operation Stopped, NSUnderlyingError=0x2806d1740 {Error Domain=NSOSStatusErrorDomain Code=-12109 "(null)"}}
这是我上传文件的代码:
这是我的调试器的图像,您可以在其中看到 file
变量引用了一个实际的 AVAsset
这是对失败的 AVAssetExportSession 的描述
Optional<AVAssetExportSession>
- some : <AVAssetExportSession: 0x280791270, asset = <AVURLAsset: 0x2805ef600, URL = https://firebasestorage.googleapis.com/v0/b/camouflage-43fe0.appspot.com/o/eCg9SNmLVlRUacfUBO1CTWNQizO2%2F31983848-C493-469B-A7CD-F7B215C37526%2Fproject_audio%2F1308EB6E-0FB3-4538-AEEC-DF59945C4CF9%2F3826F259-1B18-4381-B893-E69ACC8D6DEE?alt=media&token=8a0725e0-f34c-4b90-b564-3a3ca52e58cd>, presetName = AVAssetExportPresetAppleM4A, outputFileType = com.apple.m4a-audio
预先感谢您的帮助。
编辑:我尝试将 AVURLAsset 包装在 AVMutableComposition 中,但现在我得到了这个错误
failed Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedFailureReason=An unknown error occurred (-17508), NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x283ae5c50 {Error Domain=NSOSStatusErrorDomain Code=-17508 "(null)"}}
最佳答案
我认为您遇到错误是因为文件扩展名与“presetName”、“outputFileType”、“fileURL”不匹配。
我尝试使用 AVMutableComposition 解决并以 m4a 格式导出音频。音频在远程服务器上。
let url = URL(string: "https://file-examples-com.github.io/uploads/2017/11/file_example_MP3_700KB.mp3")
let asset = AVAsset(url: url!)
let playerItem = AVPlayerItem(asset: asset)
let remoteFilePath = url
func downloadLocalCopyOfTrack(_ playerItem: AVPlayerItem, finished:@escaping (URL?) -> ()) {
guard playerItem.asset.isExportable else {
finished(nil)
return
}
let composition = AVMutableComposition()
let compositionAudioTrack = composition.addMutableTrack(withMediaType: AVMediaType.audio, preferredTrackID: CMPersistentTrackID(kCMPersistentTrackID_Invalid))
let sourceAudioTrack = playerItem.asset.tracks(withMediaType: AVMediaType.audio).first!
do {
let durationInSec = playerItem.asset.duration.seconds
let duration = CMTime(seconds: durationInSec, preferredTimescale: 1)
try compositionAudioTrack?.insertTimeRange(CMTimeRange(start: CMTime.zero, duration: duration), of: sourceAudioTrack, at: CMTime.zero)
} catch {
print(error.localizedDescription)
finished(nil)
return
}
remoteFilePath.deletePathExtension()
let fileName = remoteFilePath.lastPathComponent
let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let outputFilePath = documentDirectory.appendingPathComponent("\(fileName).m4a")
try? FileManager.default.removeItem(at: outputFilePath)
let exportSession = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetAppleM4A)
exportSession!.outputURL = outputFilePath
exportSession!.outputFileType = AVFileType.m4a
exportSession!.timeRange = CMTimeRange(start: CMTime.zero, duration: playerItem.duration)
//Timer for Progress of Export Session
var exportProgressBarTimer = Timer() // initialize timer
if #available(iOS 10.0, *) {
exportProgressBarTimer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { timer in
// Get Progress
let progress = Float((exportSession!.progress));
if (progress < 0.99) {
print("progress", progress * 100)
}
}
}
exportSession!.exportAsynchronously(completionHandler: {
switch exportSession!.status {
case .failed:
print("Export failed: \(exportSession!.error!)")
exportProgressBarTimer.invalidate()
case .cancelled:
print("Export canceled")
exportProgressBarTimer.invalidate()
default:
print("Successfully trimmed audio")
DispatchQueue.main.async(execute: {
finished(outputFilePath)
exportProgressBarTimer.invalidate()
})
}
})
}
用法:
downloadLocalCopyOfTrack(playerItem, finished: { (url) in
if url != nil {
//use url or play here
}else {
print("URL is nil")
}
})
关于swift - 需要帮助使用 AVAssetExportSession 导出音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63066799/
我有一个应用程序,允许附加多个视频资源并向合成添加一个或多个音轨。一切似乎都有效,我可以使用 AVPlayer 播放生成的作品(尽管音频级别似乎很低)。将乐曲导出到文件后,音轨丢失。 我的代码主要基于
我有一个应用程序,可以将 AVMutableComposition 导出到 .mov 文件中,我希望用户可以使用进度条与发送短信或上传文件时的进度条相同。 当我知道任务的持续时间(例如播放音频文件)时
当应用程序在后台运行时,我尝试管理 AVAssetExportSession 工作。我有 iOS 6 设备并在那里进行测试。所以我正在制作音频混合并尝试导出音频。当应用程序在前台时,我一切正常,但如果
我正在尝试使用以下代码将2个预先存在的mpeg4视频加入到ipad2上。 -(void)mergeTestVideos { //setup asset NSString *firsta
我正在创建一个视频文件,并在其上添加动画图像。我跟踪导出进度和状态,但是在导出进度达到1.0后,不会调用回调,并且导出状态仍等于'AVAssetExportSessionStatusExporting
我想合并视频和音频文件。我的程序在调试/单步模式下按我想要的方式工作,但在运行时不工作。我想这可能是“exportAsynchronously”函数的问题,我在加载之前访问了一些值。这是我的代码。 合
AVAssetExportSession 从来没有告诉我导出何时完成,但它确实很快并且文件出现在应该出现的位置......我正在使用 exportAsynchronouslyWithCompletio
我正在尝试在应用程序中裁剪和合并多个视频。我在步骤的最后部分遇到问题,我需要将视频保存到相机卷轴并且 UIVideoAtPathIsCompatibleWithSavedPhotosAlbum 返回
我想在自定义 View 中录制视频,所以我按照以下代码使用 AVFoundation。 if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum
我正在使用 AVAssetExportSession 将多个视频合并在一起,但视频是立体声的,生成的视频是双单声道的。是否可以使用 AVAssetExportSession 合并视频并保持立体声 ch
我有一个应用程序可以将视频文件组合在一起制作一个长视频。视频之间可能会有延迟(例如,V1 从 t=0s 开始并运行 5 秒,V1 从 t=10s 开始)。在这种情况下,我希望视频卡住 V1 的最后一帧
我正在使用 AVAssetExportSession 以 640x480 的分辨率导出一些东西,这些文件有点怪异——可以预见的是怪异,但仍然怪异,因为我们需要通过 3G 网络从手机上传它们。除了降低分
我的目标是让用户从照片中选择视频,然后让他在上面添加标签。 这是我得到的: let audioAsset = AVURLAsset(url: selectedVideoURL) let videoAs
我有一个错误和一个问题。我想将修改后的视频导出到相机胶卷,但导出的视频与相机胶卷不兼容。 我也想删除最初录制的视频,以便我可以录制不止一次,但它会产生错误并且没有意义。如果我取消注释代码,则会出现错误
我正在尝试在视频的 AVMutableComposition 上应用 AVMutableVideoCompositionLayerInstruction。问题是当使用 AVAssetExportSes
我正在尝试将 2 个音频文件和 1 个视频文件合并为 1 个 .mov 文件。我用下一个代码实现它: -(void)combineData{ AVMutableComposition *mixComp
当应用程序在后台时,我无法让 AVAssetExportSession 工作。 我的应用程序启用了后台模式“Background Fetch”。 当这个 UIApplicationDelegate 方
我正在尝试对共享扩展中选择的视频使用 AVAssetExportSession 并获取 Error Domain=NSURLErrorDomain Code=-3000 "Cannot create
AVAssetExportSession 将预设作为其初始化参数之一: AVAssetExportSession(asset: AVAsset, presetName: String) 其中预设是 A
我正在使用 AVAssetExportSession 修剪音频文件,但无法在保存的文件中实现淡入淡出效果。这是我正在使用的代码。 [[NSFileManager defaultManag
我是一名优秀的程序员,十分优秀!