-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathStream.swift
More file actions
68 lines (47 loc) · 2.3 KB
/
Stream.swift
File metadata and controls
68 lines (47 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//
// StreamHandler.swift
// Streamy
//
// Created by Nick Jones on 19/05/2015.
// Copyright (c) 2015 Nick Jones. All rights reserved.
//
import Foundation
import UIKit
class Stream: UIView, NSURLSessionDataDelegate {
let dataMarker: NSData = NSData(bytes: [0xFF, 0xD9] as [UInt8], length: 2)
var streamPath: String!
var streamName: String!
var recievedData: NSMutableData = NSMutableData()
var videoDataTask: NSURLSessionDataTask!
var streamImageViewer = UIImageView()
var connectionLive: Bool = true
var reconnectAvailable: Bool = false
func getVideoStream () {
var streamURL: NSURL = NSURL(string: streamPath)!
let videoSession = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: self, delegateQueue: nil)
var videoURLRequest = NSURLRequest(URL: streamURL)
self.videoDataTask = videoSession.dataTaskWithRequest(videoURLRequest)
self.videoDataTask.resume()
}
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData: NSData) {
if !connectionLive {
connectionLive = true
}
reconnectAvailable = false
self.recievedData.appendData(didReceiveData)
var rangeOfImageDataWithinRecievedData: NSRange = self.recievedData.rangeOfData(self.dataMarker, options: nil, range: NSMakeRange(0, self.recievedData.length))
var endByteLocation = rangeOfImageDataWithinRecievedData.location + rangeOfImageDataWithinRecievedData.length
if self.recievedData.length >= endByteLocation {
var imageDate = self.recievedData.subdataWithRange(NSMakeRange(0, endByteLocation))
var recievedImage = UIImage(data: imageDate)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.streamImageViewer.image = recievedImage
})
self.recievedData = NSMutableData(data: self.recievedData.subdataWithRange(NSMakeRange(endByteLocation, self.recievedData.length - endByteLocation)))
}
}
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
connectionLive = false
reconnectAvailable = true
}
}