Video Streaming Fix for Safari & iOS

Description

Safari and iOS require correct HTTP byte-range (“Range”) request handling to play and seek video files. Many hosting setups and default WordPress file serving do not respond correctly to these requests, which causes videos to fail to play, fail to seek, or show a spinning loader forever on Safari desktop and iOS Safari/WebView.
Video Streaming Fix for Safari & iOS adds a dedicated REST endpoint that serves your video files with proper 206 Partial Content responses, correct Content-Range, Accept-Ranges, and chunked delivery, so Safari and iOS can play and seek your videos the way they do on any other browser.
This is the complete functionality of this plugin: full byte-range streaming support, for files of any size, with no time limit, no usage limit, and no license of any kind required.

Features

  • Correct 206 Partial Content responses for byte-range requests, with no file size limit.
  • Correct 416 Range Not Satisfiable handling for invalid ranges.
  • Path-traversal protected file serving.
  • Chunked streaming to avoid memory exhaustion on large files.
  • [vsfix_video] shortcode to embed a video with one line.

A separate Pro add-on

A separate plugin, “Video Streaming Fix for Safari & iOS Pro”, sold and distributed outside WordPress.org, adds signed/expiring protected links and a playback analytics dashboard. It is a fully independent plugin (not included in, or unlocked from, this one) and is entirely optional; nothing in this plugin is limited, locked, or time-restricted while waiting for it. This plugin uses Freemius (https://freemius.com) only to show information about that separate add-on; no data is shared with Freemius unless you choose to visit that page.

Installation

  1. Install the plugin through the WordPress plugins screen (Plugins > Add New Plugin, search for “Video Streaming Fix for Safari & iOS”), or upload the plugin files to the /wp-content/plugins/video-range-streaming directory manually.
  2. Activate the plugin through the ‘Plugins’ screen in WordPress.
  3. Place the video files you want to serve in the video-range-test folder inside your uploads directory (wp-content/uploads/video-range-test/).
  4. Request your video through the plugin’s REST endpoint: /wp-json/vsfix/v1/stream?file=your-video.mp4, or embed it with the shortcode: [vsfix_video file=”your-video.mp4″]

FAQ

Why does my video not play or seek on Safari/iOS but works fine on Chrome?

Safari and iOS rely heavily on correct HTTP Range request handling to buffer and seek video. If your server or default WordPress media delivery doesn’t respond to Range requests with a proper 206 Partial Content response, Safari will fail to play or seek the video. This plugin fixes exactly that.

Is there a file size limit?

No. The byte-range streaming fix is completely free and has no file size limit.

Does this plugin work with any video format?

The current version is optimized for MP4 (H.264) delivery, the most broadly compatible format for Safari and iOS.

Do I need a license key?

No. Nothing in this plugin requires a license key or account of any kind.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Video Streaming Fix for Safari & iOS” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

0.3.0

  • Removed all Pro-only code from this plugin. Protected links and playback analytics are now exclusively part of a separate, independently distributed Pro plugin, in line with the WordPress.org guideline that free plugins hosted here must not contain locked or license-gated functionality.
  • Renamed internal functions, options, and the REST namespace to a longer, more distinctive prefix (vsfix_) to avoid naming collisions.
  • Renamed the shortcode from [vrs_video] to [vsfix_video].

0.2.0

  • The byte-range streaming fix is now free and unlimited for everyone (previously capped at 100MB on the free tier).

0.1.0

  • Initial release. Byte-range (206 Partial Content) fix for Safari/iOS.