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