• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
Locked
0

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

Guest
Jul 22, 2013 Jul 22, 2013

Copy link to clipboard

Copied

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!

Views

1.1K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines

correct answers 1 Correct answer

Deleted User
Jul 22, 2013 Jul 22, 2013

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 "

...

Votes

Translate

Translate
Guest
Jul 22, 2013 Jul 22, 2013

Copy link to clipboard

Copied

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

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Guest
Jul 24, 2013 Jul 24, 2013

Copy link to clipboard

Copied

LATEST

Dear Zach,

many thanks for sharing your solution with me!

While I still need to try this out it looks like the "main.asc" part does exactly what I need! Having that "streamStatus"-file will make it easy to remotely check if the stream is available. 🙂

Thanks again!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines