4 changed files with 101 additions and 1 deletions
-
4kplayer.xcodeproj/project.pbxproj
-
38kplayer/core/NetworkManager.swift
-
54kplayer/video/SVideoLoopPlayer.swift
-
6kplayer/video/SVideoPlayer.swift
@ -0,0 +1,54 @@ |
|||
// |
|||
// Created by Marco Schmickler on 03.04.22. |
|||
// Copyright (c) 2022 Marco Schmickler. All rights reserved. |
|||
// |
|||
|
|||
import Foundation |
|||
import SwiftUI |
|||
import AVKit |
|||
|
|||
struct SVideoLoopPlayer : View { |
|||
var completionHandler: () -> Void |
|||
var model : SVideoModel |
|||
|
|||
var player = AVQueuePlayer(items: [AVPlayerItem]()) |
|||
var playerLooper: AVPlayerLooper |
|||
|
|||
init(completionHandler: @escaping () -> Void, baseModel: SVideoModel) { |
|||
self.completionHandler = completionHandler |
|||
self.model = SVideoModel(allItems: [], currentSnapshot: baseModel.currentSnapshot, baseItem: baseModel.baseItem) |
|||
|
|||
var c = AVMutableComposition() |
|||
let tr = c.addMutableTrack(withMediaType: AVMediaType.video, preferredTrackID: Int32(kCMPersistentTrackID_Invalid)) |
|||
|
|||
var currentTime = CMTime.zero |
|||
|
|||
do { |
|||
var urlAsset = AVURLAsset(url: baseModel.currentSnapshot.playerURL!) |
|||
|
|||
let range = CMTimeRangeMake(start: CMTime(seconds: baseModel.currentSnapshot.time, preferredTimescale: CMTimeScale(10000)), duration: CMTime(seconds: baseModel.currentSnapshot.length, preferredTimescale: CMTimeScale(10000))) |
|||
try tr!.insertTimeRange(range, of: urlAsset.tracks(withMediaType: AVMediaType.video)[0], at: CMTime.zero) |
|||
} catch { |
|||
print(error) |
|||
} |
|||
|
|||
let item = AVPlayerItem(asset: c) |
|||
player.insert(item, after: nil) |
|||
self.playerLooper = AVPlayerLooper(player: player, templateItem: item) |
|||
} |
|||
|
|||
var body: some View { |
|||
VideoPlayerView(model: model, |
|||
player: player) |
|||
.scaleEffect(model.scale) |
|||
.offset(model.dragOffset) |
|||
.onTapGesture(count: 2) { |
|||
completionHandler() |
|||
}.onAppear() { |
|||
player.play() |
|||
} |
|||
.onDisappear() { |
|||
player.pause() |
|||
} |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue