![](/img/trans.png)
[英]AVAudioPlayer doesn't recognize device mute button while playing video
[英]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 /任意類型的float
( self.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.