我在使用原始音频合并视频时使用以下代码剪切。它一直在工作,直到我升级到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];
}
答案 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中的两个音轨与一个视频组合在一起没有任何问题。