I've been playing around with the settings so much that I'm no longer sure what the default/native configuration is. π
I believe that once the integration is enabled, Fluent Player sets CDN Token Authentication by default (not sure).
My question is: is Fluent Player fully compatible with both Bunny Stream's Basic DRM and Enterprise DRM? Or could enabling DRM cause any issues?
As far as I remember, DRM only works with Bunny Stream embedded videos. It would be a shame if that meant we couldn't use Fluent Player together with Bunny's DRM features. That combination would be really valuable.
Is there any way to hide the actual video URL in the source code?
The ability to import timestamps and chapter names will save us massive time a frustration.
I have FluentPlayer Pro and have turned off the "Powered by FluentPlayer" in settings. However, this still shows on embedded videos inside my lessons when i right click on the video. Can this be hidden?
is it possibile to check analytics for single user? what did any user see and in which %?
After updating, the Fluent Player dashboard is completely empty. π
Is anyone else seeing this?
I'll start debugging, but I wanted to check first just in case.
FluentPlayer 1.3.0 just went out, and it is a massive update. This is our first major release since launch, and it takes FluentPlayer well beyond the block editor. Here is what is new.
- Elementor and Divi, done properly. This was the number one thing you kept asking for. FluentPlayer now ships native Elementor widgets and Divi 5 modules for the player and playlists. And I mean full support, not a shortcode in a box. You can control the full settings and config right from Elementor or Divi, live on the canvas as you build. Support for other page builders is coming soon.
- Paste a URL and you are done. FluentPlayer figures out the provider for you. The shortcode got more flexible too, including dynamic sources that pull a different video into every post from a custom field. For a course with hundreds of videos, that is the difference between an afternoon and a month.
- Audio playback. FluentPlayer plays audio now, with the same players, presets, and overlays you already use. Bring your podcast and course audio into the same library, no second plugin needed.
- Private media and playlists. A private video plays wherever you embed it, but its own URL returns a 404 and stays out of search. Videos created from a FluentCommunity lesson are private automatically. (Private playlists are Pro.)
- FluentCRM engagement tracking. FluentPlayer now writes watch milestones and layer interactions, like email captures and CTA clicks, straight to the FluentCRM contact timeline. See who hit 80 percent, who clicked, and build an automation around it. This is the one I am most excited about.
Plus editors can now manage media without full admin access, searchable and paginated pickers, and a long list of fixes.
Full write-up here: https://fluentplayer.com/fluentplayer-1-3-0/
Update from your dashboard whenever you are ready. If you build something you are proud of with it, drop it in the comments π
More cooking π§π»βπ»
Integration with fluentCRM is out... This is big; let's check it out and celebrate.
Meanwhile, after the update, the settings tab is no longer accessible. Shahjahan Jewel,Β please look into the settings tabs
Hi Jewel,
We recently moved to FluentPlayer (LTD, 100 sites) across our client sites, and I spent some time in the Bunny Stream integration code. Two findings I think are worth your attention.
1. The account API key is a blocker for agencies
The Bunny Stream integration requires the Bunny account API key. That key grants access to every video library on the account. On an agency setup, this means each client site we configure technically holds access to every other client's videos. One compromised site or one shared admin login, and the whole portfolio is exposed.
What makes this frustrating is that your code already works the right way. Every actual operation in BunnyCDNService and BunnyCDNStreamIntegration takes a library-specific $libraryApiKey, resolved through getLibraryApiKey() from settings['libraries']: getVideos, getVideo, createVideo, updateVideo, deleteVideo, uploadVideo, getCollections. The account key is only used in two places:
- getLibraries() hitting GET api.bunny.net/videolibrary, to discover libraries and populate settings['libraries']
- fetchPullZone() hitting GET api.bunny.net/pullzone/{id}, to store Hostname and SecurityKey
Both are convenience only. Bunny already exposes per-library API keys, so the scoping exists on their side.
What I would suggest: a "manual library" option in the Bunny Stream settings, letting the user enter Library ID, library API key, pull zone hostname and token authentication key directly, and skipping the discovery call. Everything downstream keeps working unchanged. For agencies this turns an unusable integration into a safe one.
One related detail: updateLibrarySettings() resets settings['libraries'] on every discovery call, so any manual entry gets wiped whenever the settings are refreshed. Worth keeping in mind for the implementation.
2. CDN token authentication for Stream
Separately, I could not find CDN request signing for Bunny Stream. generateSignedUrl() and signBunnyStorageUrls() read cdn_security_key from the Storage integration, and generatePlayerToken() is documented for DRM license endpoints. In practice, enabling token authentication or referer blocking on a Stream library breaks playback, so both have to stay off.
That means Stream videos are reachable by anyone holding the direct URL. For clients selling courses through LearnDash or SureCart, that is a genuine concern. Is CDN token signing for Stream on the roadmap, or am I missing an existing setting?
I built a small add-on covering the first point on our own sites, so I know the approach holds. But it belongs in the core integration rather than in a workaround, and I would much rather use yours.
Attached is the settings screen from the add-on, just to show how few inputs this actually needs: Library ID, library API key, token authentication key and CDN hostname. The interface language is French, but the field labels tell the whole story. Happy to share the code or walk through any of this.
Kind regards,
Eric Brulmans
I'm not finding any way to set defaults for playlist layouts, is that correct or am I just blind? I assume I need to set the layout for every playlist individually?





