Documentation

Working With AMP

Scope of support

We support Google AMP markup with Radiant Media Player through amp-video-iframe. We will thus use iframe embedding mode with Radiant Media Player to get AMP-ready.

Usage example

First we will set up a page for the content that will displayed through an amp-video-iframe:

<!DOCTYPE html>
<html> 
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Radiant Media Player - Example Apple HLS</title>
    <style>
      /* This CSS is required to avoid layout issues */
      html,
      body {
        height: 100%;
        width: 100%;
        background-color: #000;
        overflow: hidden;
        margin: 0;
        padding: 0;
      }
    </style>
  </head>
  <body>
  <script src="https://cdn.radiantmediatechs.com/rmp/10.7.4/js/rmp.min.js"></script>
  <script async src="https://cdn.ampproject.org/video-iframe-integration-v0.js"></script>
  <script>
    // https://amp.dev/documentation/components/websites/amp-video-iframe#custom-integrations
    (window.AmpVideoIframe = window.AmpVideoIframe || []).push(
      onAmpIntegrationReady
    );
    
    function onAmpIntegrationReady(ampIntegration) {

      // Set up player settings
      const src = {
        dash: 'https://your-dash-url/manifest.mpd'
      };
      const settings = {
        licenseKey: 'your-license-key',
        // Here are our iframe settings
        iframeMode: true,
        iframeAllowed: true,
        autoplay: true,
        sharing: true,
        skin: 's1',
        ads: true,
        adTagUrl: 'https://your-ad-tag-url',
        src,
        contentMetadata: {
          poster: [
            'https://poster-url.jpg'
          ]
        }
      };

      const rmp = new RadiantMP('rmp');

      async function initRmpPlayer() {
        try {
          await rmp.init(settings);
        } catch (error) {
          console.error('Radiant Media Player failed to initialize', error);
        }
      }

      // method(name, callback) Implements a method that calls playback functions on the video
      ampIntegration.method('play', function () {
        rmp.play();
      });
      ampIntegration.method('pause', function () {
        rmp.pause();
      });
      ampIntegration.method('mute', function () {
        rmp.mute = true;
      });
      ampIntegration.method('unmute', function () {
        rmp.unmute = true;
      });
      ampIntegration.method('showcontrols', function () {
        rmp.controls = true;
      });
      ampIntegration.method('hidecontrols', function () {
        rmp.controls = false;
      });
      ampIntegration.method('fullscreenenter', function () {
        rmp.setFullscreen(true);
      });
      ampIntegration.method('fullscreenexit', function () {
        rmp.setFullscreen(false);
      });

      // postEvent(name) Posts a playback event to the frame
      rmp.on('ready', function () {
        ampIntegration.postEvent('canplay');
      });
      rmp.on('pause', function () {
        ampIntegration.postEvent('pause');
      });
      rmp.on('playing', function () {
        ampIntegration.postEvent('playing');
      });
      rmp.on('ended', function () {
        ampIntegration.postEvent('ended');
      });
      rmp.on('volumechange', function () {
        if (rmp.mute) {
          ampIntegration.postEvent('muted');
        } else {
          ampIntegration.postEvent('unmuted');
        }
      });
      rmp.on('adstarted', function () {
        ampIntegration.postEvent('ad_start');
      });
      rmp.on('adcomplete', function () {
        ampIntegration.postEvent('ad_end');
      });

      // getIntersection(callback)
      let previousIntersectionRatio = 0;
      setInterval(function () {
        ampIntegration.getIntersection(function (intersection) {
          if (intersection.intersectionRatio > 0.5) {
            if (previousIntersectionRatio > 0.5 && rmp.paused) {
              return;
            }
            rmp.play();
          } else {
            rmp.pause();
          }
          previousIntersectionRatio = intersection.intersectionRatio;
        });
      }, 2000);

      /* https://amp.dev/documentation/components/amp-video-iframe#postanalyticsevent(eventtype[,-vars])
      setInterval(function() {
        // Post a custom analytics event every 3 seconds.
        ampIntegration.postAnalyticsEvent('video-custom-foo', {
          'myVar': Math.random().toString(),
        });
      }, 3000);
      */
      
      initRmpPlayer();

    }
  </script>
  <div id="rmp"></div>
  </body>
</html>

This player code above can be viewed live here.

We now need to prepare our AMP layout for Radiant Media Player while using the amp-video-iframe component. We can check AMP validation here.

<!doctype html>
<html amp>
  <head>
    <meta charset="utf-8">
    <title>Hello AMP world</title>
    <link rel="canonical" href="https://canonical-url.html">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <!-- Include the `amp-video-iframe` extension script. -->
    <script async custom-element="amp-video-iframe" src="https://cdn.ampproject.org/v0/amp-video-iframe-0.1.js"></script>
    <style amp-boilerplate>
      body {
        -webkit-animation: -amp-start 8s steps(1, end) 0s 1 normal both;
        -moz-animation: -amp-start 8s steps(1, end) 0s 1 normal both;
        -ms-animation: -amp-start 8s steps(1, end) 0s 1 normal both;
        animation: -amp-start 8s steps(1, end) 0s 1 normal both
      }

      @-webkit-keyframes -amp-start {
        from {
          visibility: hidden
        }

        to {
          visibility: visible
        }
      }

      @-moz-keyframes -amp-start {
        from {
          visibility: hidden
        }

        to {
          visibility: visible
        }
      }

      @-ms-keyframes -amp-start {
        from {
          visibility: hidden
        }

        to {
          visibility: visible
        }
      }

      @-o-keyframes -amp-start {
        from {
          visibility: hidden
        }

        to {
          visibility: visible
        }
      }

      @keyframes -amp-start {
        from {
          visibility: hidden
        }

        to {
          visibility: visible
        }
    }
  </style>
  <noscript>
    <style amp-boilerplate>
      body {
        -webkit-animation: none;
        -moz-animation: none;
        -ms-animation: none;
        animation: none
      }
    </style>
  </noscript>
  <script async src="https://cdn.ampproject.org/v0.js"></script>
  </head>
  <body>
  <div style="width: 80%;">
    <amp-video-iframe id="myVideo"
      src="https://iframe-url.html" width="16"
      height="9" layout="responsive" implements-rotate-to-fullscreen autoplay
      poster="https://poster-url.jpg">
    </amp-video-iframe>
  </div>
</body>
</html>

See it at work here.

Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 3.0 License.

©2015-2025 Radiant Media Player. All Rights Reserved.