|
@@ -35,53 +35,53 @@ class NCPlayer: NSObject {
|
|
private var observerAVPlayerItemDidPlayToEndTime: Any?
|
|
private var observerAVPlayerItemDidPlayToEndTime: Any?
|
|
|
|
|
|
public var metadata: tableMetadata?
|
|
public var metadata: tableMetadata?
|
|
- public var player: AVPlayer?
|
|
|
|
public var videoLayer: AVPlayerLayer?
|
|
public var videoLayer: AVPlayerLayer?
|
|
|
|
|
|
init(url: URL, imageVideoContainer: imageVideoContainerView?, playerToolBar: NCPlayerToolBar?, metadata: tableMetadata, detailView: NCViewerMediaDetailView?) {
|
|
init(url: URL, imageVideoContainer: imageVideoContainerView?, playerToolBar: NCPlayerToolBar?, metadata: tableMetadata, detailView: NCViewerMediaDetailView?) {
|
|
super.init()
|
|
super.init()
|
|
-
|
|
|
|
- print("Play URL: \(url)")
|
|
|
|
|
|
+
|
|
var timeSeek: CMTime = .zero
|
|
var timeSeek: CMTime = .zero
|
|
-
|
|
|
|
- self.player = AVPlayer(url: url)
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ print("Play URL: \(url)")
|
|
|
|
+ appDelegate.player?.pause()
|
|
|
|
+ appDelegate.player = AVPlayer(url: url)
|
|
|
|
+
|
|
self.playerToolBar = playerToolBar
|
|
self.playerToolBar = playerToolBar
|
|
self.metadata = metadata
|
|
self.metadata = metadata
|
|
self.detailView = detailView
|
|
self.detailView = detailView
|
|
|
|
|
|
if metadata.livePhoto {
|
|
if metadata.livePhoto {
|
|
- self.player?.isMuted = false
|
|
|
|
|
|
+ appDelegate.player?.isMuted = false
|
|
} else if metadata.classFile == NCCommunicationCommon.typeClassFile.audio.rawValue {
|
|
} else if metadata.classFile == NCCommunicationCommon.typeClassFile.audio.rawValue {
|
|
- self.player?.isMuted = CCUtility.getAudioMute()
|
|
|
|
|
|
+ appDelegate.player?.isMuted = CCUtility.getAudioMute()
|
|
} else {
|
|
} else {
|
|
- self.player?.isMuted = CCUtility.getAudioMute()
|
|
|
|
|
|
+ appDelegate.player?.isMuted = CCUtility.getAudioMute()
|
|
if let time = NCManageDatabase.shared.getVideoTime(metadata: metadata) {
|
|
if let time = NCManageDatabase.shared.getVideoTime(metadata: metadata) {
|
|
timeSeek = time
|
|
timeSeek = time
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- self.player?.seek(to: timeSeek)
|
|
|
|
|
|
+ appDelegate.player?.seek(to: timeSeek)
|
|
|
|
|
|
// At end go back to start & show toolbar
|
|
// At end go back to start & show toolbar
|
|
- observerAVPlayerItemDidPlayToEndTime = NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: self.player?.currentItem, queue: .main) { (notification) in
|
|
|
|
- if let item = notification.object as? AVPlayerItem, let currentItem = self.player?.currentItem, item == currentItem {
|
|
|
|
|
|
+ observerAVPlayerItemDidPlayToEndTime = NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: appDelegate.player?.currentItem, queue: .main) { (notification) in
|
|
|
|
+ if let item = notification.object as? AVPlayerItem, let currentItem = self.appDelegate.player?.currentItem, item == currentItem {
|
|
self.videoSeek(time: .zero)
|
|
self.videoSeek(time: .zero)
|
|
self.playerToolBar?.showToolBar(metadata: metadata, detailView: nil)
|
|
self.playerToolBar?.showToolBar(metadata: metadata, detailView: nil)
|
|
NCKTVHTTPCache.shared.saveCache(metadata: metadata)
|
|
NCKTVHTTPCache.shared.saveCache(metadata: metadata)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- self.player?.currentItem?.asset.loadValuesAsynchronously(forKeys: ["duration", "playable"], completionHandler: {
|
|
|
|
- if let durationTime: CMTime = (self.player?.currentItem?.asset.duration) {
|
|
|
|
|
|
+ appDelegate.player?.currentItem?.asset.loadValuesAsynchronously(forKeys: ["duration", "playable"], completionHandler: {
|
|
|
|
+ if let durationTime: CMTime = (self.appDelegate.player?.currentItem?.asset.duration) {
|
|
var error: NSError? = nil
|
|
var error: NSError? = nil
|
|
- let status = self.player?.currentItem?.asset.statusOfValue(forKey: "playable", error: &error)
|
|
|
|
|
|
+ let status = self.appDelegate.player?.currentItem?.asset.statusOfValue(forKey: "playable", error: &error)
|
|
switch status {
|
|
switch status {
|
|
case .loaded:
|
|
case .loaded:
|
|
DispatchQueue.main.async {
|
|
DispatchQueue.main.async {
|
|
if let imageVideoContainer = imageVideoContainer {
|
|
if let imageVideoContainer = imageVideoContainer {
|
|
|
|
|
|
self.imageVideoContainer = imageVideoContainer
|
|
self.imageVideoContainer = imageVideoContainer
|
|
- self.videoLayer = AVPlayerLayer(player: self.player)
|
|
|
|
|
|
+ self.videoLayer = AVPlayerLayer(player: self.appDelegate.player)
|
|
self.videoLayer!.frame = imageVideoContainer.bounds
|
|
self.videoLayer!.frame = imageVideoContainer.bounds
|
|
self.videoLayer!.videoGravity = .resizeAspect
|
|
self.videoLayer!.videoGravity = .resizeAspect
|
|
|
|
|
|
@@ -137,7 +137,7 @@ class NCPlayer: NSObject {
|
|
@objc func applicationDidEnterBackground(_ notification: NSNotification) {
|
|
@objc func applicationDidEnterBackground(_ notification: NSNotification) {
|
|
|
|
|
|
if metadata?.classFile == NCCommunicationCommon.typeClassFile.video.rawValue {
|
|
if metadata?.classFile == NCCommunicationCommon.typeClassFile.video.rawValue {
|
|
- self.player?.pause()
|
|
|
|
|
|
+ appDelegate.player?.pause()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -150,12 +150,12 @@ class NCPlayer: NSObject {
|
|
|
|
|
|
func videoPlay() {
|
|
func videoPlay() {
|
|
|
|
|
|
- self.player?.play()
|
|
|
|
|
|
+ appDelegate.player?.play()
|
|
}
|
|
}
|
|
|
|
|
|
func videoPause() {
|
|
func videoPause() {
|
|
|
|
|
|
- self.player?.pause()
|
|
|
|
|
|
+ appDelegate.player?.pause()
|
|
}
|
|
}
|
|
|
|
|
|
func saveTime(_ time: CMTime) {
|
|
func saveTime(_ time: CMTime) {
|
|
@@ -168,7 +168,7 @@ class NCPlayer: NSObject {
|
|
|
|
|
|
func videoSeek(time: CMTime) {
|
|
func videoSeek(time: CMTime) {
|
|
|
|
|
|
- self.player?.seek(to: time)
|
|
|
|
|
|
+ appDelegate.player?.seek(to: time)
|
|
self.saveTime(time)
|
|
self.saveTime(time)
|
|
}
|
|
}
|
|
|
|
|
|
@@ -183,7 +183,6 @@ class NCPlayer: NSObject {
|
|
|
|
|
|
self.videoLayer?.removeFromSuperlayer()
|
|
self.videoLayer?.removeFromSuperlayer()
|
|
|
|
|
|
- self.player = nil
|
|
|
|
self.videoLayer = nil
|
|
self.videoLayer = nil
|
|
self.observerAVPlayerItemDidPlayToEndTime = nil
|
|
self.observerAVPlayerItemDidPlayToEndTime = nil
|
|
self.imageVideoContainer = nil
|
|
self.imageVideoContainer = nil
|
|
@@ -192,14 +191,14 @@ class NCPlayer: NSObject {
|
|
}
|
|
}
|
|
|
|
|
|
func generatorImagePreview() {
|
|
func generatorImagePreview() {
|
|
- guard let time = self.player?.currentTime() else { return }
|
|
|
|
|
|
+ guard let time = appDelegate.player?.currentTime() else { return }
|
|
guard let metadata = self.metadata else { return }
|
|
guard let metadata = self.metadata else { return }
|
|
if metadata.livePhoto { return }
|
|
if metadata.livePhoto { return }
|
|
if metadata.classFile == NCCommunicationCommon.typeClassFile.audio.rawValue { return }
|
|
if metadata.classFile == NCCommunicationCommon.typeClassFile.audio.rawValue { return }
|
|
|
|
|
|
var image: UIImage?
|
|
var image: UIImage?
|
|
|
|
|
|
- if let asset = self.player?.currentItem?.asset {
|
|
|
|
|
|
+ if let asset = appDelegate.player?.currentItem?.asset {
|
|
|
|
|
|
do {
|
|
do {
|
|
let fileNamePreviewLocalPath = CCUtility.getDirectoryProviderStoragePreviewOcId(metadata.ocId, etag: metadata.etag)!
|
|
let fileNamePreviewLocalPath = CCUtility.getDirectoryProviderStoragePreviewOcId(metadata.ocId, etag: metadata.etag)!
|