首页 > 解决方案 > AVPlayer 使用 AVMutableComposition 不会随机发出声音

问题描述

我使用 Objective-C 开发了 iOS 音乐播放应用程序。但是,有时 AVPlayer 使用 AVMutableComposition 不会随机发出声音。

这里没有声音问题代码

                MPMediaItem* mediaItem = [songObj mediaItem];
                NSURL* assetUrl = [mediaItem valueForProperty:MPMediaItemPropertyAssetURL];
                
                self.mediaAsset_A = [AVAsset assetWithURL:assetUrl];
                
                AVMutableComposition* myMutableComposition = [AVMutableComposition composition];
                NSError* error = nil;
                [myMutableComposition insertTimeRange:CMTimeRangeMake(self.startPoint, self.reSampledDuration) ofAsset:self.mediaAsset_A atTime:kCMTimeZero error:&error];

                if(error)
                    NSLog(@"Insertion error: %@", error);
                
                AVComposition *composition = [myMutableComposition copy];
              
                self.mediaAsset_A = (AVAsset*) composition;

                [self.mediaAsset_A loadValuesAsynchronouslyForKeys:@[@"duration"] completionHandler:^{
                   
                    AVPlayerItem* playerItem = [AVPlayerItem playerItemWithAsset:self.mediaAsset_A];

                    if (self.mediaPlayer_A)
                        [self.mediaPlayer_A replaceCurrentItemWithPlayerItem:playerItem];
                    else
                        self.mediaPlayer_A = [AVPlayer playerWithPlayerItem:playerItem];
                }];

                [self.mediaPlayer_A play];

如果我不使用 AVMutableComposition,那么 AVPlayer 就可以正常工作。

                MPMediaItem* mediaItem = [songObj mediaItem];
                NSURL* assetUrl = [mediaItem valueForProperty:MPMediaItemPropertyAssetURL];
                
                self.mediaAsset_A = [AVAsset assetWithURL:assetUrl];
                
                [self.mediaAsset_A loadValuesAsynchronouslyForKeys:@[@"duration"] completionHandler:^{
                   
                    AVPlayerItem* playerItem = [AVPlayerItem playerItemWithAsset:self.mediaAsset_A];

                    if (self.mediaPlayer_A)
                        [self.mediaPlayer_A replaceCurrentItemWithPlayerItem:playerItem];
                    else
                        self.mediaPlayer_A = [AVPlayer playerWithPlayerItem:playerItem];
                }];

                [self.mediaPlayer_A play];

所以,我不确定为什么 AVPlayer 用 AVMutableComposition 随机发出声音。帮我解决。

标签: iosobjective-cavplayeravmutablecomposition

解决方案


推荐阅读