iPhone SdK:添加音轨后,AVPlayer不会播放乐曲

时间:2011-03-06 17:51:12

标签: iphone avaudiorecorder avplayer avurlasset avmutablecomposition

将音轨(用AVAudioRecorder录制)添加到合成后,AVPlayer将无法播放。 AVPlayer.status = 1,AVPlayer.error = null。

我查看了WWDC10 AVEdit演示代码,它非常相似。它可能是音频格式不兼容吗?

原始作品已经包含来自视频资产的视频和音轨。

删除新添加的音轨后,播放器仍然无法播放 删除原始音轨后,播放器播放。

我也发现很难获得可以指出问题的调试信息。如果有人有任何建议,我将不胜感激。

这是我添加音轨的代码

欢迎任何帮助

让 - 皮埃尔

-(void)editAudioViewController:(EditAudioViewController *)editAudioViewController didEditAudio:(NSURL *)url
{
[self dismissModalViewControllerAnimated:TRUE];

BOOL result;
NSError * error = nil;

if (url)
{
    AVURLAsset * asset = [AVURLAsset URLAssetWithURL:url options:nil] ;

    CMTimeRange audioTimeRange = CMTimeRangeMake(kCMTimeZero , asset.duration);
    if (CMTIME_COMPARE_INLINE(CMTimeRangeGetEnd(audioTimeRange), >, [composition duration]))
        audioTimeRange.duration = CMTimeSubtract([composition duration], audioTimeRange.start);

    AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio
                                    preferredTrackID:kCMPersistentTrackID_Invalid];

    AVAssetTrack *audioTrack = [asset compatibleTrackForCompositionTrack:compositionAudioTrack];

    result = [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioTimeRange.duration) ofTrack:audioTrack atTime:audioTimeRange.start error:&error];

    if (!result)
    {
        NSLog(@"%@", [error description]);
    }

    [mp replaceCurrentItemWithPlayerItem:[AVPlayerItem playerItemWithAsset:composition]];
    [mp seekToTime:kCMTimeZero];

}
}

1 个答案:

答案 0 :(得分:1)

我的录音机代码中有两个单独的会话,一个用于录制,另一个用于播放。 我切换到单个记录/播放会话,这以某种方式解决了问题:

audioSession = [AVAudioSession sharedInstance];

if (!audioSession.inputIsAvailable)
{
    NSLog(@"No input available");
}

[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

NSError * error = nil;

[audioSession setActive:TRUE error:&error];

if (error)
{
    NSLog(@"%@", [error description]);
}