Skip navigation
screensaverboy
Currently Being Moderated

How to remotely check if publishing point is active using javascript or php?

Jul 22, 2013 5:31 AM

Tags: #video #server #fms #media #streaming #live_streaming #fms_4.5 #remotely_get_status

Hi,

I need to check if a publishing point is active (in terms of live video data is available/being streamed) in order to display that status on a web page. It would be nice if this could be queried using javascript or php.

 

Any thoughts?

 

Many thanks in advance!

 
Replies
  • Currently Being Moderated
    Jul 22, 2013 5:59 AM   in reply to screensaverboy

    screensaverboy wrote:

     

    Hi,

    I need to check if a publishing point is active (in terms of live video data is available/being streamed) in order to display that status on a web page. It would be nice if this could be queried using javascript or php.

     

    Any thoughts?

     

    Many thanks in advance!

     

    There's several ways to do this.  I modified the server side main.asc to generate a .html or .php file inside a custom virtual directory within the application root >> (application/livepkgr/status/) and use the variable "streamObject.name" to create the filename.html or filename.php when the application is being published to. Then main.asc deletes the file when it is not.  You then can symlink the /application/likepkgr/status/ directory to the /webroot/ directory to then be able to query from the client to see if the URL exists or doesn't exist. I'll provide the samples below.

     

    Append this to  /application/livepkgr/Application.xml and create the directory status/

     

    <FileObject>

        <VirtualDirectory>status/</VirtualDirectory>

    </FileObject>

     

     

    Apped this to /livepkgr/main.asc (You do not need the parent application.onPublish or application.onUnpublish functions, representaion only)

    application.onPublish = function (clientObj, streamObj) { // not needed representation only

     

    var streamStatus = new File("status/" + streamObj.name + ".html"); // you can create whatever filename you want here

     

         if (!streamStatus.exists) {

            streamStatus.open("text", "append");

            streamStatus.write("Stream name is: " + streamObj.name + " and live event is: " + s.liveEvent); // or write what you wish to the file

            trace("Created Stream Status File : status/" + streamObj.name + ".html") // writes to the admin console log output

        }

     

    } // not needed representation only

     

     

     

    application.onUnpublish = function (clientObj, streamObj) { // not needed representation only

     

    var streamStatus = new File("status/" + streamObj.name + ".html"); { // you can delete whatever file name you created

            streamStatus.remove();

            trace("Deleted Stream Status File : status/" + streamObj.name + ".html"); // writes to the admin console log output

        }

     

    } // not needed representation only

     

     

    Some command line stuff (linux)

     

    # mkdir /opt/adbe/fms/applications/livepkgr/status

    # chmod 777 /opt/adbe/fms/applications/livepkgr/status

    # cd /opt/adbe/fms/webroot

    # ln -s /opt/adbe/fms/applications/livepkgr/status livepkgrstatus

    # chown -R fms:fms /opt/adbe/fms/applications/livepkgr/status livepkgrstatus

     

    flashplayer.html Client Side HTML w/ javascript (This is the .html you would load in an <iframe> on the page serving up the video.  ie.  flashplayer.html)

     

    <!doctype html>

    <html>

    <head>

    <meta charset="utf-8">

    <script type='text/javascript' src='//code.jquery.com/jquery-1.10.2.js'></script>

    <script type="text/javascript">

    function isUrlExists(url) {

        setTimeout(isUrlExists, 30000);

        url = 'http://yourfmsdomain/livepkgrstatus/livestream1.html';

              var liveState = document.getElementById('livePlayer').src;

              var offlineState = document.getElementById('livePlayer').src;

              var isLive;

        var isOffline;

        $.getJSON("http://query.yahooapis.com/v1/public/yql?" +

            "q=select%20*%20from%20html%20where%20url%3D%22" + encodeURIComponent(url) +

            "%22&format=json'&callback=?",

     

     

        function (data) {

            if (data.results[0]) {

                isLive = 'LIVE';

                // alert('Status file exsits! State of stream is: ' + isLive + ' & State of player is: ' + liveState);

            } else {

                isOffline = 'OFFLINE';

                // alert('Status file does not exist! State of stream is: ' + isOffline + ' & State of player is: ' + offlineState);

            }

     

            if (isLive !== undefined && liveState == 'http://www.yourwebserver.com/channel/flashplayerlive.html') {

                // alert('no live state change');

            } else {

                if (isLive === undefined) {

                    // alert('state change remove live player');

                                            // code here to phsycially remove element or object

                        } else {

                    // alert('state change refresh live player');

                                            go('http://www.yourwebserver.com/channel/flashplayerlive.html');

     

                                  }

                        }

     

                        if (isOffline !== undefined && offlineState == 'http://www.yourwebserver.com/channel/flashplayeroffline.html') {

                // alert('no offline state change');

            } else {

                if (isOffline === undefined) {

                    // alert('state change remove offline player');

                                            // code here to physically remove element or object

                                  } else {

                    // alert('state change refresh offline player');

                                            go('http://www.yourwebserver.com/channel/flashplayeroffline.html');

     

     

               }

            }

              });

     

    }

     

     

    function go(loc){

        document.getElementById('livePlayer').src = loc;

              }

     

     

    $(function () {

        isUrlExists('http://yourfmsdomain/livepkgrstatus/livestream1.html');

    });

     

     

    </script>

     

     

    </head>

      <body>

    <iframe id="livePlayer" src="" width="100%" height="520" frameborder="0" scrolling="no"></iframe>

      </body>

    </html>

     

     

    flashplayerlive.html

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">

      <head>

        <title>Strobe Media Playback</title>

        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>

              <script type="text/javascript">  

     

                  // Create a StrobeMediaPlayback configuration

                        var parameters =

                                  {          src: "http://yourfmsserver/livestream1.f4m"  

                                     ,          autoPlay: true

                                  ,          controlBarAutoHide: true

                                  ,   javascriptCallbackFunction: "onJavaScriptBridgeCreated"

                                  };

     

                        // Embed the player SWF:    

                        swfobject.embedSWF

                                  ( "http://yourfmsserver/swfs/StrobeMediaPlayback.swf"

                                  , "live"

                                  , 912

                                  , 513

                                  , "10.1.0"

                                  , {}

                                  , parameters

                                  , { allowFullScreen: "true"}

                                  , { name: "strobeMediaPlayback" }

                                  );

     

     

        </script>  

      </head>

      <body>

              <div id="live"></div>

      </body>

    </html>

     

     

    flashplayeroffline.html

     

     

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">

      <head>

        <title>Strobe Media Playback</title>

        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>

              <script type="text/javascript">  

     

                  // Create a StrobeMediaPlayback configuration

                        var parameters =

                                  {          src: "http://yourfmsserver/yourofflineplaylist.f4m"  

                                     ,          autoPlay: true

                                  ,          controlBarAutoHide: true

                                  ,          loop: true

                                  ,   javascriptCallbackFunction: "onJavaScriptBridgeCreated"

                                  };

     

                        // Embed the player SWF:    

                        swfobject.embedSWF

                                  ( "http://yourfmsserver/swfs/StrobeMediaPlayback.swf"

                                  , "live"

                                  , 912

                                  , 513

                                  , "10.1.0"

                                  , {}

                                  , parameters

                                  , { allowFullScreen: "true"}

                                  , { name: "strobeMediaPlayback" }

                                  );

     

     

        </script>  

      </head>

      <body>

              <div id="live"></div>

      </body>

    </html>

     

     

    I hope you can understand this. It took me several weeks to build this. You're Welcome!

     

    NOTE: You will have to move StrobeMediaPlayback.swf from your samples directory to your webroot to call it from your client. This is needed. Also check your crossdomain.xml and appropriate domain is added.

     

    Zach @ OSPN

     
    |
    Mark as:

More Like This

  • Retrieving data ...

Bookmarked By (0)

Answers + Points = Status

  • 10 points awarded for Correct Answers
  • 5 points awarded for Helpful Answers
  • 10,000+ points
  • 1,001-10,000 points
  • 501-1,000 points
  • 5-500 points