我有一个.mp4文件,其中包含视频轨道和音频轨道。我只想在后台播放音轨, AVFoundation 有什么办法吗?

或其他框架?

任何想法将不胜感激

最佳答案

修订的解决方案

我认为以下链接/示例将帮助您解决问题。答案在于可以在选择播放资产之前禁用视频轨道。

How to mute a video's audio track是一个示例,您可以反转并外推有关如何禁用视频轨道的解决方案。当人们认为视频只是资产的另一个AVPlayerItemTrack时,此功能似乎是可能的:

我认为关键组件是禁用AVPlayerItemTrack,其中包含来自myTracks数组中的视频,而不是禁用音频轨道。您将需要隔离适当的条件,以将视频轨道与“音频R”和“音频L”轨道区分开。我相信这个框架将导致成功。让我知道结果如何。

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
                        change:(NSDictionary *)change context:(void *)context {

    if(context == &TracksStatusContext && [Utilities
                   getSettings].videoMuted == YES)
    {
        NSArray * myTracks = self.myPlayerItem.tracks;
        for(int i = 0; i < [myTracks count]; i++)
        {
            if([[[myTracks objectAtIndex:i] assetTrack].mediaType
                            isEqualToString:AVMediaTypeAudio] == YES)
            {
                ((AVPlayerItemTrack *)[myTracks
                            objectAtIndex:i]).enabled = NO;
            }
        }
        return;
    }

    if (context == &ItemStatusContext) {
        [self.myPlayerView.player play];
        return;
    }
    return;
}

Apple AVFoundation Reference Docs

关于objective-c - 在AVFoundation中仅在后台播放音轨,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13467407/

10-13 03:51