iOS 9:AVFoundation导出会话缺少音频

时间:2015-09-20 22:28:35

标签: ios avfoundation ios9 xcode7

我在使用原始音频合并视频时使用以下代码剪切。它一直在工作,直到我升级到iOS9。任何人都面临同样的问题,任何帮助解决将不胜感激。研究了一整天后我找不到任何东西。

AVAssetTrack *videoTrack = nil;
AVAssetTrack *audioTrack = nil;
CMTime insertionPoint = kCMTimeZero;

if([[url tracksWithMediaType:AVMediaTypeVideo] count] != 0) {
    videoTrack = [url tracksWithMediaType:AVMediaTypeVideo][0];
}

if([[url tracksWithMediaType:AVMediaTypeAudio] count] != 0) {
    audioTrack = [url tracksWithMediaType:AVMediaTypeAudio][0];
}

// Insert the video and audio tracks from AVAsset
if (videoTrack != nil) {
    AVMutableCompositionTrack *compositionVideoTrack = [videoComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid];
    [compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, [url duration]) ofTrack:videoTrack atTime:insertionPoint error:&error];
}
if (audioTrack != nil) {
    AVMutableCompositionTrack *compositionAudioTrack = [videoComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
    [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, [url duration]) ofTrack:audioTrack atTime:insertionPoint error:&error];
}

2 个答案:

答案 0 :(得分:2)

发现问题: 我在上面的代码之后使用了下面的内容。删除后,它工作正常。下面的额外行删除了iOS 9中已添加的音轨。 希望它可以帮助别人!

AVMutableCompositionTrack * compositionAudioTrack2 = [videoComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];

答案 1 :(得分:1)

我遇到了类似的问题,但我的观察是你不能再添加没有音频的音轨了。然后IOS 9将删除完整的音频。

So only this line will remove all audio 
compositionAudioTrack = [videoComposition 
addMutableTrackWithMediaType:AVMediaTypeAudio 
preferredTrackID:kCMPersistentTrackID_Invalid];

如果没有有效的

[compositionAudioTrack insertTimeRange:
     CMTimeRangeMake(kCMTimeZero, [url duration]) 
     ofTrack:audioTrack 
     atTime:insertionPoint error:&error];

所以对audioTrack!= nil的测试还不够。

我将IOS 9中的两个音轨与一个视频组合在一起没有任何问题。