Thank you for all your feedback. I tried everything you all suggested and unfortunately none of it seemed to fix the issue. After further testing I discovered that it wasn't specifically mobile that was the issue, but safari in general.
I have successfully got it to work. The issue was happening due to incorrectly handling the range provided by the browser.
I changed that part of the code from this:
while (!feof($handle) && ftell($handle) <= $range_end) {
echo fread($handle, $chunk_size);
flush();
}
To this:
echo fread($handle, $range_end - $range_start + 1);