Quick Start
Sample Codes
Run SDK on MTKView
import MetalKit
import AVKit
import VideoToolbox
import GDFSR
class VideoMetalView: MTKView {
private var videoSR: GDFSRVideo?
private var player: AVPlayer?
deinit {
stop()
}
func play(stream: URL) throws {
let item: AVPlayerItem = AVPlayerItem(url: stream)
let maxResSize: CGSize = CGSize(width: 854, height: 480)
let scale: Int = 2
device = device ?? MTLCreateSystemDefaultDevice()
framebufferOnly = false
layer.isOpaque = true
self.player = AVPlayer(playerItem: item)
self.videoSR = GDFSRVideo(metalView: self, videoItem: item, maxResSize: maxResSize, scale: scale, completionHandler: {
// now video can be played
self.play()
})
}
func play() { player?.play() }
func pause() { player?.pause() }
func stop() {
player?.rate = 0
videoSR?.release()
videoSR = null
player = null
}
}
Run SDK on VideoViewController
import Foundation
import UIKit
import OSLog
import GDFSR
class VideoViewController: UIViewController, VideoMetalViewDelegate {
@IBOutlet weak var videoView: VideoMetalView!
@IBOutlet weak var videoControls: UIStackView!
@IBOutlet weak var sliProgress: UISlider!
@IBOutlet weak var lblElapsed: UILabel!
@IBOutlet weak var lblRemain: UILabel!
@IBOutlet weak var closeControl: UIStackView!
@IBOutlet weak var btnPlay: UIButton!
@IBOutlet weak var txtFileName: UITextField!
@IBOutlet weak var segBtns: UISegmentedControl!
@IBOutlet weak var btnInfo: UIButton!
@IBOutlet weak var btnRepeat: UIButton!
@IBOutlet weak var noSDKText: UILabel!
var fileItem: FileItem!
private var showState = false
private var isAuto = false
private var isPlaying = true
private let playImage = UIImage(systemName: "play.fill")
private let pauseImage = UIImage(systemName: "pause.fill")
private var showInfo = false
private var repeatVideo = false
private var prevPoint: CGPoint = .zero
override func viewDidLoad() {
super.viewDidLoad()
videoView?.videoDelegate = self
// set video file name
txtFileName.text = fileItem.name
showControls(true)
// examplevideo
String mediaPath = "https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/360/Big_Buck_Bunny_360_10s_10MB.mp4"
// video play
DispatchQueue.main.async {
if let vv = self.videoView {
do {
self.btnPlay?.setBackgroundImage(self.pauseImage, for: .normal)
try vv.play(stream: URL(string:String mediaPath)!)
print("[VideoViewControrller] play")
} catch {
GDFLog.error("\(error)")
self.onClose(self)
}
} else {
self.onClose(self)
}
}
}