【问题标题】:play only audio track in the background by AVFoundation通过 AVFoundation 在后台仅播放音轨
【发布时间】:2012-11-20 06:00:40
【问题描述】:

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

还是其他框架?

任何想法都将不胜感激

【问题讨论】:

  • 我希望我的回答是一个可以接受的答案(如果是,请点击复选标记接受答案),否则如果需要更多信息,请发表评论。
  • 感谢您的回答。如您所见,这是去年发布的,那次我更改了应用程序的结构。我还是想得到答案。但问题的重点是,如何通过 AVfoundation 只播放音轨。我认为您的答案是专注于应用级别的设置,这是一个不同的观点
  • 感谢您的反馈,我已经发布了修改后的解决方案,希望对您有用。

标签: objective-c ios avfoundation


【解决方案1】:

修改后的解决方案

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

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

我认为关键组件是禁用包含 myTracks 数组中的视频的 AVPlayerItemTrack,而不是禁用音轨。您将需要隔离适当的标准,以区分视频轨道与音频 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

【讨论】:

    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多