Expand my Community achievements bar.

SOLVED

recording beta question - seeking in recorded streams and syncing playback

Avatar

Level 4

hi lccs, some initial questions for you as i get started on the beta..

you say audio and video are saved in separate FLVs on the client server.  does LCCS ensure that audio/video sync is maintained during playback?

how are the recorded streams delivered during playback?  can you seek into these streams? e.g. if i have a recording of a video chat, can i use a timeline to seek forward and back through that video?

and finally - i will want to play back a recorded audio video chat between two users.  will LCCS take care of synchronization between these four streams? (two video, two audio) or do i need to build a synchronized buffering strategy to achieve this?

1 Accepted Solution

Avatar

Correct answer by
Former Community Member

To reiterate Raff's point - when you setup a ConnectSessionContainer with a

PlaybackAuthenticator (essentially, a "playback application"), that

ConnectSession does all the work of synchronizing streams for you. As Raff

says, you can build a timeline and seek within it - ConnectSession's

archiveManager exposes all aspects of the playback to you.

In fact, here's a basic seek bar you could try :

<s:HSlider width="800" maximum="{cSession.archiveManager.totalTime}"

value="{cSession.archiveManager.currentTime}" id="slider"

change="cSession.archiveManager.seek(slider.value)"/>

lastly, as Raff also says, you're not restricted to playing back the exact

application you recorded. If you had, say, audio/video chat plus text chat

recorded, and all you wanted for playback was the A/V, remove the text chat

from your playback application (and delete the chat FLV from the recording

zip, to save on bandwidth), and your playback app should just work. You can

also totally re-layout how your app looks for playback as compared to

"live", or allow your users to manipulate the layout or contents of what's

being played back as they watch the recording. We think this will allow for

some really interesting, innovative applications.

hope that helps,

nigel

View solution in original post

4 Replies

Avatar

Employee

When recording FMS stores all streams and collection nodes as separate files. The playback application takes care of synchronizing the playback so when using the standard features there is really nothing you need to do on the client side.

Streams are also seekable (I think you seek by changing the current "position" in ArchiveManager and again, the playback code takes care of synchronizing the operation on all streams.

If you want to playback on audio and video there are two options:

- build a playback application that only has your A/V components and use the standard playback feature

- extract the a/v files from a recording (you'll have one file for audio and one for video, not one for each user), host them on your server and write an application that plays them back synchronized (but you'll have to write that code yourself)

Avatar

Correct answer by
Former Community Member

To reiterate Raff's point - when you setup a ConnectSessionContainer with a

PlaybackAuthenticator (essentially, a "playback application"), that

ConnectSession does all the work of synchronizing streams for you. As Raff

says, you can build a timeline and seek within it - ConnectSession's

archiveManager exposes all aspects of the playback to you.

In fact, here's a basic seek bar you could try :

<s:HSlider width="800" maximum="{cSession.archiveManager.totalTime}"

value="{cSession.archiveManager.currentTime}" id="slider"

change="cSession.archiveManager.seek(slider.value)"/>

lastly, as Raff also says, you're not restricted to playing back the exact

application you recorded. If you had, say, audio/video chat plus text chat

recorded, and all you wanted for playback was the A/V, remove the text chat

from your playback application (and delete the chat FLV from the recording

zip, to save on bandwidth), and your playback app should just work. You can

also totally re-layout how your app looks for playback as compared to

"live", or allow your users to manipulate the layout or contents of what's

being played back as they watch the recording. We think this will allow for

some really interesting, innovative applications.

hope that helps,

nigel

Avatar

Level 4

raff, nigel, thank you kindly for the responses.

to clarify, the recorded streams which are stored on my repository server - they're streamed to the client during playback, correct?  i.e. not completely downloaded to the client? 

that's great news that synchronization is automatic, and thanks for the timeline snippet, that's exactly the confirmation i was looking for.

looking forward to developing with this.

Avatar

Former Community Member

You got it - they stream from you to LCCS, and then to your clients.

nigel

The following has evaluated to null or missing: ==> liqladmin("SELECT id, value FROM metrics WHERE id = 'net_accepted_solutions' and user.id = '${acceptedAnswer.author.id}'").data.items [in template "analytics-container" at line 83, column 41] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign answerAuthorNetSolutions = li... [in template "analytics-container" at line 83, column 5] ----