使用 AVPlayer 时防止背景音频静音
Posted
技术标签:
【中文标题】使用 AVPlayer 时防止背景音频静音【英文标题】:Prevent muting of background audio when using AVPlayer 【发布时间】:2016-02-19 01:15:37 【问题描述】:我正在使用 AVPlayer 的实例播放视频,我希望能够在播放视频时继续听背景音乐。
如果任何后台应用程序正在播放音乐,那么每当我在 AVPlayer 上调用 play
时,音乐都会静音。如何防止背景音频被静音?
以下是我创建和启动 AVPlayer 的方法:
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:videoURL options:nil];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
[self.layer addSublayer:playerLayer];
// mutes all background audio
[player play];
【问题讨论】:
***.com/a/14122449/4475605 那行得通。如果问题与 AVPlayer 无关,则很难找到 我很清楚该去哪里,因为我遇到了同样的问题。很高兴你被摆平了。 【参考方案1】:我能够通过在 AppDelegate.swift 类中执行以下操作来解决此问题:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
// Override point for customization after application launch.
do
try AVAudiosession.sharedInstance().setCategory(AVAudioSessionCategorySoloAmbient)
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
catch
return true
我还证实,如果我开始通过 iTunes 播放另一首歌曲,它会中断我的后台播放,这是我想要的行为。
【讨论】:
这是我一直在寻找的答案。我可以在我的应用程序中播放带有视频和音频的 Spotify 音乐。但是我更喜欢使用 AVAudioSessionCategoryOptionDuckOthers 而不是 AVAudioSessionCategoryPlayback。【参考方案2】:不幸的是,Ron Allan 的回答对我不起作用,但它为我指明了正确的方向。我需要使用的是AVAudioSessionCategoryAmbient
类别。
这对我有用(在 AppDelegate.swift 中):
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
// Don't mute the audio playback
do
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
catch
return true
【讨论】:
以上是关于使用 AVPlayer 时防止背景音频静音的主要内容,如果未能解决你的问题,请参考以下文章
当铃声静音时,如何防止我的应用程序(使用 AVPlayer)静音?
AVAudioPlayer 在播放视频时无法识别设备静音按钮
iOS: ios视频播放(MPMediaPlayerController,AVPlayer,AVPlayerViewcontrollerffmpeg-AVPlayer)