Мое приложение воспроизводит видео и иногда имеет словесные очереди. Когда в приложении ничего не говорится, я хочу, чтобы звук (в фоновом режиме сказал Spotify или iTunes) вернулся к полной громкости. Когда есть звук, я хочу, чтобы звук был тусклым.AVPlayer & MPMoviePlayerController не может быть отключен --- Forcing Background Audio Dim
Я установил аудиосоединение на DuckOthers
.
Проблема, когда восстановить фоновый звук:
class func restoreBackgroundAudio()
{
do {
try AVAudioSession.sharedInstance().setActive(false)
} catch _ {
print("ERROR restoring background audio")
}
}
Я получаю эту ошибку:
[0x1a03a9000] AVAudioSession.mm:697: -[AVAudioSession setActive:withOptions:error:]: Deactivating an audio session that has running I/O. All I/O should be stopped or paused prior to deactivating the audio session.
Проблема заключается в том, что видео файл, который играет, кажется, есть звук, Я не могу отключить звук.
Я попытался следующие:
Я удалил аудио дорожки из видео и пытался играть его в MPMoviePlayerController
_movie = MPMoviePlayerController() _movie.controlStyle = MPMovieControlStyle.None _movie.view.frame = _movieView.frame _movie.repeatMode = MPMovieRepeatMode.One _movie.backgroundView.backgroundColor = UIColor.whiteColor() _movie.contentURL = NSURL(fileURLWithPath: documentsDirectory.stringByAppendingString("/\(videoName)")) _movie.play()
Каждый раз, когда фильм играет свою кольцую заставляет фоновый звук уменьшаться, даже если я не устанавливаю AVAudioSession.sharedInstance().setActive(true)
Создание свой собственный AVPlayerItem и AVPlayer и вручную приглушения звуковых дорожек внутри AVPlayerItem, а также установка AVPlayer к приглушенным:
var asset = AVURLAsset(URL: _movieURL) var audioTracks = asset.tracksWithMediaType(AVMediaTypeAudio) // Set the volume of ANY potential audio track to 0 var allAudioParams:[AVMutableAudioMixInputParameters] = [] for track:AVAssetTrack in audioTracks { var audioInputParams = AVMutableAudioMixInputParameters() audioInputParams.setVolume(0.0, atTime: kCMTimeZero) audioInputParams.trackID = track.trackID allAudioParams.append(audioInputParams) } var muteTrack = AVMutableAudioMix() muteTrack.inputParameters = allAudioParams var item:AVPlayerItem = AVPlayerItem(URL: _movieURL) // Assign the muted audio track item.audioMix = muteTrack _avPlayer = AVPlayer(playerItem: item) // Also set the AVPlayer to be muted _avPlayer.muted = true let playerLayer = AVPlayerLayer(player: _avPlayer) playerLayer.frame = _movie.view.frame layer.addSublayer(playerLayer) _avPlayer.play() // ALWAYS DIMS BACKGROUND AUDIO!
Опять же, как только видео петли это всегда приглушает фоновый звук , Я попытался взломать его и сделать вызов restoreBackgroundAudio()
сразу после того, как я нажал кнопку воспроизведения, но у меня получилось плохое угасание и выключение и эффект, как при попытке восстановить фоновый звук, но активный видеопроигрыватель затушевывает как переопределения.
Если у вас есть предложения по поводу того, что еще я могу сделать, чтобы на самом деле отключить видео, которое воспроизводит или воспроизводить видео, которое не смущает фон, я был бы признателен.
Вы можете не просто установить _avPlayer.volume = 0; это работает. – user3069232
Это не действует.Даже при громкости 0 фонового звука dims – Aggressor
Вы знаете, чтобы решить эту проблему, я хотел бы вернуться к основам. Внедряйте каждую из этих штук отдельно и установите регуляторы громкости; и затем попытайтесь объединить их снова. – user3069232