在 iOS 中使用 AVPlayer 播放音頻時,若需實現靜音功能,最簡直接的方法是調用 pause 或設置 volume = 0,而非複雜的音頻混合配置。
// 靜音:暫停播放
[player pause];
// 恢復:繼續播放
[player play];
// 靜音:音量歸零
player.volume = 0.0f;
// 恢復:設置音量(0.0 - 1.0)
player.volume = 1.0f;
AVPlayer 直接提供 volume 屬性(0.0 - 1.0)控制音量AVMutableAudioMix 用於多音軌混音、時間段音量變化、空間音頻等高級場景player.volume 即可// 場景:視頻有主音軌 + 評論音軌,用戶可選擇聽哪個
AVAsset *asset = playerItem.asset;
NSArray *audioTracks = [asset tracksWithMediaType:AVMediaTypeAudio];
NSMutableArray *paramsArray = [NSMutableArray array];
for (AVAssetTrack *track in audioTracks) {
AVMutableAudioMixInputParameters *params = [AVMutableAudioMixInputParameters audioMixInputParameters];
[params setTrackID:[track trackID]];
// 根據用戶選擇設置音量:主音軌 1.0,評論音軌 0.0(靜音)
if ([self isMainTrack:track]) {
[params setVolume:1.0 atTime:kCMTimeZero];
} else {
[params setVolume:0.0 atTime:kCMTimeZero]; // 靜音評論音軌
}
[paramsArray addObject:params];
}
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
[audioMix setInputParameters:paramsArray];
[playerItem setAudioMix:audioMix];
| 需求 | 錯誤做法 | 正確做法 |
|---|---|---|
| 簡單靜音 | 配置 AVMutableAudioMix | player.volume = 0 / [player pause] |
| 音量滑桿控制 | 每次滑動重建 AudioMix | player.volume = slider.value |
| 多音軌選擇 | player.volume 控制 | AVMutableAudioMix 按 trackID 設置 |
| 淡入淡出 | NSTimer 漸變 player.volume | AudioMix setVolumeRampFromStartVolume:toEndVolume:timeRange: |
// 靜音
player.volume = 0
// 或
player.pause()
// 音量控制綁定滑桿
@IBAction func volumeChanged(_ slider: UISlider) {
player.volume = slider.value
}