Ios AVPlayer&;MPMoviePlayerController可以';t静音---强制背景音频变暗
我的应用程序播放视频,偶尔会有口头队列。当应用程序什么也没说时,我希望音频(在后台,比如Spotify或iTunes)恢复到最大音量。当有音频时,我希望音频变暗 我已将音频会话设置为Ios AVPlayer&;MPMoviePlayerController可以';t静音---强制背景音频变暗,ios,swift,audio,avaudioplayer,avaudiosession,Ios,Swift,Audio,Avaudioplayer,Avaudiosession,我的应用程序播放视频,偶尔会有口头队列。当应用程序什么也没说时,我希望音频(在后台,比如Spotify或iTunes)恢复到最大音量。当有音频时,我希望音频变暗 我已将音频会话设置为DuckOthers 问题是,每当我恢复背景音频时: class func restoreBackgroundAudio() { do { try AVAudioSession.sharedInstance().setActive(false) } catch _ {
DuckOthers
问题是,每当我恢复背景音频时:
class func restoreBackgroundAudio()
{
do {
try AVAudioSession.sharedInstance().setActive(false)
} catch _ {
print("ERROR restoring background audio")
}
}
我得到这个错误:
[0x1a03a9000]AVAudioSession.mm:697:-[AVAudioSession
setActive:withOptions:error::停用已激活的音频会话
正在运行I/O。应在停用之前停止或暂停所有I/O
音频会话
问题是,正在播放的视频文件似乎有我无法静音的音频
我尝试了以下方法:
_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)
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播放视频时,即使静音,它也会停止其他应用程序的背景音乐 这是AVAudioSession manager的默认行为。我不明白的是,为什么AVaudioSessionManager在没有声音输出的情况下“杀死”背景音乐(AVPlayer是静音的)。这种行为对我来说也是个问题 这就是我在这种情况下的建议
您还可以阅读有关AVAudioSession management的内容。您需要使用此功能将您的应用程序音频与其他应用程序音频混合:
NSError *silentSwitcherror = nil;
BOOL silentSwitchSuccess = [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&silentSwitcherror];
if (silentSwitchSuccess) {
//insert video player code here to play video
}
else
{
//insert video player code here to play video
}
你不能简单地将_avPlayer.volume设置为0;行得通,没效果。即使是在第0卷背景音频DIMSY你知道,要解决这个问题,我会回到基础。分别执行这些操作,并设置音量控制;然后再尝试合并它们。我已经尝试了所有这些,我发布这个问题是希望有人能有一个更技术性的解决方案。MPVolumeView可能是答案:我经常发现自己实际上没有记录一个SO问题,因为当我输入它时;我总是在发帖前检查它的建议;不管怎样,我现在知道了。看看这个;我知道它很老了,但是的,我试过了。但你并不打算改变音频会话类型,它是一种“设置并忘记”的设计。当你尝试这样做的时候(我也这么做了),你会得到这个随机的长昏暗,然后是undim效果。该框架突然出现问题,不喜欢动态更改其会话。