iPhone SdK: AVPlayer не будет воспроизводить композицию после добавления звуковой дорожки - PullRequest
2 голосов
/ 06 марта 2011

После добавления звуковой дорожки (записанной с помощью 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 Ответ

1 голос
/ 15 марта 2011

У меня было два отдельных сеанса в коде моего диктофона, один для записи и один для воспроизведения. Я переключился на один сеанс записи / воспроизведения, и это как-то решило проблему:

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]);
}
...