Sending data to the server frame-by-frame is unfeasible due to connection and server latencies. Our data streaming protocol allows the smartphone to send motion data to the server in bursts that vary in size depending on the connection speed. The processed motion obtained from the smartphone’s sensor is gathered and placed in a buffer. A set of asynchronous tasks are started to empty the buffer contents and upload data to the server in the form of Java Server Object Notation (JSON) packets. The frequency at which asynchronous tasks are started is governed by the time it takes for the server to respond for each completed task. If the connection is fast, the smartphone will upload small amounts of data very frequently. If the connection is slow, the smartphone will upload large amounts of data very rarely. If the connection is lost, the recorded data will be gathered in the buffer until Internet access is regained. The same process is used for downloading data from the server.