mirror of
https://github.com/yattee/yattee.git
synced 2024-12-22 21:43:41 +00:00
Update artwork of AVPlayer using URLSession
This commit is contained in:
parent
bed7e759a8
commit
f2c79a941e
@ -287,7 +287,7 @@ final class AVPlayerBackend: PlayerBackend {
|
||||
}
|
||||
|
||||
addItemDidPlayToEndTimeObserver()
|
||||
attachMetadata(to: model.playerItem!, video: video, for: stream)
|
||||
attachMetadata()
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.stream = stream
|
||||
@ -386,28 +386,43 @@ final class AVPlayerBackend: PlayerBackend {
|
||||
}
|
||||
}
|
||||
|
||||
private func attachMetadata(to item: AVPlayerItem, video: Video, for _: Stream? = nil) {
|
||||
private func attachMetadata() {
|
||||
guard let video = model.currentVideo else { return }
|
||||
|
||||
#if !os(macOS)
|
||||
var externalMetadata = [
|
||||
makeMetadataItem(.commonIdentifierTitle, value: video.title),
|
||||
makeMetadataItem(.quickTimeMetadataGenre, value: video.genre ?? ""),
|
||||
makeMetadataItem(.commonIdentifierDescription, value: video.description ?? "")
|
||||
]
|
||||
if let thumbnailData = try? Data(contentsOf: video.thumbnailURL(quality: .medium)!),
|
||||
let image = UIImage(data: thumbnailData),
|
||||
let pngData = image.pngData()
|
||||
{
|
||||
let artworkItem = makeMetadataItem(.commonIdentifierArtwork, value: pngData)
|
||||
|
||||
if let thumbnailURL = video.thumbnailURL(quality: .medium) {
|
||||
let task = URLSession.shared.dataTask(with: thumbnailURL) { [weak self] thumbnailData, _, _ in
|
||||
guard let thumbnailData = thumbnailData else { return }
|
||||
|
||||
let image = UIImage(data: thumbnailData)
|
||||
if let pngData = image?.pngData() {
|
||||
if let artworkItem = self?.makeMetadataItem(.commonIdentifierArtwork, value: pngData) {
|
||||
externalMetadata.append(artworkItem)
|
||||
}
|
||||
}
|
||||
|
||||
self?.avPlayer.currentItem?.externalMetadata = externalMetadata
|
||||
}
|
||||
|
||||
task.resume()
|
||||
}
|
||||
|
||||
item.externalMetadata = externalMetadata
|
||||
#endif
|
||||
|
||||
if let item = model.playerItem {
|
||||
#if !os(macOS)
|
||||
item.externalMetadata = externalMetadata
|
||||
#endif
|
||||
item.preferredForwardBufferDuration = 5
|
||||
|
||||
observePlayerItemStatus(item)
|
||||
}
|
||||
}
|
||||
|
||||
#if !os(macOS)
|
||||
private func makeMetadataItem(_ identifier: AVMetadataIdentifier, value: Any) -> AVMetadataItem {
|
||||
|
Loading…
Reference in New Issue
Block a user