Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
Bedrock Mission!

Learn more

View all

Sign in to view all badges

Newbie question about record/playback

developer_ethan
Level 1
Level 1

I'm a newbie to this forum. So. I hope this is not a stupid question.

I have an application which I want to have record, then, playback capabilities within the same application.

I have seen examples of Playback, and examples of recording. But. Noth both together.

I wrote a simple Flex client which has two sessions. One for recording, one for playback.

When I run the application. I can create the recording with no problems.

However. I can't then playback the recording in the same application instance.

I receieve a connection rejected exception.

If I restart the application. I can playback the recording with no problems.

Here is the source to my simple client.

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

               xmlns:s="library://ns.adobe.com/flex/spark"

               xmlns:rtc="http://ns.adobe.com/rtc"

               xmlns:myutils="utils.*"

               horizontalAlign="center"

               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="initUsing(event)">

    <fx:Declarations>

        <!-- Place non-visual elements (e.g., services, value objects) here -->

       

       

    </fx:Declarations>

   

   

    <fx:Script>

       

        <![CDATA[

           

           

            import com.adobe.rtc.authentication.AdobeHSAuthenticator;

            import com.adobe.rtc.authentication.PlaybackAuthenticator;

            import com.adobe.rtc.collaboration.AudioPublisher;

            import com.adobe.rtc.collaboration.AudioSubscriber;

            import com.adobe.rtc.events.StreamEvent;

            import com.adobe.rtc.session.ConnectSession;

            import com.adobe.rtc.session.ConnectSessionContainer;

           

            import mx.containers.HBox;

            import mx.containers.VBox;

            import mx.controls.Button;

            import mx.controls.ProgressBar;

            import mx.events.FlexEvent;

           

            import spark.components.VGroup;

           

            import utils.PlaybackBar;

           

       

           

            private function initUsing(event:Event):void {

               

           

               

            }

           

            protected function audioSub_creationCompleteHandler(event:FlexEvent):void {

                // TODO Auto-generated method stub

                audioSub.subscribe();   

            }

       

           

           

            private function stopRecordingHandler(event:Event):void {

               

                rSession.archiveManager.isRecording = false;

                audioPub.stop();

            }

           

            /****

             * When published stream is received, start polling the activity level of my microphone.

             */

            private function onAudioStreamReceive(p_evt:StreamEvent):void{

                trace("Audio stream received");

                audioActivityTimer.addEventListener(TimerEvent.TIMER_COMPLETE,onTimerComplete);

                audioActivityTimer.start();

               

               

            }

            /****

             * When the stream is deleted, stop polling the

             * activity level of microphone and mark the activity progress bar to 0.

             */

            private function onAudioStreamDelete(p_evt:StreamEvent):void

            {

               

                    if (audioPub.microphone != null ) {

                        audioActivityTimer.removeEventListener(TimerEvent.TIMER_COMPLETE,onTimerComplete);

                        audioActivityTimer.stop();

                    }

                    audioActivityProgressBar.setProgress(0,100);

               

            }

           

            private function onTimerComplete(p_evt:TimerEvent):void {

               

                audioActivityTimer.start();

                if ( audioPub.isPublishing && !audioPub.isPaused ) {

                    audioActivityProgressBar.setProgress(audioPub.microphone.activityLevel,100);

                }

               

            }

           

            protected function recordLoginBtn_clickHandler(event:MouseEvent):void {

                // TODO Auto-generated method stub

                trace("inside recordLoginBtn_clickHandler");

                rSession.login();

            }

           

            protected function startPlaybackBtn_clickHandler(event:MouseEvent):void {

               

           

                currentState = "playbackMode";

                rSession.logout();

                rSession.close();

                pbSession.login();

            }

           

           

           

            protected function audioPub_creationCompleteHandler(event:FlexEvent):void {

               

               

                audioPub.addEventListener(StreamEvent.STREAM_RECEIVE,onAudioStreamReceive);

                audioPub.addEventListener(StreamEvent.STREAM_DELETE,onAudioStreamDelete);

           

            }

               

           

           

            protected function playbackLoginBtn_clickHandler(event:MouseEvent):void {

                currentState = "playbackMode";

               

                pbSession.login();

               

            }

           

            protected function startRecordingButton_clickHandler(event:MouseEvent):void {

               

                stopRecordingBtn.enabled = true;

                rSession.archiveManager.archiveID = TEST_RECORDING_1;

                rSession.roomURL = ROOM_URL;

                rSession.archiveManager.guestsAllowed = true;

                rSession.archiveManager.isRecording = true;

                audioPub.microphoneManager.micIndex = 3;

               

                audioPub.publish();

               

            }

           

            protected function stopRecordingButton_clickHandler(event:MouseEvent):void

            {

                rSession.archiveManager.isRecording = false;

                audioPub.stop();

                startPlaybackBtn.enabled = true;

                rSession.close();

                audioPub.close();

               

            }

           

           

       

           

            private var audioActivityTimer:Timer = new Timer(30,1);

            private const ROOM_URL:String = "https://collaboration.adobelivecycle.com/MYROOMURL/myfirstroom";

            private const TEST_RECORDING_1:String = "mytestrecording1";

           

           

        ]]>

    </fx:Script>

    <mx:states>       

      <mx:State name="recordMode"/>

      <mx:State name="playbackMode"/>

    </mx:states>

   

    <mx:VBox>

        <rtc:ConnectSessionContainer id="rSession" includeIn="recordMode" roomURL="{ROOM_URL}">

           

            <rtc:initialRoomSettings>

                <rtc:RoomSettings id="roomSettings" autoPromote="true" guestsMustKnock="false"/>

            </rtc:initialRoomSettings>

           

            <rtc:authenticator>

               

                <rtc:AdobeHSAuthenticator id="recAuth" userName="myusername" password="mypassword"/>

            </rtc:authenticator>

            <mx:VBox>

                <mx:HBox>

                    <mx:Button id="startRecordingBtn" label="Start Recording" click="startRecordingButton_clickHandler(event)"/>

                    <mx:Button id="stopRecordingBtn" label="Stop Recording" enabled="false" click="stopRecordingButton_clickHandler(event)"/>

                    <mx:Button id="startPlaybackBtn" label="Start Playback" enabled="false" click="startPlaybackBtn_clickHandler(event)"/>

                    <mx:Button id="playbackLoginBtn" label="Playback Login" enabled="true" click="playbackLoginBtn_clickHandler(event)"/>

                </mx:HBox>

               

                <mx:ProgressBar id="audioActivityProgressBar" x="325" y="300" width="325" height="37"

                                label="Volume" labelPlacement="center" mode="manual" paddingRight="30" color="#ff0000"/>

               

                <rtc:AudioPublisher id="audioPub" height="0" creationComplete="audioPub_creationCompleteHandler(event)"/>

               

            </mx:VBox>

           

        </rtc:ConnectSessionContainer>

       

        <rtc:ConnectSessionContainer id="pbSession" includeIn="playbackMode" autoLogin="false" archiveID="mytestrecording1" roomURL="{ROOM_URL}">

            <rtc:authenticator>

                <rtc:PlaybackAuthenticator

                    id="pbAuth"/>

            </rtc:authenticator>

           

            <mx:HBox top="10" right="10" left="10" bottom="10" verticalGap="6" horizontalAlign="center">

                <mx:VBox width="100%" height="100%" >

                    <rtc:AudioSubscriber id="audioSub" height="0" creationComplete="audioSub_creationCompleteHandler(event)"/>

                    <myutils:PlaybackBar width="100%" height="200" />

                </mx:VBox>

            </mx:HBox>

        </rtc:ConnectSessionContainer> 

       

       

       

       

       

   

    </mx:VBox>

   

   

   

   

</mx:Application>

0 Replies