vimeo_native_player 1.1.0
vimeo_native_player: ^1.1.0 copied to clipboard
Play Vimeo videos natively in Flutter with no WebView. Resolves any Vimeo link to a direct HLS or MP4 stream, so autoplay, captions and fullscreen work like any other native video.
Changelog #
1.1.0 #
Failures used to report a status code and throw away everything useful. This release makes them say what actually went wrong, and what to do about it. No breaking changes — the new errors are subtypes of the existing ones.
Errors now carry Vimeo's own explanation #
Vimeo states the cause in its error pages (Because of its privacy settings, this video cannot be played here., This video does not exist.). That
sentence is now lifted out and exposed as reason on
VimeoRestrictedException and VimeoNotFoundException, and used as the
message when Vimeo supplied one.
When both routes fail, the embed page's explanation is kept in preference to
the /config endpoint's, which only ever answers We're having a little trouble.
Domain-restricted embeds are diagnosed #
A video can be public on vimeo.com and still refuse to play in an app, because Vimeo's "Where can this be embedded?" setting is independent of "Who can watch?". Set to Specific domains, it can never be satisfied by an app, which has no domain. This was previously indistinguishable from any other refusal.
On failure, the resolver now asks Vimeo's oEmbed endpoint what happened and throws:
VimeoEmbedNotAllowedException— embed privacy excludes apps. Names the exact Vimeo setting the owner has to change.VimeoPrivateLinkRequiredException— an unlisted video was reached without its privacy hash, the usual result of storingvimeo.com/<id>and dropping the rest.
Both extend VimeoRestrictedException, so existing catch clauses are
unaffected. The diagnosis runs only on the failure path: successful playback
makes no extra request.
Optional access token for your own private videos #
VimeoResolver(accessToken: ...) falls back to Vimeo's official API, which can
reach private videos the public routes cannot. Entirely optional — everything
else works without it. It is consulted only after the normal routes fail.
Do not ship a token in an app: it can be extracted from the binary, and it grants control of the whole Vimeo account. Keep it on a server and return the resolved stream URL to the app instead.
Also #
- README gained a "Why isn't my video playing?" section covering the privacy settings behind almost every failure, and stating plainly that this package will not bypass them.
- Tests for every new error path, and for unlisted links carrying Vimeo's share-tracking parameters.
1.0.1 #
Documentation and discoverability only — no code or API changes.
- Added a "What you get" feature summary to the README.
- Moved the supported-link reference above the options reference, so the question "will my link work?" is answered before the configuration detail.
- Replaced the
playertopic with the more specificvideo-player.
1.0.0 #
First release.
VimeoNativePlayer— a drop-in widget that plays Vimeo videos with the platform's native player. No WebView, so autoplay works with sound and there is no embedded browser to navigate away in.VimeoResolver— resolves any Vimeo link to direct HLS and MP4 stream URLs, for use with any player (video_player,better_player,media_kit, …).- Resolves via the player page, with the
/configendpoint as a fallback. Vimeo refuses/configfor many newer uploads, so page-first resolution is what makes recent videos work. VimeoUrl.parsehandles every Vimeo link shape, including unlisted videos (vimeo.com/<id>/<hash>and?h=<hash>), channel, group, album and manage URLs, and links carrying share tracking parameters.- Exposes subtitle and caption tracks, the poster image, duration, dimensions, frame rate, owner, and live/360 flags.
- Every CDN is offered as a separate stream, and progressive renditions are sorted largest first, so playback can fall through on failure.
- In-memory caching keyed to Vimeo's own signed-URL expiry.
- Typed errors:
VimeoInvalidUrlException,VimeoNotFoundException,VimeoRestrictedException,VimeoNetworkException,VimeoParseExceptionandVimeoNoStreamException, all under a sealedVimeoException.