【问题标题】:iOS 9 : AVFoundation Export Session is missing audioiOS 9:AVFoundation 导出会话缺少音频
【发布时间】:2015-09-20 22:28:35
【问题描述】:

我在将视频与原始音频合并时使用了以下代码。它一直有效,直到我升级到 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];
}

【问题讨论】:

    标签: ios avfoundation ios9 xcode7


    【解决方案1】:

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

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

    【讨论】:

    • 我见过类似的问题。澄清一下:您是说您有第二个 AVMediaTypeAudio 类型的合成轨道,并且对第二个音频合成轨道使用 kCMPersistentTrackID_Invalid 导致音频在导出中被删除?这两个音轨中的任何一个是否为空(未插入时间范围)?
    • 没错。我没有为第二个插入时间范围,并希望正确插入第一首曲目。然而,第二个(空的)也覆盖了第一个音轨,结果视频根本没有音频。同样,此行为仅在 iOS 9 中。
    • 似乎这可能是iOS9中的一个错误。根据文档:“与某些视听数据相关联的每个轨道都有一个唯一标识符,称为轨道 ID。如果您将 kCMPersistentTrackID_Invalid 指定为首选轨道 ID,则会自动为您生成一个唯一标识符并与该轨道相关联。”我猜这个框架不再把它当作一个独特的轨道。
    【解决方案2】:

    我也遇到过类似的问题,但我的观察是您不能再添加没有音频的音轨。然后,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 来说已经没有问题了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-25
      相关资源
      最近更新 更多