POST NSData to a Server

Question:

I am trying to POST the iPhone depth data to a Macbook using wifi (at-least 30 fps). I extracted depth CVPixelBuffer from ARSession followed by creating an NSMutableData.

My question is that how I can POST this message (NSMutableData) to a server? In the meantime, how can I GET the same message from the server in Python, preferably Flask, and convert the message to depth data for showing purposes?

I would really appreciate any help and thanks for your time.

func createDataFromPixelBuffer(pixelBuffer: CVPixelBuffer) -> Data {
    CVPixelBufferLockBaseAddress(pixelBuffer, [.readOnly])
    defer { CVPixelBufferUnlockBaseAddress(pixelBuffer, [.readOnly]) }

    let source = CVPixelBufferGetBaseAddress(pixelBuffer)
    let totalSize = CVPixelBufferGetDataSize(pixelBuffer)
    guard let rawFrame = malloc(totalSize) else {fatalError("failed to alloc " + String(totalSize))}
    memcpy(rawFrame, source, totalSize)

    return Data(bytesNoCopy: rawFrame, count: totalSize, deallocator: .free)
}

let data = createDataFromPixelBuffer(pixelBuffer: depth)
let messageData = NSMutableData()
messageData.append(data)
Asked By: Ghasem Abdi

||

Answers:

To create the HTTP request, you will need to use a networking library such as URLSession in the iOS SDK.

Here is an example of how you could use URLSession to create a POST request in Swift:

// Create a URL to the server
let url = URL(string: "http://example.com/upload")!

// Create a URLRequest with the POST method and the data to be sent in the HTTP body
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = messageData as Data

// Use URLSession to send the request
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    // Handle the response here
}

task.resume()

To receive the depth data on the server side, you can create a Flask route that listens for POST requests. Here is an example of how you could do that in Python:

from flask import Flask, request

app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload():
    # Get the data from the HTTP body
    data = request.get_data()

    # Convert the data to a depth image here

    return "OK"
Answered By: David