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