{"id":367177,"date":"2026-09-13T12:43:47","date_gmt":"2026-09-13T12:43:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/protected-audio-player\/"},"modified":"2026-09-13T12:43:19","modified_gmt":"2026-09-13T12:43:19","slug":"neutrope-protected-audio-player","status":"publish","type":"plugin","link":"https:\/\/hy.wordpress.org\/plugins\/neutrope-protected-audio-player\/","author":23488465,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.2","stable_tag":"0.1.2","tested":"7.1","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"Neutrope Protected Audio Player","header_author":"Neutrope","header_description":"Protected audio player that hides direct audio file URLs and serves audio through short-lived, signed playback URLs.","assets_banners_color":"67a6a6","last_updated":"2026-09-13 12:43:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/neutrope.biz\/neutrope-protected-audio-player\/","header_author_uri":"https:\/\/neutrope.biz\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":57,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.2":{"tag":"0.1.2","author":"neutropeinc","date":"2026-09-13 12:43:19","revision":3693657}},"upgrade_notice":{"0.1.2":"<p>Visual polish only for the admin and front-end UI. No changes to stored data or playback behavior.<\/p>","0.1.1":"<p>Quality and coding-standards update for WordPress.org review. No changes to stored data or playback behavior.<\/p>","0.1.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3693657,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3693657,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3693657,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3693657,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3693657,"resolution":"1","location":"assets","locale":"","width":1440,"height":928},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3693657,"resolution":"2","location":"assets","locale":"","width":966,"height":587},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3693657,"resolution":"3","location":"assets","locale":"","width":940,"height":216},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3693657,"resolution":"4","location":"assets","locale":"","width":1440,"height":1163},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3693657,"resolution":"5","location":"assets","locale":"","width":940,"height":262}},"screenshots":{"1":"Manage protected audio files from the WordPress admin.","2":"Upload an MP3 file and copy the shortcode from the audio edit screen.","3":"Display a simple audio player on the front end with a shortcode.","4":"Choose whether plugin data should be removed on uninstall.","5":"Clear notes explain that this is not DRM and that server configuration may affect protection."}},"plugin_section":[],"plugin_tags":[452,4702,267963,708,1213],"plugin_category":[50],"plugin_contributors":[264944],"plugin_business_model":[],"class_list":["post-367177","plugin","type-plugin","status-publish","hentry","plugin_tags-audio","plugin_tags-audio-player","plugin_tags-download-protection","plugin_tags-mp3","plugin_tags-protected","plugin_category-media","plugin_contributors-neutropeinc","plugin_committers-neutropeinc"],"banners":{"banner":"https:\/\/ps.w.org\/neutrope-protected-audio-player\/assets\/banner-772x250.png?rev=3693657","banner_2x":"https:\/\/ps.w.org\/neutrope-protected-audio-player\/assets\/banner-1544x500.png?rev=3693657","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/neutrope-protected-audio-player\/assets\/icon-128x128.png?rev=3693657","icon_2x":"https:\/\/ps.w.org\/neutrope-protected-audio-player\/assets\/icon-256x256.png?rev=3693657","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/neutrope-protected-audio-player\/assets\/screenshot-1.png?rev=3693657","caption":"Manage protected audio files from the WordPress admin."},{"src":"https:\/\/ps.w.org\/neutrope-protected-audio-player\/assets\/screenshot-2.png?rev=3693657","caption":"Upload an MP3 file and copy the shortcode from the audio edit screen."},{"src":"https:\/\/ps.w.org\/neutrope-protected-audio-player\/assets\/screenshot-3.png?rev=3693657","caption":"Display a simple audio player on the front end with a shortcode."},{"src":"https:\/\/ps.w.org\/neutrope-protected-audio-player\/assets\/screenshot-4.png?rev=3693657","caption":"Choose whether plugin data should be removed on uninstall."},{"src":"https:\/\/ps.w.org\/neutrope-protected-audio-player\/assets\/screenshot-5.png?rev=3693657","caption":"Clear notes explain that this is not DRM and that server configuration may affect protection."}],"raw_content":"<!--section=description-->\n<p>Neutrope Protected Audio Player lets you publish MP3 audio on your WordPress site without exposing the real file URL in your page source. Files are stored in a protected uploads folder that denies direct access, and the player streams audio through a short-lived, signed playback URL instead of a permanent, guessable link.<\/p>\n\n<p><strong>This is not DRM.<\/strong> It makes casual downloading harder, but it cannot provide DRM or perfect copy protection. If audio can be played in a browser, it can potentially be captured by determined users. The goal is simply to stop ordinary visitors from finding and saving the MP3 with a right-click or a quick look at the page source.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li>Adds a \"Protected Audio\" item type where you upload an MP3 and get a shortcode.<\/li>\n<li>Stores uploads in <code>wp-content\/uploads\/neutrope-protected-audio-player\/<\/code>, protected by an <code>.htaccess<\/code> file.<\/li>\n<li>Serves audio through a signed URL such as <code>\/npap-stream\/123\/...\/...\/<\/code> that expires after 10 minutes.<\/li>\n<li>Outputs an <code>&lt;audio&gt;<\/code> player with <code>controlslist=\"nodownload\"<\/code> so the browser's download button is hidden.<\/li>\n<li>Keeps an anonymous play count per item.<\/li>\n<\/ul>\n\n<h3>What this plugin can and cannot do<\/h3>\n\n<p>This is not DRM.\nThis plugin makes casual downloading harder, but cannot provide DRM or perfect copy protection.\nIf users can play audio in a browser, advanced users may still capture it.\nNo external services.\nNo tracking.\nNo cookies.\nNo personal data stored by default.\nApache\/LiteSpeed uses .htaccess protection.\nNginx may require additional server configuration.<\/p>\n\n<h4>Privacy<\/h4>\n\n<ul>\n<li>No external services, CDNs, scripts or APIs are used. Everything runs on your own server.<\/li>\n<li>No tracking.<\/li>\n<li>No cookies are set.<\/li>\n<li>No personal data is stored by default. The plugin records only an aggregate play count per item. It never stores IP addresses and never sets cookies.<\/li>\n<\/ul>\n\n<h4>Server requirements<\/h4>\n\n<ul>\n<li>On Apache and LiteSpeed, direct access to the protected folder is blocked automatically with the <code>.htaccess<\/code> file the plugin creates.<\/li>\n<li>On Nginx, <code>.htaccess<\/code> files are ignored. You will need to add server configuration to deny direct access to the protected uploads folder. The admin screen shows a reminder when it detects Nginx.<\/li>\n<li>On some Nginx or reverse proxy configurations, byte-range responses may be buffered or altered by the server. Audio playback can still work, but seeking behavior may depend on server configuration.<\/li>\n<li>Pretty permalinks are recommended. When they are disabled, the plugin falls back to a query-string playback URL.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>neutrope-protected-audio-player<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install the plugin through the Plugins screen in WordPress.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress. Activation creates the protected uploads folder.<\/li>\n<li>Open the new \"Protected Audio\" menu, add an item, upload an MP3, and publish it.<\/li>\n<li>Copy the shortcode shown on the edit screen, for example <code>[npap_audio id=\"123\"]<\/code>, and paste it into any post or page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20stop%20people%20from%20downloading%20my%20audio%3F\"><h3>Does this stop people from downloading my audio?<\/h3><\/dt>\n<dd><p>No tool can fully prevent that. This plugin removes the easy ways to grab a file (visible URLs, the browser download button, predictable links) so casual users cannot simply save it. Anyone able to play the audio could still capture it with the right tools.<\/p><\/dd>\n<dt id=\"is%20this%20drm%3F\"><h3>Is this DRM?<\/h3><\/dt>\n<dd><p>No. It is an obfuscation and access-control layer, not digital rights management.<\/p><\/dd>\n<dt id=\"which%20file%20types%20are%20supported%3F\"><h3>Which file types are supported?<\/h3><\/dt>\n<dd><p>MP3 only in this version. Uploads are checked by extension and by their real MIME type (<code>audio\/mpeg<\/code>).<\/p><\/dd>\n<dt id=\"i%20use%20nginx.%20is%20the%20folder%20still%20protected%3F\"><h3>I use Nginx. Is the folder still protected?<\/h3><\/dt>\n<dd><p>Nginx ignores <code>.htaccess<\/code>, so you must add a server rule that denies direct access to <code>wp-content\/uploads\/neutrope-protected-audio-player\/<\/code>. Until you do, the folder may be reachable directly.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20delete%20my%20files%20when%20i%20uninstall%20it%3F\"><h3>Does the plugin delete my files when I uninstall it?<\/h3><\/dt>\n<dd><p>No. By default nothing is deleted on uninstall. Data is only removed when the <code>protected_audio_player_delete_data<\/code> option is set to a truthy value, which you can enable under Settings &rarr; Neutrope Protected Audio Player.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>Polished the admin audio edit screen, settings page, and front-end player styling.<\/li>\n<li>Improved the shortcode display (with a copy button) and explanatory notices without changing playback behavior.<\/li>\n<li>Added Shortcode, File and Plays columns to the Protected Audio list screen.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>Added clearly documented <code>phpcs:ignore<\/code> annotations for the byte-range streaming file handle (fopen\/fread\/fclose).<\/li>\n<li>Removed <code>suppress_filters<\/code> from the uninstall cleanup query.<\/li>\n<li>Removed the explicit <code>load_plugin_textdomain()<\/code> call; WordPress loads the translations automatically.<\/li>\n<li>Hardened the streaming response headers and added <code>X-Accel-Buffering: no<\/code> to reduce reverse-proxy buffering.<\/li>\n<li>Documented reverse-proxy\/Nginx byte-range behavior in the readme and the admin screen.<\/li>\n<li>Updated \"Tested up to\".<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Protected Audio post type with MP3 upload and per-item shortcode.<\/li>\n<li>Protected uploads folder with <code>.htaccess<\/code> and <code>index.html<\/code>.<\/li>\n<li>Short-lived, HMAC-signed streaming endpoint with HTTP Range support.<\/li>\n<li>Anonymous play counter.<\/li>\n<\/ul>","raw_excerpt":"Protected audio player that hides direct audio file URLs and serves audio through short-lived, signed playback URLs.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/367177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=367177"}],"author":[{"embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/neutropeinc"}],"wp:attachment":[{"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=367177"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=367177"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=367177"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=367177"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=367177"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/hy.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=367177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}