如何在AVPlayer中静音播放的视频?

34

我正在使用AVPlayer播放视频,现在需要在播放时仅静音音频。请建议如何在objective C中实现。

谢谢, Suresh


1
self.avPlayer.muted = true; - BennyTheNerd
6个回答

34

self.avPlayer.muted = true; - BennyTheNerd
更新至 Swift 3 - bcattle

12

如何使用 Swift 4 及以上版本使 AVPlayer 视频静音

self.player.isMuted = true

2
此属性不会静音音频。 - AsifHabib
在我的情况下,我已经测试了上面的代码,然后在这里发布。 - Hardik Thakkar

10

这应该能帮到你…

AVURLAsset *asset = [[avPlayer currentItem] asset];
NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio];

// Mute all the audio tracks
NSMutableArray *allAudioParams = [NSMutableArray array];
for (AVAssetTrack *track in audioTracks) {
    AVMutableAudioMixInputParameters *audioInputParams =    [AVMutableAudioMixInputParameters audioMixInputParameters];
    [audioInputParams setVolume:0.0 atTime:kCMTimeZero];
    [audioInputParams setTrackID:[track trackID]];
    [allAudioParams addObject:audioInputParams];
}
AVMutableAudioMix *audioZeroMix = [AVMutableAudioMix audioMix];
[audioZeroMix setInputParameters:allAudioParams];

[[avPlayer currentItem] setAudioMix:audioZeroMix];

我已经尝试了这种方法,但在模拟器中无法运行。我正在使用AVPlayer播放.mov文件。你能否提供其他解决方案? - Suresh
1
我发现这种做法会打断你可能正在通过音乐应用程序或iTunes等播放的任何音乐。有没有一种方法可以在后台继续播放音乐? - fulvio
太好了,只需要将第一个“AVURLAsset”更改为“AVAsset”,就完美了。 - Eran Talmor
这看起来很复杂,不是吗? - Frederic Adda

8

SWIFT 2.0和SWIFT 3.0(截止2017年7月5日)

对于那些好奇Swift的人来说,它只是:

self.avPlayer.muted = true

最简单的Objective-C方法:

self.avPlayer.muted = true;

抱歉,Vineesh,这对你没起作用。但这在我的Swift 3.0和3.1上是有效的。可能是你有其他变量的问题吗? - BennyTheNerd

3

player.isMuted = true 对我不起作用。

在我的情况下,我需要视频永久静音。因此,我使用以下代码来实现这一点。

player.muted(true);

最初的回答:

self.player.volume = 0.0

0

在视频播放状态下,需要将静音设置为false。

添加监听器:

[itemPlayer addObserver:self
             forKeyPath:kStatusKey
                options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew
                context:@"AVPlayerStatus"];

代码:

-(void)observeValueForKeyPath:(NSString *)path ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if (context == @"AVPlayerStatus") {
        AVPlayerStatus status = [[change objectForKey:NSKeyValueChangeNewKey] integerValue];
        switch (status) {
            case AVPlayerStatusReadyToPlay: {
                if (isMuted) {
                    layerPlayer.player.muted = true;
                }
            }
            default:
                break;
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接