【问题标题】:How to mute video played in AVPlayer?如何将 AVPlayer 中播放的视频静音?
【发布时间】:2011-05-25 07:00:34
【问题描述】:

我在 AVPlayer 中播放视频,现在我需要在播放时单独静音。请建议如何在目标 C 中做。

谢谢, 苏雷什

【问题讨论】:

  • self.avPlayer.muted = true;

标签: objective-c avplayer


【解决方案1】:

从 iOS7 开始,您可以将 AVPlayer isMuted 属性设置为 true

在 Objective C 中,该属性称为muted

参考:https://developer.apple.com/documentation/avfoundation/avplayer/1387544-ismuted

【讨论】:

  • self.avPlayer.muted = true;
  • 为 Swift 3 更新
【解决方案2】:

这应该可以帮助您完成...

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 文件。您能否提出任何其他解决方案。
  • 我发现这样做会中断您可能正在通过音乐应用或 iTunes 等播放的任何音乐。有没有办法在后台继续播放音乐?
  • 太好了,只要把第一个“AVURLAsset”改成“AVAsset”就完美了。
  • 这看起来很复杂,不是吗?
【解决方案3】:

用于 Swift 4 以上使 AVPlayer 视频静音

self.player.isMuted = true

【讨论】:

  • 此属性不会使音频静音。
  • 我的情况我已经测试了上面的代码,然后在这里发布。
【解决方案4】:

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。可能是你要去那里的其他变量吗?
【解决方案5】:

player.isMuted = true 不适合我。

就我而言,我需要将视频永久静音。所以我使用下面的代码来实现这一点。

self.player.volume = 0.0

【讨论】:

    【解决方案6】:

    视频播放状态时需要设置 muted 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;
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 2019-08-20
      相关资源
      最近更新 更多