Skip to content

Instantly share code, notes, and snippets.

@toshi0383
Created June 23, 2017 00:17
Show Gist options
  • Save toshi0383/72e391a0361ce5a52883b7a336960fa4 to your computer and use it in GitHub Desktop.
Save toshi0383/72e391a0361ce5a52883b7a336960fa4 to your computer and use it in GitHub Desktop.
[wip] trying to generate thumbnail using AVAssetImageGenerator but not working.
//
// ViewController.swift
// tvOS11HLSSample
//
// Created by 鈴木 俊裕 on 2017/06/06.
// Copyright © 2017 Toshihiro Suzuki. All rights reserved.
//
import UIKit
import AVKit
class ViewController: AVPlayerViewController {
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.isNavigationBarHidden = true
player = AVPlayer(url: URL(string: "http://172.30.20.88/fps-experiment/prog_index.m3u8")!)
player!.play()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.isNavigationBarHidden = false
}
}
class PlayerView: UIView {
override class var layerClass: AnyClass {
return AVPlayerLayer.self
}
var player:AVPlayer {
get {
let layer: AVPlayerLayer = self.layer as! AVPlayerLayer
return layer.player!
}
set {
let layer: AVPlayerLayer = self.layer as! AVPlayerLayer
layer.player = newValue
}
}
}
class CustomViewController: UIViewController {
@IBOutlet var durationLabel: UILabel!
@IBOutlet var progressLabel: UILabel!
@IBOutlet var slider: UISlider!
@IBOutlet private weak var playerView: PlayerView!
private var generator: AVAssetImageGenerator!
@IBAction func close(_ sender: Any) {
dismiss(animated: true, completion: nil)
}
override func viewDidLoad() {
super.viewDidLoad()
navigationController?.isNavigationBarHidden = true
let asset = AVURLAsset(url: URL(string:"http://172.30.20.88/fps-experiment/prog_index.m3u8")!)
asset.loadValuesAsynchronously(forKeys: ["playable"]) {
if asset.isPlayable {
DispatchQueue.main.async {
let item = AVPlayerItem(asset: asset)
self.playerView.player = AVPlayer(playerItem: item)
self.playerView.player.play()
let timescale = item.currentTime().timescale
// let times: [NSValue] = (0..<Int(asset.duration.seconds)).map { NSValue(time: CMTime(seconds: Double($0), preferredTimescale: timescale)) }
let times = [NSValue(time: CMTime.init(seconds: 50, preferredTimescale: item.currentTime().timescale))]
self.generator = AVAssetImageGenerator(asset: asset)
self.generator.maximumSize = self.view.frame.size
self.generator.generateCGImagesAsynchronously(forTimes: times) { (requestedTime, image, actualTime, result, error) in
print(requestedTime)
print(image)
print(actualTime)
print(result)
print(error)
}
}
}
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.isNavigationBarHidden = false
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment