Created
June 23, 2017 00:17
-
-
Save toshi0383/72e391a0361ce5a52883b7a336960fa4 to your computer and use it in GitHub Desktop.
[wip] trying to generate thumbnail using AVAssetImageGenerator but not working.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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