Tom*_*out 5 avfoundation ios avaudiosession avplayer airplay
我有一个通过 AVPlayerViewController 播放的主视频,应该通过 Airplay 播放到 AppleTV 等。这就是我设置视图控制器的方式:
let player = AVPlayer(url: url)
let controller = AVPlayerViewController()
controller.player = player
Run Code Online (Sandbox Code Playgroud)
这是 AudioSession 的设置:
try session.setCategory(.playback)
try session.setActive(true)
Run Code Online (Sandbox Code Playgroud)
添加了音频、AirPlay 和画中画的后台模式功能。
然后我还有另一个视频,该视频永远不能通过 AirPlay 播放。在实际的应用程序中,当 AVPlayerLayer 中的屏幕被访问时,该视频将自动播放。但为了简单起见,我在本例中使用另一个 AVPlayerViewController。我看过关于 Airplay 2 的 WWDC,他们建议player.allowsExternalPlayback = false针对这些具体情况进行设置。
这就是我设置不应播放 AirPlay 的播放器的方法:
let player = AVPlayer(url: url)
player.allowsExternalPlayback = false
let controller = AVPlayerViewController()
controller.player = player
Run Code Online (Sandbox Code Playgroud)
这种作品。但是,如果您:
视频正在设备上播放,但音频正在外部设备上播放。
我尝试过的:
AudioSession与try session.setActive(false)try session.setCategory(.playAndRecord, options: [.defaultToSpeaker]).playAndRecord和session.overrideOutputAudioPort(.speaker)没有运气。
我能够将会话更改为multiRoute将与 Airplay 断开连接的类别,但它也会与任何耳机断开连接,并且由于某种原因禁用音量控制。
我还应该补充一点,它会播放音频,而不管player.isMuted = true.
我在这里准备了一个示例项目: https: //github.com/tkohout/AirplayTest。在第三个选项卡上还有一个“设置 VC”,您可以在其中设置“音频会话”设置。
有人遇到类似的问题吗?这是可以解决的还是只是 AirPlay 的一个错误/功能?我正在使用 iOS 15 的设备上进行测试。
非常感谢托马斯·科胡特
对于面临同样问题的任何人 - 我们找到了部分解决方法。当第二个播放器要自动播放时,我们首先检查airplay是否未连接,代码如下:
var isAirplayActive: Bool {
let route = AVAudioSession.sharedInstance().currentRoute
return route.outputs.contains { $0.portType == .airPlay }
}
Run Code Online (Sandbox Code Playgroud)
这样,如果没有用户交互,airplay 播放至少不会开始。
| 归档时间: |
|
| 查看次数: |
647 次 |
| 最近记录: |