如何使用AVAudioPlayer播放mp3时静音视频

时间:2013-03-22 17:56:02

标签: iphone ios mpmovieplayercontroller avaudioplayer

我有一个带有音频和mp3的视频。我想在播放mp3时播放静音(音频关闭)视频。我使用MPMoviePlayerController播放视频,AVAudioPlayer播放mp3。有办法吗?

3 个答案:

答案 0 :(得分:0)

MPMoviePlayerController似乎没有给你任何控制音量。我建议你看一下AVPlayer和随附的例子。播放视频要多做一些工作,但你可以使用“静音”属性来完成你想要的。

答案 1 :(得分:0)

您实际上可以使用MPMusicPlayerController来实现您的目标。

- (void)muteVidepPlayer:(BOOL)muteFlag
{
    MPMusicPlayerController *musicPlayer = [MPMusicPlayerController applicationMusicPlayer];
    if (muteFlag)
    {
        self.lastVolume = musicPlayer.volume; 
        [musicPlayer setVolume:0.0f];
    }
    else
    {
        [musicPlayer setVolume:self.lastVolume];
    }
}

它的作用是,它使用MPMusicPlayerController的实例来调整音量。不要太困惑,这也会有效地调整MPMoviePlayerController实例的音量。这是有效的,因为MPMoviePlayerController和MPMusicPlayerController都使用应用程序音频会话(默认情况下)。

为了确保您能够将卷重置为以前的设置,此方法会尝试将该值存储在播放控制器/ viewcontroller的floatself.lastVolume)类型的实例变量中/无论如何。

答案 2 :(得分:0)

我选择回答我自己的问题:@nickbona答案很好,但它没有简单的示例代码。 所以解决方案是使用AVPlayer而不是MPMoviePlayerController。

所以在这里我有一个简单的源代码示例,如果其他人需要它:

//init player
AVAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"yourfile" ofType:@"mp4"]] options:nil];
AVPlayerItem *anItem = [AVPlayerItem playerItemWithAsset:asset];
AVPlayer *myPlayerController = [AVPlayer playerWithPlayerItem:anItem];

//disable audio (this is the version when you have more than one video in the playlist: i write this version so it should be more useful)
NSArray *playerTracks = [asset tracksWithMediaType:AVMediaTypeAudio];
NSMutableArray *playerParams = [NSMutableArray array];
for (AVAssetTrack *track in playerTracks) {
    AVMutableAudioMixInputParameters *audioInputParams =    [AVMutableAudioMixInputParameters audioMixInputParameters];
    [audioInputParams setVolume:0.0 atTime:kCMTimeZero];
    [audioInputParams setTrackID:[track trackID]];
    [playerParams addObject:audioInputParams];
}
AVMutableAudioMix *muteAudioMix = [AVMutableAudioMix audioMix];
[muteAudioMix setInputParameters:playerParams];
[[myPlayerController currentItem] setAudioMix:muteAudioMix];

希望它可以提供帮助。