Live Camera Preview слишком медленное в Ricoh Theta Camera

Я пытался обернуть голову вокруг этого http потокового вещания. Я просто не понимаю, и да, я прочитал много яблочных документов и смотрел видео WWDC, но все еще очень запутался.

Я хочу реализовать предварительный просмотр на 360 градусов, чтобы сделать снимок и сохранить его в облаке с помощью камеры Ricoh Theta V. Я уже выполнил реализацию с использованием Open Spherical Camera API для показа изображений на 360 градусов. Но мой предварительный просмотр слишком медленный. Когда я переместил камеру, он слишком поздно обновляет кадры.

Ниже мой код LivePreviewClass-

let completionHandler: ((Data?, URLResponse?, Error?) -> Void)
var dataBuffer = Data()

init(completionHandler: @escaping ((Data?, URLResponse?, Error?) -> Void)) {
    self.completionHandler = completionHandler
}

@objc func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
    dataBuffer.append(data)

    repeat {
        var soi: NSInteger?
        var eoi: NSInteger?
        var  i : NSInteger = 0

        dataBuffer.withUnsafeBytes { (bytes: UnsafeRawBufferPointer) -> 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
}

@objc func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
    session.invalidateAndCancel()
    self.completionHandler(nil, nil, error)
}

0 ответов

Другие вопросы по тегам