Skip to content

Instantly share code, notes, and snippets.

@gbrl0chn
Last active January 8, 2017 10:40
Show Gist options
  • Save gbrl0chn/50a37038a34e96e7f0b58620721fcc51 to your computer and use it in GitHub Desktop.
Save gbrl0chn/50a37038a34e96e7f0b58620721fcc51 to your computer and use it in GitHub Desktop.
import UIKit
class ViewController: UIViewController, URLSessionDataDelegate {
var cameraImageView: UIImageView!
var session: URLSession!
var request: URLRequest!
var imageData = Data()
let source = "http://cctvn01.freeway.gov.tw/vStream.php?pm=164,A44,19"
override func viewDidLoad() {
super.viewDidLoad()
cameraImageView = UIImageView()
cameraImageView.contentMode = .scaleAspectFit
cameraImageView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(cameraImageView)
setupConstraints()
session = URLSession(configuration: URLSessionConfiguration.default,
delegate: self,
delegateQueue: nil)
request = URLRequest(url: URL(string: source)!)
start(with: request)
}
func setupConstraints() {
cameraImageView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
cameraImageView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
cameraImageView.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.5).isActive = true
view.trailingAnchor.constraint(equalTo: cameraImageView.trailingAnchor).isActive = true
}
func start(with request: URLRequest) {
let dataTask = session.dataTask(with: request)
dataTask.resume()
}
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
let startMarker = Data(bytes: [0xff, 0xd8])
let startMarkerRange = data.range(of: startMarker, options: .anchored, in: data.startIndex..<data.endIndex)
if imageData.isEmpty && startMarkerRange == nil {
dataTask.cancel()
return
}
guard let range = startMarkerRange, !imageData.isEmpty else {
imageData.append(data)
return
}
let rest = data.subdata(in: data.startIndex..<range.lowerBound)
imageData.append(rest)
let image = UIImage(data: imageData)
imageData = data.subdata(in: range.lowerBound..<data.endIndex)
DispatchQueue.main.async {
self.cameraImageView.image = image
}
}
func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
if error == nil {
start(with: request)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment