objective-c - 为什么唯一可用的 AVAssetExportSession.outputFileType = AVFileTypeQuickTimeMovie

标签 objective-c ios avfoundation avassetexportsession

我设置了一个 AVAssetExportSession,只有 2 个音频轨道,没有视频,它在 AVPlayer 中播放时就像我想要的那样 - 但是当我开始的时候要导出它,唯一可用的 outputFileTypeAVFileTypeQuickTimeMovie - 为什么我不能选择音频格式?

当我 NSLog(@"%@", [session supportedFileTypes]); 我得到;

[51330:c07] (
    "com.apple.quicktime-movie"
)

这是我的代码;

- (AVMutableComposition *)getComposition {
    AVAsset *backingAsset = [AVAsset assetWithURL:self.urlForEightBarAudioFile];
    AVAsset *vocalsAsset = [AVAsset assetWithURL:self.recorder.url];
    AVMutableComposition *composition = [AVMutableComposition composition];
    AVMutableCompositionTrack *compositionBackingTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
    AVMutableCompositionTrack *compositionVocalTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

    AVAssetTrack *backingAssetTrack = [backingAsset.tracks objectAtIndex:0];
    AVAssetTrack *vocalsAssetTrack = [vocalsAsset.tracks objectAtIndex:0];

    CMTimeRange timeRange = CMTimeRangeFromTimeToTime(kCMTimeZero, backingAsset.duration);

    [compositionBackingTrack insertTimeRange:timeRange ofTrack:backingAssetTrack atTime:kCMTimeZero error:nil];
    [compositionVocalTrack insertTimeRange:timeRange ofTrack:vocalsAssetTrack atTime:kCMTimeZero error:nil];

    return composition;
}


- (IBAction)acceptRecording:(id)sender {
    AVAssetExportSession * session = [[AVAssetExportSession alloc] initWithAsset:[self getComposition] presetName:AVAssetExportPresetMediumQuality];
    NSURL *output = [self.urlForPathToEightBarRecordings URLByAppendingPathComponent:@"mix.mov"];
    session.outputURL = output;
    session.outputFileType = AVFileTypeQuickTimeMovie;

    NSLog(@"%@", [session supportedFileTypes]);
    [session exportAsynchronouslyWithCompletionHandler:^() {
        switch (session.status) {
            case AVAssetExportSessionStatusCompleted:
                NSLog(@"It's done...hallelujah");
                break;

            default:
                break;
        }
    }];
}

最佳答案

啊对了所以它只给我 quicktime 电影选项的原因是因为我的预设设置为 AVAssetExportPresetMediumQuality 我猜这是一个视频预设。我将我的预设设置为 AVAssetExportPresetAppleM4A 并将输出文件类型设置为 AVFileTypeAppleM4A 并且导出成功!

关于objective-c - 为什么唯一可用的 AVAssetExportSession.outputFileType = AVFileTypeQuickTimeMovie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12165297/

相关文章:

iphone - 如果没有更好的代码检查方式,我该如何编写呢?

ios - 如何使用自动闪光模式检测闪光灯开/关?

ios - 我的 iOS 应用程序中的 EXC_BAD_ACCESS KERN_INVALID_ADDRESS

ios - Xcode 5.1 上的错误 Apple Mach-O 链接器警告

iOS 8 AVFoundation - 如何在支持的设备上启用视频稳定

ios - 调用 removeFromSuperlayer 后 CALayer 仍然显示

objective-c - Xcode 4.1 (Lion) 和 Xcode 3.2.5 (snow leopard) 之间 .xcdatamodeld 的兼容性问题

ios - 如何检查 UIView 的背景颜色是否为 clearColor?

ios - 无法访问类对象变量

ios - swiftui形状的自适应框架(窗口小部件)大小