The short answer: with WPMediaShield, a member’s place in a video is saved on self-hosted files, YouTube, Vimeo and Wistia, all in the free plugin. Bunny Stream is the one to test. Its embed lives in an iframe, and the position only reaches your site if that embed answers a request from the page. Switch on direct playback in WPMediaShield Pro and Bunny video plays like a file on your own server, with the exact position.
This post is for people who sell a course or a membership and keep their video on a host. It explains what your member sees when their place is lost, how WPMediaShield records a place, what it does on each host, and how to check your own setup in ten minutes. Resume on a membership site in general is covered in how to build a video membership site on WordPress. This post stays with the host question.
Key points
- Resume is on by default, and it needs a watch session, which means Standard or Strict protection and a logged-in member.
- On YouTube, Vimeo and Wistia the free plugin gets the position from the host’s official player interface, and on self-hosted files straight from the video element.
- Bunny embeds are read through a handshake with the iframe, and a failed handshake means the video plays but nothing is saved.
- What comes back is the furthest point reached in the member’s most recent sitting, offered for ten seconds as a Resume or Start Over choice.
- Ten minutes with your own test account shows which of your videos save a place.
What your member sees when the place is lost
Picture a member on lesson six of a long course. They watched 38 minutes, got a phone call, closed the laptop. Next evening, they open the lesson page and the video sits at 0:00.
Nothing looks broken to them. Playback works fine. But they have to find their own place by dragging a slider across a 50-minute bar, guessing, overshooting, and dragging back. Some will do it. Some will start from the top and sit through material they already know. Others decide the course is more work than they signed up for and leave it for another week, which in practice means leaving it for good.
You, the seller, see none of this. Pages load, videos play, no error appears. Your only trace is a number in your reports that doesn’t fit: a member who paid, logged in, and has a completion figure stuck at the first minute of every lesson.
That’s why it is worth knowing, host by host, whether a place is kept. This fault is silent, and it costs you the very people who are trying to finish what they bought.
How WPMediaShield saves a place
Every host shares one mechanism, so it helps to learn it once.
Opening a protected video makes the player start a watch session for that member and that video. While the video is on the page and in view, the player reports the current position to your site every 30 seconds. Your site keeps the furthest position reached in that session, along with the seconds watched and the completion percentage.
Next visit, the player asks for a resume position. Your site looks up the most recent session that member had on that video and returns its furthest position. Above zero, a small prompt appears over the player: “Resume from 38:12?” with a Resume button and a Start Over button. Choosing Resume jumps to that point and plays. Ten seconds later the prompt goes away by itself, and nothing happens to the video if the member ignores it.
Three details follow from that design, and each one affects how you test:
- Only a report saves a place. Reports go out every 30 seconds, so a member who watches 20 seconds and leaves has saved nothing. Closing the tab ends the session but doesn’t send a final position.
- Switching tabs pauses the reports. They start again when the member comes back to the page.
- Furthest point, not last point, is what gets stored. More on that below.
All of this is in the free plugin. Those sessions also feed the Viewers screen and the My Videos page, which is why a place that fails to save also shows up as missing progress in your analytics.
Host by host: what is saved
Here is the short version, then the detail for each.
| Host | Place saved | Edition |
|---|---|---|
| File on your server | Yes | Free |
| YouTube | Yes | Free |
| Vimeo | Yes | Free |
| Wistia | Yes | Free |
| Bunny embed | Only if the embed answers | Free |
| Bunny direct playback | Yes | Pro |
Files on your own server
Self-hosted video plays in a normal video element on your page, so the player can read the position at any moment and seek to it. This is the simplest case and the most reliable one. Direct stream addresses ending in .m3u8 behave the same way.
YouTube
WPMediaShield loads the YouTube player through YouTube’s own iframe API. This gives the page a live line to the player, and the plugin checks the current time twice a second. Each report takes its position from that check. Once a member clicks Resume, the plugin asks the YouTube player to seek to the saved second and play.
Because the connection is through the official API, there is nothing for you to switch on beyond having the video in your WPMediaShield library. Course lessons on unlisted videos work the same way; see unlisted YouTube videos for courses for that setup.
Vimeo
Vimeo goes through Vimeo’s player library. The plugin listens to time updates from the player and uses them as the position, and seeks through the same library when a member resumes.
There is one failure mode worth knowing. Should Vimeo’s player library fail to load (a blocker, a network rule), the plugin falls back to a plain Vimeo iframe so the video still plays. In that fallback, watch tracking is off, which means no saved place for that visit. The browser console logs a line saying so.
Wistia
WPMediaShield loads Wistia’s own embed script and listens for each second that passes. Every second becomes the position, and a resume asks the Wistia video to jump to the saved time. Like YouTube, it needs nothing beyond the video being in your library.
Bunny Stream embeds
Bunny gives you an embed page that your site shows in an iframe. Your page cannot look inside an iframe from another domain, so it cannot read the position by itself. Whatever plays inside the frame has to tell the page.
WPMediaShield handles this with a small standard messaging protocol for embedded players. Once the page loads, the plugin loads that script, connects to the Bunny iframe, and asks it for its time as the video plays. Should the embed answer, the position is recorded exactly as on any other host and Resume works.
Without an answer, the plugin does not hold the video back. After about four seconds of waiting for the handshake it starts the session anyway. Members watch normally. Position stays at zero, every report says zero, and no Resume prompt will ever appear for that video.
Because the failure is quiet, Bunny deserves a test on your own content. Our Bunny guide says plainly that accurate progress tracking and in-video ads don’t apply to the default Bunny embed. Treat a working Resume on a Bunny embed as something to confirm, not something to assume. For setup steps, see the Bunny Stream courses guide.
Bunny with direct playback (Pro)
WPMediaShield Pro adds a Bunny Playback screen. With it, you can have Bunny videos play through the WPMediaShield player itself instead of Bunny’s embedded page, using the stream address Bunny already serves. The video then sits in a normal video element on your page, and position, seeking, speed control and the watermark all work as they do for a file on your server.
Direct playback is off until you turn it on. Each save runs a test of a signed address against your Bunny library, and if the test fails it switches itself back off, so a wrong key can’t black out your videos. Bunny libraries often have token authentication on, which is why the test exists. Key setup happens on that Pro screen.
The settings that switch resume off without telling anyone
Hosts are one reason a place goes missing. Settings are the other, and they are easier to fix.
Protection level. Resume needs a watch session. None and Basic don’t start one, so a video set to either never saves a place on any host. Standard and Strict do. New videos default to Standard, but each video has its own override on its edit screen, and one video set to Basic by accident is enough to cause a complaint.
Resume Playback toggle. In MediaShield settings, under Player Controls, Resume Playback is on by default. Each video can override it on its edit screen, so a single lesson can have resume forced off while the rest keep it.
Logged-in members only. A saved place belongs to an account. Guests do get sessions recorded when you let non-members watch, but every guest is treated as nobody in particular, so a guest never gets a Resume prompt. Deliberate, because giving one visitor another visitor’s position would be a worse fault than giving none.
Cached pages. The position is requested from your site when the player starts, not printed into the page, so a cached lesson page doesn’t hold a stale place. If you change one of the settings above and nothing moves, test in a private window with a fresh login before concluding anything.
For the full list of player options, see the player settings guide and the page on protecting a paid video.
What resume does not do
Some limits, stated so you can set honest expectations with your members.
Its offer is the furthest point of the last sitting. Say a member watched to 40:00 on Monday. On Tuesday they open the video, ignore the prompt, watch the first five minutes to refresh their memory, and leave. Wednesday’s offer is 5:00, because Tuesday is now the most recent sitting. Members who like to rewatch openings can use the slider; mention that in the lesson.
Expect a lag of up to 30 seconds. Because reports go out every 30 seconds, a member who leaves mid-interval comes back to the previous report, not to the exact second.
Nothing starts on its own. The member chooses Resume. With no click within ten seconds, the prompt disappears and the video stays at the start.
Completion is a separate rule. Resume remembers a place. Whether a lesson counts as finished is a separate matter, handled by milestones and, in Pro, by the course plugin connection. Our post on LearnDash video progression covers that side.
My Videos needs a page to point at. The [mediashield_my_videos] list shows progress for each video the member has watched. Its Resume link beside a title only appears when your site tells the plugin which page holds that video, through a filter called mediashield_video_watch_url. Without it, the title shows as plain text, and the player on the lesson page offers the resume itself.
A ten-minute test for your own setup
Run this as a member, not as an administrator. Use a test account with access to the course, and a private browser window so you see what a member sees. Do it once per host you use.
- Pick one video per host you use: a YouTube lesson, a Vimeo lesson, a Bunny lesson, and so on. Note each video’s protection level on its edit screen and confirm it says Standard or Strict.
- Open the Resume Playback setting under Player Controls and confirm it’s on. Check that none of your test videos has resume turned off in its own overrides.
- Log in as the test member and open the first lesson. Play it past the one-minute mark. Going past a full minute is deliberate: the first report goes out at 30 seconds and the second at 60.
- Stay on the page for a few more seconds, then close the tab. Don’t pause first; a real member rarely does.
- Open a new private window, log in again and open the same lesson. Within a moment of the player loading, look for the Resume prompt. Expect a time close to where you stopped, give or take 30 seconds.
- Click Resume and confirm the video jumps to that point and plays. Then reload, wait for the prompt, and click Start Over to confirm that path works too.
- Repeat for each host. Pay closest attention to any Bunny embed. No prompt there means that video isn’t saving a place.
- Open the Viewers screen and find your test member. The watch history there is built from the same sessions, so a video that never saved a place is the one to compare against the others.
Every host passing means you’re done. A failure sends you to the fix list below.
When a host fails the test
Work from the cheapest explanation to the most involved one.
- No prompt on any host. Check the protection level and the Resume Playback setting, then check that the test account is logged in. Those three are the first things to rule out.
- No prompt on Vimeo only. Open the browser console on the lesson page and look for the message about the Vimeo player failing to load. Usual causes are a content blocker or a firewall rule on your side.
- No prompt on a Bunny embed. The embed isn’t answering the handshake, which is the quiet case described earlier. You have two options: use Bunny Playback in WPMediaShield Pro so the video plays in the WPMediaShield player, or accept that those lessons won’t remember a place and say so in the lesson.
- A prompt, but it’s far from where you stopped. Remember the 30-second reporting interval, and remember that the most recent sitting wins. Test again with a longer watch.
Neither choice for Bunny is wrong. Bunny’s own player is simple and many sellers like it. What matters is choosing with the facts, instead of finding out from an email.
Which hosts suit which seller
Resume matters for any course with long lessons, and the host you pick affects how much work you do.
Sellers on YouTube, Vimeo or Wistia get resume in the free plugin with nothing to configure beyond protection level. Sellers on their own server get it too, along with the one thing the embedded hosts can’t offer, which is hiding the file address. Bunny sellers who want exact tracking, the viewer watermark and ads inside the video should look at direct playback in Pro. Bunny sellers happy with Bunny’s own player can stay on the embed and test whether resume works for them.
For a wider look at where each host fits, read how to embed video in WordPress and the video hosts feature page. Our free versus Pro page lists what each edition includes.
What to take from this
Saving a place is a small feature with an outsized effect on whether people finish what they bought. On four of the five hosts WPMediaShield reads the position through an official interface and the free plugin does the rest. On the fifth, the Bunny embed, whether it works depends on a handshake you can’t see, so you test it once, with a real account, and decide.
Ten minutes is all it takes. Do it before you launch a course, again after you change hosts or protection levels, and any time a member writes in to say the video started over.