Получить кадр изображения из данных видеопотока, чтобы показать его в UIImageView
Я работаю над одним приложением, где я получаю видео поток с камеры 360 градусов. Я работаю с двумя 360-градусными камерами (то есть Ricoh theta и Aleta S2C). для ricoh theta я могу получить доступ к данным кадра изображения из потокового видео в реальном времени, но в случае с Aleta это не работает. он застрял на первом кадре.
Формат для потокового видео следующий:
"Content-Type: multipart/x-mixed-replace; boundary="---osclivepreview---""
Ссылка:
https://developers.google.com/streetview/open-spherical-camera/reference/camera/getlivepreview
Я использую следующий код для извлечения кадра из потоковой передачи данных:
let JPEG_SOI: [UInt8] = [0xFF, 0xD8]
let JPEG_EOI: [UInt8] = [0xFF, 0xD9]
let completionHandler: ((Data?, URLResponse?, Error?) -> Void)
var dataBuffer = Data()
func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
dataBuffer.append(data)
repeat {
var soi: Int?
var eoi: Int?
var i = 0
dataBuffer.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) -> Void in
while i < dataBuffer.count - 1 {
if JPEG_SOI[0] == bytes[i] && JPEG_SOI[1] == bytes[i + 1] {
soi = i
i += 1
break
}
i += 1
}
while i < dataBuffer.count - 1 {
if JPEG_EOI[0] == bytes[i] && JPEG_EOI[1] == bytes[i + 1] {
i += 1
eoi = i
break
}
i += 1
}
}
guard let start = soi, let end = eoi else {
return
}
let frameData = dataBuffer.subdata(in: start..<(end + 1))
self.completionHandler(frameData, nil, nil)
dataBuffer = dataBuffer.subdata(in: (end + 1)..<dataBuffer.count)
} while dataBuffer.count >= 4
}
Пожалуйста, помогите, если вы сделали извлечение кадров из видео данных.