我正在尝试在播放 HLS 流时缓存它。我正在关注有关此的 Apple 文档(播放离线资源部分):
我已经实现了以下方法 - 这应该使我的 HLS 流在播放时下载:
func downloadAndPlayAsset(_ asset: AVURLAsset) {
// Create new AVAssetDownloadTask for the desired asset
// Passing a nil options value indicates the highest available bitrate should be downloaded
let downloadTask = downloadSession.makeAssetDownloadTask(asset: asset,
assetTitle: assetTitle,
assetArtworkData: nil,
options: nil)!
// Start task
downloadTask.resume()
// Create standard playback items and begin playback
let playerItem = AVPlayerItem(asset: downloadTask.urlAsset)
player = AVPlayer(playerItem: playerItem)
player.play()
}
Run Code Online (Sandbox Code Playgroud)
问题是它只是不下载视频,只播放流。我还实现了代表,但他们都没有被调用:
func urlSession(_ session: URLSession, assetDownloadTask: AVAssetDownloadTask, didLoad …Run Code Online (Sandbox Code Playgroud) 我有一个通过 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和 …