6 changed files with 110 additions and 26 deletions
-
4kplayer.xcodeproj/project.pbxproj
-
2kplayer/core/MediaItem.swift
-
28kplayer/detail/DetailViewController.swift
-
13kplayer/detail/VideoController.swift
-
23kplayer/svideo/SVideoModel.swift
-
62kplayer/svideo/SVideoPlayer.swift
@ -0,0 +1,23 @@ |
|||||
|
// |
||||
|
// Created by Marco Schmickler on 28.11.21. |
||||
|
// Copyright (c) 2021 Marco Schmickler. All rights reserved. |
||||
|
// |
||||
|
|
||||
|
import Foundation |
||||
|
import AVKit |
||||
|
|
||||
|
class SVideoModel : ObservableObject { |
||||
|
var allItems : [MediaItem] |
||||
|
var currentSnapshot: MediaItem |
||||
|
|
||||
|
init(allItems: [MediaItem], currentSnapshot: MediaItem) { |
||||
|
self.allItems = allItems |
||||
|
self.currentSnapshot = currentSnapshot |
||||
|
} |
||||
|
|
||||
|
func currentPlayerItem() -> AVPlayerItem { |
||||
|
AVPlayerItem(asset: AVAsset(url: currentSnapshot.playerURL!)) |
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,62 @@ |
|||||
|
// |
||||
|
// Created by Marco Schmickler on 15.11.21. |
||||
|
// Copyright (c) 2021 Marco Schmickler. All rights reserved. |
||||
|
// |
||||
|
|
||||
|
import Foundation |
||||
|
import SwiftUI |
||||
|
import AVKit |
||||
|
|
||||
|
struct SVideoPlayer : View { |
||||
|
// url: URL(string: "https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8")! |
||||
|
var player = AVQueuePlayer(items: [AVPlayerItem]()) |
||||
|
var completionHandler: (() -> Void)? |
||||
|
|
||||
|
var model: SVideoModel |
||||
|
|
||||
|
var body: some View { |
||||
|
HStack { |
||||
|
Button(action: { |
||||
|
completionHandler!() |
||||
|
}, label: { |
||||
|
Text("cancel") |
||||
|
}).buttonStyle(BorderlessButtonStyle()); |
||||
|
|
||||
|
ScrollView (.horizontal, showsIndicators: false) { |
||||
|
HStack { |
||||
|
ForEach(model.allItems) { item in |
||||
|
Button(action: { |
||||
|
|
||||
|
}) { |
||||
|
if item.image != nil { |
||||
|
Image(uiImage: item.image!) |
||||
|
} |
||||
|
else { |
||||
|
Image("Kirschkeks-256x256.png") |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
}.frame(height: 100) |
||||
|
|
||||
|
Spacer() |
||||
|
} |
||||
|
VideoPlayer(player: player) |
||||
|
.onAppear() { |
||||
|
player.removeAllItems() |
||||
|
player.insert(model.currentPlayerItem(), after: nil) |
||||
|
// Start the player going, otherwise controls don't appear |
||||
|
player.play() |
||||
|
} |
||||
|
.onDisappear() { |
||||
|
// Stop the player when the view disappears |
||||
|
player.pause() |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
struct SVideoPlayer_Previews: PreviewProvider { |
||||
|
static var previews: some View { |
||||
|
SVideoPlayer(model: SVideoModel(allItems: [MediaItem](), currentSnapshot: MediaItem(name: "extern", path: "", root: "", type: ItemType.FAVROOT))) |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue