8 Replies Latest reply: Jun 4, 2009 1:06 PM by mrwizzer2 RSS

    Live Dynamic Streaming DVR?

    mrwizzer2 Community Member

      I'm finally getting the hang of the Dynamic Streaming of live video content via FMS 3.5.2 and FMLE, and to a lesser extent, the DVR functionality that has newly been made available.

       

      Inquiring minds want to know...  is it possible to add DVR functionality to live Dynamically Streamed video content?

       

      In other words, I want to be able to provide DVR capability to our live videos that are being streamed at 3 different bitrates. 

       

      Is that currently possible?

       

      Jodi, can you ask David Hassoun, who seems to be the leading authority at the moment, if this is possible, and if so, if there's a tutorial we can access?

       

      Thanks!

        • 1. Re: Live Dynamic Streaming DVR?
          Jody Bleyle Community Member

          Yes -- you can use dynamic streaming and DVR streaming together.

           

          To stream a DVR stream from FMLE, you must use the DVRCast application (or roll your own). Make sure you have the DVRCast app copied to rootinstall/applications/dvrcast_origin.

           

          In FMLE, select the number of streams you want to send (up to 3). Use the %i parameter to create stream names (for example, dvrstream%i creates the streams dvrstream1, dvrstream2, and dvrstream3).

           

          You can use FLVPlayback 2.5 in either Flash or Flex, or you can build your own video player. The DynamicStream classes come with a Flex example that you can modify to connect to dvrcast_origin instead of to vod.

           

          If you're using FLVPlayback 2.5, set isDVR to true.

           

          At a basic level DVR isn't complicated -- every stream published with the "record" or "append" flag is a DVR stream. When you subscribe to a DVR stream you're subscribing to a vod (recorded) stream, not to a live stream. The stream seems live because you're only a split second behind live.

           

          To jump forward to live, call NetStream.seek() and pass it an incredibly high number. If you're using the DynamicStream class, call DynamicStream.seek(). To jump back to the beginning of the recording, pass 0.

           

          Lemme know if you need more help getting started.

           

          Jody

          • 2. Re: Live Dynamic Streaming DVR?
            mrwizzer2 Community Member

            Thanks for the informative reponse, Jody. 

             

            I'll give it a whirl and let you know how I do.

             

            Much thanks!

             

            Mike

            • 3. Re: Live Dynamic Streaming DVR?
              mrwizzer2 Community Member

              A brief side issue...

               

              Jody, you mentioned that the Dynamic Stream class includes a Flex example...  I'm not familiar with Flex.  Can I use Flash to edit the same file, or do I need to familiarize myself with Flex? 

               

              Is Flex just a simplified version of Flash, or is it an entirely different animal?

              • 4. Re: Live Dynamic Streaming DVR?
                mrwizzer2 Community Member

                Jody, when you say   'every stream published with the "record" or "append" flag is a DVR stream' , does that mean that within the Flash Media Live Encoder you need to put a check in the checkbox next to DVR Auto Record? 

                 

                If not, how do you "record" or "append" within FMLE?

                 

                Or, is this something that needs to be coded in the AS file instead?

                • 5. Partial Success! Live Dynamic Streaming DVR
                  mrwizzer2 Community Member

                  Forgive me for the numerous responses.  I'm getting VERY close to having this!  I am indeed getting a little DVR action!

                   

                  But so far, it's limited to "Pause", which works great.

                   

                  But when I hit the "Play" button (coded with _ds.resume(); ), I get a long pause with frozen video for about fifteen seconds.  I assume it has something to do with the buffer emptying, as outlined in this technote:  http://go.adobe.com/kb/ts_kb403029_en-us   However, the technote says I should be good to go with FMS 3.5 and Flash Player 10, which I'm currently using.

                   

                  Also, Rewind (using either "_ds.seek(0);"  or " _ds.seek(_ds.time - 5);" doesn't rewind the video, but instead takes the video to the current moment in time before pausing it for 15 or so seconds.

                   

                  Last thing I'll mention here... I'm confused as to whether I should be using DynamicStreamInstance.start = -2   or  DynamicStreamInstance.start = -1;  (I understand -1 is for live video, -2 for VOD -- if I understand correctly, this live dynamic streaming dvr stuff is more closely affiliated to VOD than live, right? 

                   

                  Please help me close the final remaining gap!

                   

                  Thanks

                   

                  PS - I've attached my .as file in case it helps

                  • 6. Re: Partial Success! Live Dynamic Streaming DVR
                    mrwizzer2 Community Member

                    Forgive me for the numerous responses.  I'm getting VERY close to having this!  I am indeed getting a little DVR action!

                     

                    But so far, it's limited to "Pause", which works great.

                     

                    But when I hit the "Play" button (coded with _ds.resume(); ), I get a long pause with frozen video for about fifteen seconds.  I assume it has something to do with the buffer emptying, as outlined in this technote:  http://go.adobe.com/kb/ts_kb403029_en-us   However, the technote says I should be good to go with FMS 3.5 and Flash Player 10, which I'm currently using.

                     

                    Also, Rewind (using either "_ds.seek(0);"  or " _ds.seek(_ds.time - 5);" doesn't rewind the video, but instead takes the video to the current moment in time before pausing it for 15 or so seconds.

                     

                    Last thing I'll mention here... I'm confused as to whether I should be using DynamicStreamInstance.start = -2   or  DynamicStreamInstance.start = -1;  (I understand -1 is for live video, -2 for VOD -- if I understand correctly, this live dynamic streaming dvr stuff is more closely affiliated to VOD than live, right?

                     

                    Please help me close the final remaining gap!

                     

                    Thanks

                     

                    PS - Let me know if you'd like to see my .as file, (I couldn't upload it for some reason)

                    • 7. Re: Partial Success! Live Dynamic Streaming DVR
                      Jody Bleyle Community Member

                      Hi Mike,

                       

                      I'm glad your app is starting to happen (who knows, you may even be done by now)... But here's my best shot at answering your questions:

                       

                      1. Flex is a framework that uses MXML, a declarative XML-based language, to describe UI layout and behaviors, and ActionScript 3 to create client logic. Flex has a big component library -- you use MXML to place the components in an app. Flex apps compile to SWF files and run in Flash Player and AIR. So the Flex example that ships with the DynamicStream class does have some ActionScript in it that you can stop out and use in Flash. the example includes an MXML file that you can open in any text editor.

                       

                      Here's more info about Flex:

                      http://www.adobe.com/products/flex/overview/

                       

                      By the way, a simple DVR sample ships with FMS: Flash Media Server 3.5\documentation\samples\dvr

                      The sample is explained in the docs:

                      http://help.adobe.com/en_US/FlashMediaServer/3.5_Deving/WS236AE81A-5319-4327-9E44-310A93CA 09C6.html#WSF121A57E-01CB-44a4-BDA8-46CD5045E80D

                       

                      2. To create a DVR stream from FLME you need to either check DVR Auto Record (starts recording when you start streaming), or click Record anytime after you start streaming.

                       

                      3. To subscribe to a stream use 0 for the start parameter -- 0 plays a recorded stream. DVR streams are just recorded streams.

                       

                       

                       

                      HTH!

                      Jody

                      • 8. Success!
                        mrwizzer2 Community Member

                        Jody!  You're my hero!

                         

                        That did it!  Where I was getting held up was my having DynamicStreamInstance.start = -1, instead of DynamicStreamInstanceStart = 0.

                         

                        That tiny change made all the difference.  Now the DVR functionality works like a DVR!

                         

                        Thanks so much for your help, you're the greatest!

                         

                        Mike