gpt4 book ai didi

ios - AVPlayer 和 MPMoviePlayerController 不能被静音 --- 强制背景音频变暗

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:01:50 25 4
gpt4 key购买 nike

我的应用播放视频,偶尔会出现口头排队。当应用程序什么也没说时,我希望音频(在后台说来自 Spotify 或 iTunes)恢复到最大音量。当有音频时,我希望音频变暗。

我已将 Audio Session 设置为 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.

问题是正在播放的视频文件似乎有一段我无法静音的音频。

我尝试了以下方法:

  1. 我从视频中删除了音轨并尝试在 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)

  1. 制作我自己的 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 播放视频时,即使静音,它也会停止其他应用程序的背景音乐。

这是 AVAudioSession 管理器的默认行为。我不明白的是为什么 AVAudioSession 管理器“杀死”背景音乐,即使没有声音输出在运行(AVPlayer 静音)。这种行为对我来说也是个问题。

Here在这种情况下我建议这样做。

here您可以阅读有关 AVAudioSession 管理的信息。

关于ios - AVPlayer 和 MPMoviePlayerController 不能被静音 --- 强制背景音频变暗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36090251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com