2013-03-22 72 views
1

我有一个带有音频和mp3的视频。我想在播放mp3时播放静音(音频关闭)视频。我使用MPMoviePlayerController播放视频,并使用AVAudioPlayer播放mp3。有没有办法做到这一点?如何使用AVAudioPlayer播放MP3时静音视频

+0

@nickbona:谢谢,我试图用AVPlayer替换MPMoviePlayerController:有什么方法可以找到AVPlayer正在播放的当前视频文件名?我无法找到它。 – Caio 2013-03-23 10:14:20

+0

(视频是本地的[这是进入应用程序捆绑]:我也想避免使用元数据[以防视频可能]) – Caio 2013-03-23 10:24:09

回答

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]; 

希望它可以帮助。

0

MPMoviePlayerController似乎没有给你任何控制音量。我建议你看看AVPlayer和附带的例子。播放视频有点多,但您可以使用“静音”属性来完成您想要的功能。

+0

正确,MPMoviePlayerController不提供这样的控制。但是,由于它使用应用程序的音频会话,即使您没有将其用于实际播放,也可以通过简单地使用MPMusicPlayerController的界面来实现。 – Till 2013-03-24 00:14:17

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都使用应用音频会话(默认情况下)。

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

+0

谢谢直到我将在几个小时内尝试它。 – Caio 2013-03-25 08:45:58

+0

我确实尝试了您的解决方案,但它不起作用。 (我还想知道,如果它在工作,该解决方案将使AVAduiPlayer对象的音频播放MP3)。 – Caio 2013-03-25 15:32:35

+0

这在模拟器中不起作用 - 请确保您在设备上进行测试。 – Till 2013-03-26 00:11:00

相关问题