簡體   English   中英

如何使用AVAudioPlayer播放mp3時使視頻靜音

[英]How to mute video while playing an mp3 with AVAudioPlayer

我有帶音頻的視頻和mp3。 我想在播放mp3時以靜音方式播放視頻(關閉音頻)。 我正在使用MPMoviePlayerController播放視頻,並使用AVAudioPlayer播放mp3。 有辦法嗎?

MPMoviePlayerController似乎沒有提供對音量的任何控制。 我建議您看看AVPlayer及其附帶的示例。 播放視頻需要做更多的工作,但是您可以使用“ muted”屬性來完全按照自己的意願進行操作。

實際上,您可以使用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 ,是因為MPMoviePlayerController和MPMusicPlayerController都使用應用程序音頻會話(默認情況下)。

為了確保您能夠將音量重置為以前的設置,此方法嘗試將該值存儲在播放控制器/ viewcontroller /任意類型的floatself.lastVolume )類型的實例變量中。

我選擇回答自己的問題:@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];

希望能有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM