A method comprising: receiving a request from a first user device for a first data block at a first time, wherein the first data block includes a first playback time duration with an associated first end time; receiving a request from a second user device for a second data block at a second time, wherein the second data block includes a second playback time duration, and wherein the playback second time duration has an associated second end time; determining a buffer length of the first user device and the second user device by multiplying a number of requested data blocks initially requested at the start of a content stream and a playback time duration of the requested data blocks at the corresponding device; determining a first playback window associated with the first user device based on the determined buffer length of the first user device, the first playback window comprising an estimate of a portion of a first content stream currently rendered by the first user device, wherein a boundary for the first playback window is determined by subtracting the determined buffer length of the first user device from the end time associated with the first playback time duration; determining a second playback window associated with the second user device based on the determined buffer length of the second user device, the second playback window comprising an estimate of a portion of a second content stream currently rendered by the second user device, wherein a boundary for the second playback window is determined by subtracting the determined buffer length of the second user device from the end time associated with the second playback time duration; determining an offset between the first playback window and the second playback window; and substantially synchronizing the first content for display at the first user device with the second content for display at the second user device based upon the determined offset by manipulating one or more content frames of the first data block or the second data block to modify the playback speed. receiving a request from a first user device for a first data block at a first time, wherein the first data block includes a first playback time duration with an associated first end time; receiving a request from a second user device for a second data block at a second time, wherein the second data block includes a second playback time duration, and wherein the playback second time duration has an associated second end time; determining a buffer length of the first user device and the second user device by multiplying a number of requested data blocks initially requested at the start of a content stream and a playback time duration of the requested data blocks at the corresponding device; determining a first playback window associated with the first user device based on the determined buffer length of the first user device, the first playback window comprising an estimate of a portion of a first content stream currently rendered by the first user device, wherein a boundary for the first playback window is determined by subtracting the determined buffer length of the first user device from the end time associated with the first playback time duration; determining a second playback window associated with the second user device based on the determined buffer length of the second user device, the second playback window comprising an estimate of a portion of a second content stream currently rendered by the second user device, wherein a boundary for the second playback window is determined by subtracting the determined buffer length of the second user device from the end time associated with the second playback time duration; determining an offset between the first playback window and the second playback window; and substantially synchronizing the first content for display at the first user device with the second content for display at the second user device based upon the determined offset by manipulating one or more content frames of the first data block or the second data block to modify the playback speed.