AutorÃa | Ultima modificación | Ver Log |
//// VideoPlayerView.swift// twogetskills//// Created by Efrain Yanez Recanatini on 4/24/22.//import Foundationimport SwiftUIimport AVKitstruct VideoPlayerView: View {@Environment(\.presentationMode)var presentationMode: Binding//@State private var backToGallery : Bool = false@State private var timerActive : Bool = false@State private var isCompleted : Bool = falseprivate let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()private var playerItem : AVPlayerItemprivate var player : AVPlayerprivate var slideModel : SlideModelprivate var position : Intprivate let preference = Preference.sharedInstanceprivate let colorBackgroundTopic = UIColor(hex: Config.COLOR_BACKGROUND_TOPIC)private let colorAppTextView = UIColor(hex: Config.COLOR_APP_TEXT_VIEW_TITLE)private let colorAppBackground = UIColor(hex: Config.COLOR_APP_BAR)//@State private var goToGallery : Bool = falseinit(slideModel : SlideModel, position : Int){print("video player init")self.slideModel = slideModelself.position = position/*let sURL = "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"let videoUrl = URL(string: sURL)*/let videoUrl = URL(string: slideModel.file)let headerSecurity = HeaderSecurity()let headers: [String: String] = [Constants.HTTP_HEADER_ACCEPT: Constants.HTTP_HEADER_ACCEPT_VALUE,Constants.HTTP_HEADER_SECURITY_RAND: String(headerSecurity.rand),Constants.HTTP_HEADER_SECURITY_TOKEN: preference.deviceUuid,Constants.HTTP_HEADER_SECURITY_CREATED: String(headerSecurity.created) ,Constants.HTTP_HEADER_SECURITY_SECRET: headerSecurity.secret,]let assets = AVURLAsset(url: videoUrl!, options: ["AVURLAssetHTTPHeaderFieldsKey": headers])playerItem = AVPlayerItem(asset: assets)/*let assets = AVURLAsset(url: videoUrl!)playerItem = AVPlayerItem(asset: assets)*/let newTime : CMTime = CMTimeMakeWithSeconds(0, preferredTimescale:1)player = AVPlayer(playerItem: playerItem)player.seek(to: newTime)self.timerActive = true}var body: some View {//GeometryReader { geometry inVStack {/*NavigationLink("", destination: GridGalleryView(capsuleUuid: self.slideModel.capsuleUuid, position: self.position), isActive: self.$goToGallery).frame( height: 0)*/VideoPlayer(player: player).onAppear() {player.play()}.onDisappear() {player.pause()}.onChange(of: player.currentTime(), perform: { value inprint("onchange")if let currentItem = player.currentItem {let duration = currentItem.asset.durationprint("duration : \(duration)")print("value : \(value)")}}).onReceive(timer, perform: { _ inprint("onReceive")let duration = CMTimeGetSeconds(playerItem.asset.duration)let currentTime = CMTimeGetSeconds(playerItem.currentTime())let diference = duration - currentTimeif diference < 10 {self.isCompleted = true;self.timer.upstream.connect().cancel()timerActive = false}})//.frame(width: geometry.size.width, height: geometry.size.height, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)}.background(Color(colorBackgroundTopic ?? .gray)).navigationBarBackButtonHidden(true).navigationBarTitleDisplayMode(.inline).navigationTitle(self.slideModel.name).toolbar {ToolbarItem(placement: .navigationBarLeading) {Button(action: {let dataService = DataService()if self.isCompleted {dataService.completeSlide(slide: slideModel)} else {dataService.incompleteSlide(slide: slideModel)}if self.timerActive {self.timer.upstream.connect().cancel()}//self.goToGallery = trueself.presentationMode.wrappedValue.dismiss()}) {HStack {Image(systemName: "chevron.backward").aspectRatio(contentMode: .fit).foregroundColor(Color( colorAppTextView ?? .systemBlue)).background(Color(colorAppBackground ?? .systemBlue))}}}}//}}}struct VideoPlayerView_Previews: PreviewProvider {static var previews: some View {let slideModel = SlideModel(uuid : "S123",topicUuid : "T123",capsuleUuid : "C123",quizUuid : "",name : "Video de prueba",description : "",type: Constants.SLIDE_TYPE_VIDEO,file : "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4",background : "",position : 1,completed : 0)VideoPlayerView(slideModel: slideModel, position : 0)}}