Streaming from FMS to a CDN

How can I push streams being put onto my FMS to a CDN? Do I
have to edit an asc file? Where does that file need to go? Thanks
for any help.

Short answer: You cannot push to a CDN, only pull. And that's
tricky if you can't upload your own custom .asc code - most CDNs
won't allow it.
Good news: FMS3 adds a new Netstream object on the serverside
(previously we only had the Stream object without publish method)
and that allows you to push a stream to a CDN or any other FMS box
for that matter.
Ask your CDN of choice how quickly they will roll out FMS3
and once they do you're all set.

Similar Messages

  • Problem playing remote live stream from FMS

    Hello all,
    I'm having problems playing remote live streams from FMS (server-side) that I can play with any other player (client-side)
    Example of server-side application which plays a remote live stream:
    nc = new NetConnection();
    nc.connect("rtmp://remoteserver/live");
    stream = Stream.get("localStream");
    stream.play("remoteStream.flv", -1, -1, true, nc);
    This code works only sometimes.
    Most of the times, FMS is able to connect to remote string and the localStream dispatches events:
       NetStream.Publish.Strart
       NetStream.Play.Reset
    In this case, FMS is publishing the local stream but it is not playing the remoteStrem on it.
    The rest of the times, localStream dispatches events:
       NetStream.Publish.Strart
       NetStream.Play.Reset
       NetStream.Play.Start
       NetStream.Data.Start
    In this case FMS plays the remoteStream correctly.
    Any hint to solve this issue?
    Regards.

    Thanks, I tried your code and it works when playing a remote live stream on another FMS.
    But the remote live stream is not on a FMS but on a Wowza Server which re-streams an RTSP stream over RTMP.
    With this code:
    var nc;
    var myStream;
    application.onAppStart = function(){
         nc = new NetConnection();
         myStream = Stream.get("localstream");
         myStream.onStatus= function(info){
               trace(info.code);
         nc.onStatus = function(info){
               trace (info.code);
               if(info.code == "NetConnection.Connect.Success" ){
                    myStream.play("remoteLive.sdp", -1, -1, true, nc);
         nc.connect("rtmp://remoteServer/live");
    Every live stream player I tried was able to play the remote stream "remoteLive.sdp", but FMS play it only sometimes. This is the output log of the FMS application:
    NetConnection.Connect.Success
    NetStream.Publish.Start
    NetStream.Play.Reset        <--------------------------------- Stuck there, stream won't play
    Unloaded application instance wowza4/_definst_ <--- Reload app
    NetConnection.Connect.Success
    NetStream.Publish.Start
    NetStream.Play.Reset        <--------------------------------- Stuck there, stream won't play
    Unloaded application instance wowza4/_definst_ <--- Reload app
    NetConnection.Connect.Success
    NetStream.Publish.Start
    NetStream.Play.Reset
    NetStream.Play.Start         <--------------------------------- Stream is playing just fine
    NetStream.Data.Start
    Unloaded application instance wowza4/_definst_ <--- Reload app
    NetConnection.Connect.Success
    NetStream.Publish.Start
    NetStream.Play.Reset       <--------------------------------- Stuck there, stream won't play
    Any idea? Why FMS won't play it everytime?
    Regards

  • SWF Verification and HTTP Streaming from FMS 4.0.1

    Is it possible to do SWF Verification with HTTP Streaming? (If calling the box directly)
    My gut says No, and I haven't seen any examples or mentions of this in the forums, and I was hoping I could get a clear cut answer from someone that has either tried it or from Adobe.
    Thanks.
    -Will

    Hi,
    As of now, you cannot use SWFVerification to protect HTTP Streaming, as HTTP Streaming does not require connection with core process of FMS, but request is handled by f4f module in apache. The current way to ensure protection of HTTP streams is to use Flash Access for encryption of fragments. You can find more about Flash Access here at http://www.adobe.com/products/flashaccess/
    Thanks,
    Abhishek

  • Publish multi-bitrate stream from FMS?

    Hi,
    I have an SSAS app to publish live streaming, you can refer here. Can I do publish multi-bitrate streaming with SSAS code over RTMP ? I read a tutorial, but it over HTTP...
    Mai Huy

    Hi everyone!
    I have question, how can I play Multi Bit-rate, Live, HDS Streaming? I've done huge resarch and couldn't find how to do it.
    I'm decoding stream properly from camera through Adobe Live Media Encoder to AMS.
    everything works fine when I decode single bit rate and play like this:
               var resource : URLResource = new
    URLResource("http://localhost/hds-live/livepkgr/_definst_/liveevent/livestream.f4m");
            var manifest : F4MElement = new F4MElement(resource);
            var mediaPlayerSprite : MediaPlayerSprite = new MediaPlayerSprite();
            mediaPlayerSprite.media = manifest;
            addChild(mediaPlayerSprite);
    with multibitrate - manifest file looks like this:
    <manifest xmlns="http://ns.adobe.com/f4m/1.0">
      <media streamId="livestream1" bitrate="100" />
      <media streamId="livestream2" bitrate="500" />
      <media streamId="livestream3" bitrate="1000" />
    </manifest>

  • F4v streamed from FMS into Captivate throws error

    I use the video type: Streaming Video in Captivate
    Server URI is set to: rtmp://xxxx.xxx.xx.com/vod/
    Stream Name is set to: mp4:signatur.f4v
    On the FMS the file signatur.f4v lies in applications\vod\media
    I have the stream in my first slide in Captivate and when I play it I get:
    Error #2044: Unhandled IOErrorEvent:. text=Error #2124: Loaded file is an unknown type.
    When I click "Dismiss All" at the error box the video start to play ok. Any succeding videos in the project also plays without errors.
    Any help would be much appreicated.
    Thanks,
    JensCBC

    It turned out that it was one of the widgets that ships with Captivate 5 that caused the error.
    The widget VividTextCaption.swf will throw an error on Adobe Connect 7.5
    Maybe someone at Adobe would fix it for next update?
    Cheers
    JensCBC

  • Live Stream from FMS

    I have install the Flash Media Server and Flash Media Live Encoder. Everything run perfectly when I test the Live Stream through localhost, but if I try to embed to another machine, it is failed. Anybody have an idea how to fix it?

    Have you made sure your firewall allows incoming traffic on 1935 - i think it would be firewall issue.

  • Playback of low bitrate flv or f4v from live stream in FMS causes player buffer to empty

    We are experiencing a consistent issue when playing a low bitrate (300kbps or less) flv in a live stream from FMS.  Basically, the player will will start off with the appropriate buffer, say 5 seconds, then begin dropping until it empties out, and will have to rebuffer.  We've tried with a variety of flv and f4v files, all that are 300kbps or less, and we consistently get the issue.  Is this something Adobe can investigate in FMS?  Or are there any suggestions on how we can get around the issue?

    hey, i got the similar problem, logging like this
    2012-11-12
    18:50:12
    23434
    (e)2661034
    Connect failed ( , 5779212 ) : Connect failed: Connection refused (111)
    2012-11-12
    18:50:54
    23434
    (e)2661034
    Connect failed ( , 5779212 ) : Connect failed: Connection refused (111)
    2012-11-12
    18:51:36
    23434
    (e)2661034
    Connect failed ( , 1166880400 ) : Connect failed: Connection refused (111)
    2012-11-12
    18:54:14
    23434
    (e)2661034
    Connect failed ( , 1175301776 ) : Connect failed: Connection refused (111)
    2012-11-12
    18:54:55
    23434
    (e)2661034
    Connect failed ( , 1164775056 ) : Connect failed: Connection refused (111)
    2012-11-12
    18:55:37
    23434
    (e)2661034
    Connect failed ( , 16 ) : Connect failed: Connection refused (111)
    2012-11-12
    19:13:08
    23434
    (e)2661034
    Connect failed ( , 1158459024 ) : Connect failed: Connection refused (111)
    it seems that the port number is invalid, but we never use such ports.

  • Must i have FMS to publish a stream from my camera ?

    hello
    i am building an live streaming website and i am use
    1- FMS
    2- Apache webserver
    i have made the subcriber and i works well .
    but i need to build the publisher to allow users to broadcast thier stream from thier cameras.
    i have tested a publisher which was build using actionscript and it didn't work untill i have installed the fms on my localhost , but i need a publisher which any user can use in his web browser .

    Are you asking whether each publisher needs to have FMS on its machine in order to publish stream - then answer is NO. There is absolutely no need for someone have FMS insalled on its machine to publish stream - what he needs is microphone and camera.
    Probably your publisher code was wrong and hence it did not work - may be you just need to put correct URI of your FMS machine in your connection URI instead of "localhost"

  • FMS; multicast streaming from Digital Rapids

    Has anyone had experience configuring multicast streaming from Digital Rapids encoders to an FMS 4.5 server? I can stream RTMP to the FMS server and access the video with an embedded Flash player easily enough, but I'm interested in setting up the FMS to allow clients to access a multicast stream. Most Adobe support documentation refers to Adobe Media Encoder Live for the multicast connection configs, not necessarily non-Adobe encoders, so I'm missing a step or two.
    Thanks,
    Hugh

    Following is the link to setup multicast streaming:
    http://help.adobe.com/en_US/flashmediaserver/devguide/WS7812b00092aae0 dc-2829dcd012a54a3ed1a-8000.html
    Instead of publishing from Flash Media Live Encoder, you can publish from DR Encoder by making an "rtmp" connection to the "multicast" app on the AMS server and then start publishing to that app from the encoder using the "Publish Stream Name" generated by Multicast Config Tool.

  • Trying to set up my video site to stream from the "fms server." Any Idea?

    I am trying to set up my video site to stream from the “fms server” and the instruction stated that I should create my own new folder in the application directory on the “fms server,” and I have created my directory, which I called “brigma_streams”, and I have copied files from {FMS-Install-Dir}/ sample/Application/vod to my new folder.
    I also configured the vod service in the FMS-Install-Dir/applications/(in my-New-Folder/Application.xml file).
    Here is the sample of my configuration below:
    <Streams>/;${BRIGMA_STREAMS_VOD_COMMON_DIR}</Streams>
    <Streams>/;${BRIGMA_STREAMS_VOD_DIR}</Streams>
    And here is an example on how I modified to my XML streaming:
    src="rtmp://localhost/inetpub/wwwroot/brigma_streams/SanfordNSons768K_002.f4v"
    thumb="thumbs/SanfordNSons768K_002.jpg" />
    After all these configuration and modification it still didn’t work at all when I tested the video in streaming mode. Could some one please take a look at and point me to the right direction. Thanks in advance.

    Hi,
    After adding the configurations to the Application.xml file, you also need to add those entries to the FMS.ini file (in the conf folder). Please add those entries (similar to VOD_ entries) if not already added.
    Once that step is also done, the src RTMP url will look like this : rtmp://localhost/<name of your application folder>/mp4:<stream-name-with-extension>

  • Sending Live Stream from one FMS to another FMS

    Hey,
    Here's what I would like to do:
    1. The Flash Media Encoder sends a live stream to FMS 1
    2. On FMS 1, a connection to FMS 2 is set up and the live
    stream is sent to FMS 2.
    3. Every second, a message with metadata is sent to FMS 2
    using Stream.send()
    4. A Client connecting to FMS 2 receives the stream and the
    metadata that was sent along with it.
    I know this sounds pretty confusing, but the main problem is,
    that I don't have access to the FMS 2, so I can't call
    Stream.send() there. First I thought the solution would be using
    Stream.play() with a remote connection, but when I call the
    Stream.send() method nothing happens on the client side.
    Then I thought I could do the whole thing by using a client
    side application that connects to FMS 1, receives the stream,
    embeds the metadata and publishes it to FMS 2. Here's the code I
    used:
    // Connect to FMS 1 to get stream
    client_nc.connect("rtmp://localhost/encoder_stream/room_01",
    "Client");
    // Create input stream
    in_ns = new NetStream(client_nc);
    // Connect to FMS 2
    akamai_nc.connect("rtmp://localhost/akamai/room_01",
    "Client");
    // Create new stream, feed with in_ns and send to FMS2
    out_ns = new NetStream(akamai_nc);
    out_ns.publish("stream");
    out_ns.attachVideo(in_ns);
    Unfortunately the attachVideo method only accepts a camera
    and not a netstream object.
    So this is where I'm standing now... anyone any ideas?
    thanks

    Hello,
    i've asked our Akamai contact and they say it's not possible
    to install any scripts on their servers. I think the only way is to
    push the stream from FMS1 to FMS2, but since FMS doesn't support a
    push method, there i have to find another way *sigh*
    I've heard about FMS version 3 coming up soon, and I'd really
    like to play around with the alpha version. Any idea where you can
    get it from? On Steve Wolkoffs blog it says the new FMS is going to
    support a push method:
    http://blogs.adobe.com/dreaming/2006/10/fmsnext_feature_open_thread.html
    I've also played around with the Red5 server, but I couldn't
    find anything there to achieve a server side push method. Does
    anyone have any experience with Red5 and live streaming?
    Cheers!

  • Streaming FLV from FMS to MediaDisplay

    Hello,
    Is it possible to stream an FLV from FMS to a MediaDisplay
    component for playback? I know this can be done with the Video
    Object and with the FLVPlayback component. I explored the
    MediaDisplay class and it looks like it has the capability but I
    cannot find documentation on how to implement it.
    Thank you.

    And one reason for writing your own is that many of the
    components are buggy, or "quirky" at best. For example, the
    FLVPlayback component had (may still have) a major bug where if you
    attempted to open a file that didn't exist (say it got deleted or
    you simply specified the wrong filename), then the component was
    essentially "dead". You could NOT request it to open a different
    file, even if you correctly specified the new file.
    I reported this to Macromedia and they acknowledged it was a
    bug. The only work around was to use the lower level "stream" and
    "connection" objects and write your own.
    The major problem with writing your own is that it requires
    LOTS of work. And while you do have complete control over
    everything, the underlying Macromedia API is very poor. If you are
    a purist engineer, you will cringe at the "hacks" you must do to
    make your own MediaPlayer "control". Fortunately, Macromedia makes
    the code to their player available to everyone (as part of the
    Flash 8 Pro install). And when you look at their code, you will see
    those hacks which will make you cringe as well...

  • How can you record stream from a webcam like YouTube does it

    We need to create a webcam stream recorder with FMS which should be able to record stream in some predefined quality (128000/bandwidth,95/quality) and will work also in the situation when the user doesn't have enough bandwidth to transfer this stream in realtime.  YouTube has a solution which is using something like a buffer and when the user stops recording they continue to send video data to the server until the stream is completely recorded.  We are recording the stream from our user's webcam, but when the bandwidth is not consistent or not enough, we are losing video data and ending up with poor quality recordings. What we need is that the record stream is buffered on the user's computer and the video data continues to be sent to our server even after the user has finished recording so that we end up with the complete stream (video data). We need some idea how to do this - which specific features should we used for this solution?

    Does it have to be a live solution? Or can you have the user record locally and then upload to your FMS server?

  • When FMLE stopped,Remote RTMP stream to FMS 4.5 with rtmfp?

    When FMLE stopped,Remote RTMP stream to FMS 4.5 with rtmfp?
    edit  "applications/multicast/main.asc" ?
    HELP ME !!! THANKS!!!
    * File: main.asc
    * The server-side portion of the multicast sample application.
    * This app accepts publish and unpublish requests from FMLE, and republishes
    * the live stream from FMLE into a target Flash Group.
    // General Constants
    // "Constants" representing multicast event types.
    var TYPE_FUSION = 1;
    var TYPE_IP = 2;
    var TYPE_P2P = 3;
    // StreamContext Description, Constants and Functions
    * Type: StreamContext
    * This application tracks the context for live streams published to the server
    * that are being republished into a Flash Group. The StreamContext "type" used
    * for this is just an Object containing the following members:
    *   client         - The encoding/publishing client.
    *   streamName     - The source Stream name as published by the client.
    *   type           - The multicast event type.
    *   groupspec      - The groupspec identifying the Flash Group and capabilities.
    *   address        - IP multicast address (optional for pure P2P events).
    *   netConnection  - A loopback NetConnection used for the mcastNetStream.
    *   mcastNetStream - The NetStream used to republish the source Stream into
    *                    the Flash Group.
    *   netGroup       - An (optional) NetGroup handle for the target Group.
    *                    Only present for Fusion or P2P events.
    *   state          - One of the state constants defined immediately below
    *                    this comment.
    var STATE_INIT            = 0; // Starting state for a StreamContext.
    var STATE_CONNECTING      = 1; // Establishing loop-back connection.
    var STATE_CONNECTED       = 2; // Connection established.
    var STATE_PUBLISH_PENDING = 3; // Attempting to publish.
    var STATE_REPUBLISHING    = 4; // Actively republishing to multicast.
    var STATE_UNPUBLISHING    = 5; // Shutting down multicast republish.
    var STATE_UNPUBLISHED     = 6; // Unpublished successfully.
    var STATE_DISCONNECTING   = 7; // Shutting down loopback connection.
    var STATE_DISCONNECTED    = 8; // Connection shut down. Done.
    * Registers a source Stream published by the specified client, along with the
    * context for the multicast event, as a StreamContext Object.
    * @param client - The Client publishing the stream.
    * @param streamName - The source Stream name.
    * @param params - The parameters resulting from parsing the source Stream's
    *                 query string.
    * @return The new StreamContext Object for the registered Stream.
    function registerStream(client, streamName, params)
        var streamContext = { "client": client,
                              "streamName": streamName,
                              "type": params["fms.multicast.type"],
                              "groupspec": params["fms.multicast.groupspec"] };
    if (params["fms.multicast.interface"])
      streamContext["interfaceAddress"] = params["fms.multicast.interface"];
        if (params["fms.multicast.address"])
            streamContext["address"] = params["fms.multicast.address"],
        streamContext.state = STATE_INIT;
        updateStreamContextLookups(streamContext);
        trace("Registered multicast context for source stream: " + streamName);
        return streamContext;
    * Updates the indexed lookups installed for the passed StreamContext Object
    * with the application.
    * @param streamContext - The StreamContext Object to (re)index.
    function updateStreamContextLookups(streamContext)
        application.streamTable[streamContext.streamName] = streamContext;
        if (streamContext.netConnection)
            application.netConnTable[streamContext.netConnection] = streamContext;
        if (streamContext.mcastNetStream)
            application.mcastNetStreamTable[streamContext.mcastNetStream] = streamContext;
        if (streamContext.netGroup)
            application.netGroupTable[streamContext.netGroup] = streamContext;
    * Provides access to the StreamContext Object for a registered source Stream
    * by name.
    * @param streamName - A registered source Stream name.
    * @return The associated StreamContext Object; undefined if the source Stream
    *         name is not registered.
    function getStreamContextForSourceStream(streamName)
        return application.streamTable[streamName];
    * Provides access to the StreamContext Object for a given server-side
    * NetConnection hosting a multicast NetStream.
    * @param netConnection - A server-side NetConnection.
    * @return The associated StreamContext Object; undefined if the passed
    *         NetConnection is not indexed to a StreamContext.
    function getStreamContextForNetConnection(netConnection)
        return application.netConnTable[netConnection];
    * Provides access to the StreamContext Object for a given multicast NetStream.
    * @param netStream - A multicast NetStream.
    * @return The associated StreamContext Object; undefined if the passed
    *         NetStream is not indexed to a StreamContext.
    function getStreamContextForMulticastNetStream(netStream)
        return application.mcastNetStreamTable[netStream];
    * Provides access to the StreamContext Object for a given NetGroup associated
    * with a multicast NetStream.
    * @param netGroup - A NetGroup.
    * @return The associated StreamContext Object; undefined if the passed
    *         NetGroup is not indexed to a StreamContext.
    function getStreamContextForNetGroup(netGroup)
        return application.netGroupTable[netGroup];
    * Unregisters the StreamContext from the application.
    * @param streamContext - The StreamContext Object to unregister.
    function unregisterStreamContext(streamContext)
        if (streamContext.netConnection)
            delete application.netConnTable[streamContext.netConnection];
        if (streamContext.mcastNetStream)
            delete application.mcastNetStreamTable[streamContext.mcastNetStream];
        if (streamContext.netGroup)
            delete application.netGroupTable[streamContext.netGroup];
        trace("Unregistered multicast context for source stream: " +
              streamContext.streamName);
    // Application callback functions
    * Initializes global StreamContext lookup tables.
    application.onAppStart = function()
        application.streamTable = {};
        application.netConnTable = {};
        application.mcastNetStreamTable = {};
        application.netGroupTable = {};
    * Handles a publish event for the application by validating the request
    * and bridging the published stream into a target Flash Group. Invalid
    * publish requests are ignored and the publishing client's connection
    * is closed.
    * @param client - The publishing client.
    * @param stream - The published stream.
    application.onPublish = function(client, stream)
        //trace("Handling publish request for source stream: " + stream.name);
        var params = parseQueryString(stream.publishQueryString);
        if (!validateStreamParams(params))
            application.disconnect(client);
            return;
        var prevContext = getStreamContextForSourceStream(stream.name);
        if (prevContext)
            forceCloseStreamContext(prevContext);
        // Register source Stream, and kick off the async process that will
        // eventually wire-up the associated multicast NetStream.
        var streamContext = registerStream(client, stream.name, params);
        openMulticastConnection(streamContext);
    * Handles an unpublish event for the application by shutting down
    * any associated multicast NetStream.
    * @param client - The unpublishing client.
    * @param stream - The source stream being unpublished.
    application.onUnpublish = function(client, stream)
        trace("Handling unpublish request for source stream: " + stream.name);
        var streamContext = getStreamContextForSourceStream(stream.name);
        if (streamContext && (streamContext.state <= STATE_REPUBLISHING))
            destroyStreamContext(streamContext);
    // Callback functions for NetConnection and multicast NetStream/NetGroup wiring.
    * First step in setting up a republished multicast NetStream; open the loopback
    * connection it requires.
    * @param streamContext - The StreamContext Object for the publish event.
    function openMulticastConnection(streamContext)
        var nc = new NetConnection();
        nc.onStatus = netConnectionStatusHandler;
        streamContext.netConnection = nc;
        updateStreamContextLookups(streamContext);
        streamContext.state = STATE_CONNECTING;
        nc.connect(resetUriProtocol(streamContext.client.uri, "rtmfp"));
    * Status event handler for the loopback NetConnection used by the multicast
    * NetStream. Advances setup upon successful connection, or triggers or advances
    * tear-down as a result of connection loss or an unpublish and clean shutdown.
    * @param info - The status info Object.
    function netConnectionStatusHandler(info)
        var streamContext = getStreamContextForNetConnection(this);
        trace("Multicast NetConnection Status: " + info.code +
              (streamContext ? ", Source stream: " + streamContext.streamName : ", Not associated with a source stream."));
        if (streamContext)
            switch (info.code)
            case "NetConnection.Connect.Success":
                streamContext.state = STATE_CONNECTED;
                // If event type is Fusion or P2p, wire up a NetGroup for neighbor
                // bootstrapping and maintenance ahead of (re)publishing the stream.
                var type = streamContext.type;
                if (type == TYPE_FUSION || type == TYPE_P2P)
                    initNetGroup(streamContext);
                else
                    initMulticastNetStream(streamContext);
                break;
            case "NetConnection.Connect.Failed":
            case "NetConnection.Connect.Rejected":
            case "NetConnection.Connect.AppShutdown":
                trace("MULTICAST PUBLISH ERROR: Failed to establish server-side NetConnection for use by multicast NetStream. " +
                      "Status code: " + info.code + ", description: " + info.description + ", Source stream: " +
                      streamContext.streamName);
                streamContext.state = STATE_DISCONNECTED;
                destroyStreamContext(streamContext);
                break;
            case "NetConnection.Connect.Closed":
                if (streamContext.state < STATE_DISCONNECTING)
                    trace("MULTICAST PUBLISH ERROR: Unexpected server-side NetConnection close. " +
                         "Status code: " + info.code + ", description: " + info.description + ", Source stream: " +
                         streamContext.streamName);
                streamContext.state = STATE_DISCONNECTED;
                destroyStreamContext(streamContext);
                break;
            default:
                // Ignore.
    * Initializes the multicast NetGroup following a successful connection of its
    * underlying loopback NetConnection. This hook is optional and only runs for
    * event types of Fusion and pure P2P.
    * @param streamContext - The StreamContext Object for the multicast publish.
    function initNetGroup(streamContext)
        var ng = null;
        try
            ng = new NetGroup(streamContext.netConnection, streamContext.groupspec);
        catch (e)
            trace("MULTICAST PUBLISH ERROR: Failed to construct NetGroup. Error: "
                  + e.name + (e.message ? " " + e.message : "") +
                  ", Source stream: " + streamContext.streamName);
            destroyStreamContext(streamContext);
            return;
        ng.onStatus = netGroupStatusHandler;
        streamContext.netGroup = ng;
        updateStreamContextLookups(streamContext);
    * Status event handler for the multicast NetGroup. Advances to initializing the
    * multicast NetStream upon successful NetGroup connect. Otherwise, triggers
    * shut down.
    * @param info - The status info Object.
    function netGroupStatusHandler(info)
        var streamContext = getStreamContextForNetGroup(this);
        trace("Multicast NetGroup Status: " + info.code +
              (streamContext ? ", Source stream: " + streamContext.streamName : ", Not associated with a source stream."))
        if (streamContext)
            switch (info.code)
            case "NetGroup.Connect.Success":
                initMulticastNetStream(streamContext);
                break;
            case "NetGroup.Connect.Failed":
            case "NetGroup.Connect.Rejected":
                trace("MULTICAST PUBLISH ERROR: Failed to connect multicast NetGroup. " +
                      "Status code: " + info.code + ", description: " + info.description +
                      ", Source stream: " + streamContext.streamName);
                destroyStreamContext(streamContext);
                break;
            case "NetGroup.MulticastStream.UnpublishNotify":
                // At this point, multicast publishers will be notified;
                // continue shut down.
                destroyStreamContext(streamContext);
                break;
            default:
                // Ignore.
    * Initializes the multicast NetStream following a successful connection of its
    * underlying loopback NetConnection.
    * @param streamContext - The StreamContext Object for the multicast publish.
    function initMulticastNetStream(streamContext)
        var ns = null;
        try
            ns = new NetStream(streamContext.netConnection, streamContext.groupspec);
        catch (e)
            trace("MULTICAST PUBLISH ERROR: Failed to construct multicast NetStream. Error: " +
                  e.name + (e.message ? " " + e.message : "") +
                  ", Source stream: " + streamContext.streamName);
            destroyStreamContext(streamContext);
            return;
        var type = streamContext.type;
        if (type == TYPE_FUSION || type == TYPE_IP)
      var iAddr = (streamContext.interfaceAddress) ? streamContext.interfaceAddress : null;
            try
                trace("Multicast NetStream will publish to IP address: " + streamContext.address +
          " on interface address: " + ((iAddr) ? iAddr : "default") +
                      ", Source stream: " + streamContext.streamName);
                ns.setIPMulticastPublishAddress(streamContext.address, iAddr);
            catch (e2)
                trace("MULTICAST PUBLISH ERROR: Failed to assign IP multicast address and port for publishing. Address: "
                      + streamContext.address + " on interface address: " + ((iAddr) ? iAddr : "default") +
          ", Source stream: " + streamContext.streamName);
                destroyStreamContext(streamContext);
                return;
        ns.onStatus = netStreamStatusHandler;
        streamContext.mcastNetStream = ns;
        updateStreamContextLookups(streamContext);
        streamContext.state = STATE_PUBLISH_PENDING;
    * Status event handler for the multicast NetStream. Advances state upon successful
    * connect and publish, or upon successful unpublish. Triggers tear-down if we fail
    * to attach to a source Stream to republish.
    * @param info - The status info Object.
    function netStreamStatusHandler(info)
        var streamContext = getStreamContextForMulticastNetStream(this);
        trace("Multicast NetStream Status: " + info.code +
              (streamContext ? ", Source stream: " + streamContext.streamName : ", Not associated with a source stream."))
        if (streamContext)
            switch (info.code)
            case "NetStream.Connect.Success":
                if (!this.attach(Stream.get(streamContext.streamName)))
                    trace("MULTICAST PUBLISH ERROR: Failed to attach multicast NetStream to source. Source stream: " +
                          streamContext.streamName);
                    destroyStreamContext(streamContext);
        //var stream;
                //stream = Stream.get("liveStream");
                    //return;
                }else{
                this.publish(streamContext.streamName, "live");
                break;
            case "NetStream.Publish.Start":
                streamContext.state = STATE_REPUBLISHING;
                break;
            case "NetStream.Unpublish.Success":
                streamContext.state = STATE_UNPUBLISHED;
                // Wait for unpublish notify event if the context has a NetGroup;
                // otherwise continue shut down now.
                if (!streamContext.netGroup)
                    destroyStreamContext(streamContext);
                    break;
            default:
                // Ignore.
    * The common tear-down hook. Other functions that manage or shut down
    * the StreamContext Object delegate to this function upon detecting a fatal
    * error or during shut down.
    * @param streamContext - The StreamContext Object for the source Stream and
    *                        (potentially wired-up) multicast NetStream.
    function destroyStreamContext(streamContext)
        // Unregister by Stream name immediately; lookups by NetConnection, NetGroup
        // and multicast NetStream remain in place until tear-down is complete.
        delete application.streamTable[streamContext.streamName];
        switch (streamContext.state)
        case STATE_REPUBLISHING:
            streamContext.mcastNetStream.attach(false);
            streamContext.mcastNetStream.publish(false);
            streamContext.state = STATE_UNPUBLISHING;
            return;
        case STATE_CONNECTING:
        case STATE_CONNECTED:
        case STATE_PUBLISH_PENDING:
        case STATE_UNPUBLISHED:
            // Delete status handler callbacks and cleanup in case we arrived here
            // as a result of a force close.
            if (streamContext.netGroup)
                delete streamContext.netGroup.onStatus;
            if (streamContext.mcastNetStream)
                streamContext.mcastNetStream.attach(false);
                delete streamContext.mcastNetStream.onStatus;
            streamContext.netConnection.close();
            streamContext.state = STATE_DISCONNECTING;
            return;
        default:
            // Fall-through.
        // At this point, we either never got to the republishing state or we've
        // proceeded through the clean shut down steps above. Everything for this
        // StreamContext can go away.
        unregisterStreamContext(streamContext);
    * Utility function used to force close a StreamContext in the event that we
    * start handling a republish of a Source stream before the context for its
    * prior incarnation has been torn down.
    * @param streamContext - The StreamContext Object for the source Stream.
    function forceCloseStreamContext(streamContext)
        trace("Force closing previous multicast context for source stream: " + stream.name);
        prevContext.state = STATE_UNPUBLISHED;
        destroyStreamContext(prevContext);
    // Client callback functions
    * A no-op. Answers the RPC in the fashion expected by encoders, but the real
    * work happens in application.onPublish.
    * @param streamName - The name of the stream being published.
    Client.prototype.FCPublish = function(streamName)
        this.call("onFCPublish",
                  null,
                  {code:"NetStream.Publish.Start", description:streamName});
    * A no-op. Answers the RPC in the fashion expected by encoders, but the real
    * work happens in application.onUnpublish.
    * @param streamName - The name of the stream being unpublished.
    Client.prototype.FCUnpublish = function(streamName)
        this.call("onFCUnpublish",
                  null,
                  {code:"NetStream.Unpublish.Success", description:streamName});
    * If the client invoker's ip matches what was captured for a currently publishing
    * stream, assume it's the same client and reset the stream. Otherwise, ignore.
    * @param streamName - The name of the stream being released.
    Client.prototype.releaseStream = function(streamName)
        var streamContext = getStreamContextForSourceStream(streamName);
        if (streamContext &&
            (streamContext.client.ip == this.ip) &&
            (streamContext.state <= STATE_REPUBLISHING))
            // Only tear-down an orphaned stream if it's not
            // already shutting down (see state check above).
            destroyStreamContext(streamContext);
    // Helper functions
    * Validates that a newly published stream has correct metadata (e.g. query
    * string parameters) to republish into a Flash Group. This function also
    * writes a message to the application log for any validation failures.
    * @param params - The quiery string parameters for the source Stream.
    * @return true if valid; otherwise false.
    function validateStreamParams(params)
        var empty = true;
        for (var param in params)
           empty = false;
           break;
        if (empty)
            trace("MULTICAST PUBLISH ERROR: Stream query string is empty.");
            return false;
        if (!params["fms.multicast.type"])
    trace("MULTICAST PUBLISH ERROR: Stream query string does not specify a 'fms.multicast.type'.");
            return false;
        var type = params["fms.multicast.type"];
        if (type != 1 && type != 2 && type != 3)
            trace("MULTICAST PUBLISH ERROR: 'fms.multicast.type' has invalid value: " + type);
            return false;
        if (!params["fms.multicast.groupspec"])
            trace("MULTICAST PUBLISH ERROR: Stream query string does not specify a 'fms.multicast.groupspec'.");
            return false;
        // Fusion and IP require an address:port.
        if ((type == 1 || type == 2) &&
            !params["fms.multicast.address"])
            trace("MULTICAST PUBLISH ERROR: Stream query string does not specify a 'fms.multicast.address'.");
            return false;
        // No obvious validation issues.
        return true;
    * Parses the supplied query string, and if valid, returns an Object populated
    * with the name-value pairs contained in the query string. The simple processing
    * here does not preserve multiple name-value pairings having the same name; the
    * last value seen wins. Parameters with no value are mapped to "" (empty String)
    * in the returned Object.
    * @param queryString - A query string portion of a URI, not including the leading
    *                     '?' character.
    * @return An Object containing a key-value mapping for each name-value parameter
    *         defined in the query string; Object is empty if the query string is
    *         invalid.
    function parseQueryString(queryString)
        var result = {};
        var decoded = "";
        try
            decoded = decodeURIComponent(queryString);
        catch (e) // Invalid URI component; return empty result.
            return result;
        if (decoded.length)
            var params = decoded.split('&');
            for (var i in params)
                var pair = params[i];
         var sepIndex = pair.indexOf('=');
                if (sepIndex != -1)
                    var name = pair.substr(0, sepIndex);
                    result[name] = pair.substr(sepIndex + 1);
                else
                    result[pair] = "";
        return result;
    * Utility function used to swap out the protocol (scheme) portion
    * of a given URI with an alternate.
    * @param uri - The full URI.
    * @param desiredProtocol - The replacement protocol.
    * @return The URI with its protocol replaced.
    function resetUriProtocol(uri, desiredProtocol)
        var sepIndex = uri.indexOf("://");
        return desiredProtocol + uri.substr(sepIndex);

    HELP ME !!! THANKS!!!

  • Stream from foreign server possible?

    Hi,
    I urgently need a feedback !
    I need to be 100% sure whether or not the following scenario is possible within Adobe Flash Player / Adome Media Server security contrains:
    website and swf file are hoted on server with given IP number xxx.xxx.xxx.xxx
    media and streaming application are hosted on server with IP number yyy.yyy.yyy.yyy
    generally speaking:
    will yyy media server accept connection from xxx client ?
    will xxx client accept streams from yyy server ?
    I urgently need this information as I need to decide some specific media streaming solution for the customer.
    Of course - I mean both servers being hosted (virtual) services rented by the customer at third party provididers.
    Please feedback asap!
    Thank you!

    Yes this should not be an issue , a client from "xxx" can connect to FMS at "yyy" and stream the data. There should not be problem at both ends.

Maybe you are looking for

  • "Read From Binary File" function Help ambiguity

    I must be getting tired, but for some reason a doubt crept in my mind as I was designing a new piece of code this morning: "is the "Read From Binary File" using the last file position or is it starting from the beginning of the file?" "That's a stupi

  • PDF in Flex

    Is it possible to display PDF's inside of Flex web app, NOT Air. I know I can open a new window with JavaScript but I'm not allowed to do that.

  • Plug-in compatibility

    Would it be compatible with iMovie HD plug-ins ? I've a lot of transitions and effects in my iMovie HD setup (slick studio) and i want to know if they will work... thank you. bye

  • ALV tree using Objects

    Hi, I am making an ALV tree using objects and the code is crashing due to an error in the Screen 100 ( which I am using ). I tried to implement the example provided at http://www.sapdevelopment.co.uk/reporting/alv/alvtree.htm but that is not working.

  • Recovery 8.1

    I ave an HP Envy (AMD10) 8gb RAAM etc which came with Windows 8. I created a recovery flash drive but pretty quickly after that updated to Windows 8.1 when it became available. Now the computer says I am allowed to create only one recovery flash driv