Expand my Community achievements bar.

Guidelines for the Responsible Use of Generative AI in the Experience Cloud Community.
SOLVED

Audiosubscriber

Avatar

Former Community Member

I'm having problems with the AudioSubscriber - using flash10. I get the following error:

TypeError: Error #1009: Cannot access a property or method of a null object reference.

at com.adobe.rtc.collaboration::AudioSubscriber/playStreams()[C:\work\main\connect\SDKApp\payload\libs\flashOnly\player10\src\com\adobe\rtc\collaboration\AudioSubscriber.as:507]

at com.adobe.rtc.collaboration::AudioSubscriber/set publisherIDs()[C:\work\main\connect\SDKApp\payload\libs\flashOnly\player10\src\com\adobe\rtc\collaboration\AudioSubscriber.as:247]

at dk.lektieronline.view.component.audio::Audio/setUpSubscriber()[C:\Workspace\Lektier Online\source\classes\dk\lektieronline\view\component\audio\Audio.as:59]

Audio line 59 is the following line in my code:

audioSubscriber.publisherIDs = [streamPublisherID];

My code:

          public function Audio(connectsession : IConnectSession) {
               addPublisher(connectsession);
               addSubscriber(connectsession);
          }

          private function addPublisher(connectsession : IConnectSession) : void {
               var audioPublisher:AudioPublisher = new AudioPublisher();
               _userManager = audioPublisher.connectSession.userManager;
               audioPublisher.connectSession = connectsession;
               audioPublisher.subscribe();
               audioPublisher.publish();
          }

          private function addSubscriber(connectsession : IConnectSession) : void {
               audioSubscriber = new AudioSubscriber();
               audioSubscriber.connectSession = connectsession;
               audioSubscriber.addEventListener(StreamEvent.STREAM_RECEIVE, onReceiveStream);
              
               //If streams are already running
               var _streamManager : StreamManager = audioSubscriber.connectSession.streamManager;
               var _userManager : UserManager = audioSubscriber.connectSession.userManager;
              
               var publishers : Object = _streamManager.getStreamsOfType(StreamManager.AUDIO_STREAM);
               
              
               for (var streamPublisherID:String in publishers) {
                    if (streamPublisherID != _userManager.myUserID)  setUpSubscriber(streamPublisherID); // If it's not myself
               }
          }
         

          private function onReceiveStream(event : StreamEvent) : void {
               if (event.streamDescriptor.streamPublisherID != _userManager.myUserID)  {
                    setUpSubscriber(event.streamDescriptor.streamPublisherID);
               }
          }
         
          private function setUpSubscriber(streamPublisherID : *) : void {
               if (subscribed) return;
               subscribed = true;
               audioSubscriber.publisherIDs = [streamPublisherID];
               audioSubscriber.subscribe();
          }

1 Accepted Solution

Avatar

Correct answer by
Former Community Member

Hi ,

I ran your code. All you need to do is call audioSubscriber.subscribe() before calling

audioSubscriber.publisherIDs = ; inside setUpSubscriber method. The reason being subscriber instantiates classes like StreamManager, UserManager inside it which are required before you call playStreams() while setting the publisherIDs property . I am attaching your code again with the fix.

import com.adobe.rtc.sharedManagers.StreamManager;

import com.adobe.rtc.sharedManagers.UserManager;

import com.adobe.rtc.collaboration.AudioPublisher;

import com.adobe.rtc.collaboration.AudioSubscriber;

import com.adobe.rtc.events.StreamEvent;

import com.adobe.rtc.session.IConnectSession;

private var _userManager:UserManager ;

private var audioPublisher:AudioPublisher;

private var audioSubscriber:AudioSubscriber ;

private var subscribed:Boolean = false ;

public function onCreationComplete(connectsession : IConnectSession) :void

{

addPublisher(connectsession);

addSubscriber(connectsession);

}

private function addPublisher(connectsession : IConnectSession) : void {

var audioPublisher:AudioPublisher = new AudioPublisher();

_userManager = connectsession.userManager;

audioPublisher.connectSession = connectsession;

audioPublisher.subscribe();

audioPublisher.publish();

}

private function addSubscriber(connectsession : IConnectSession) : void {

audioSubscriber = new AudioSubscriber();

audioSubscriber.connectSession = connectsession;

audioSubscriber.addEventListener(StreamEvent.STREAM_RECEIVE, onReceiveStream);

//If streams are already running

var _streamManager : StreamManager = audioSubscriber.connectSession.streamManager;

_userManager = connectsession.userManager;

var publishers : Object = streamManager.getStreamsOfType(StreamManager.AUDIOSTREAM);

for (var streamPublisherID:String in publishers) {

if (streamPublisherID != _userManager.myUserID) setUpSubscriber(streamPublisherID); // If it's not myself

}

}

private function onReceiveStream(event : StreamEvent) : void {

if (event.streamDescriptor.streamPublisherID != _userManager.myUserID) {

setUpSubscriber(event.streamDescriptor.streamPublisherID);

}

}

private function setUpSubscriber(streamPublisherID : *) : void {

if (subscribed) return;

subscribed = true;

audioSubscriber.subscribe();

audioSubscriber.publisherIDs = ;

}

Hope this helps.

Thanks

Hironmay Basu

View solution in original post

2 Replies

Avatar

Correct answer by
Former Community Member

Hi ,

I ran your code. All you need to do is call audioSubscriber.subscribe() before calling

audioSubscriber.publisherIDs = ; inside setUpSubscriber method. The reason being subscriber instantiates classes like StreamManager, UserManager inside it which are required before you call playStreams() while setting the publisherIDs property . I am attaching your code again with the fix.

import com.adobe.rtc.sharedManagers.StreamManager;

import com.adobe.rtc.sharedManagers.UserManager;

import com.adobe.rtc.collaboration.AudioPublisher;

import com.adobe.rtc.collaboration.AudioSubscriber;

import com.adobe.rtc.events.StreamEvent;

import com.adobe.rtc.session.IConnectSession;

private var _userManager:UserManager ;

private var audioPublisher:AudioPublisher;

private var audioSubscriber:AudioSubscriber ;

private var subscribed:Boolean = false ;

public function onCreationComplete(connectsession : IConnectSession) :void

{

addPublisher(connectsession);

addSubscriber(connectsession);

}

private function addPublisher(connectsession : IConnectSession) : void {

var audioPublisher:AudioPublisher = new AudioPublisher();

_userManager = connectsession.userManager;

audioPublisher.connectSession = connectsession;

audioPublisher.subscribe();

audioPublisher.publish();

}

private function addSubscriber(connectsession : IConnectSession) : void {

audioSubscriber = new AudioSubscriber();

audioSubscriber.connectSession = connectsession;

audioSubscriber.addEventListener(StreamEvent.STREAM_RECEIVE, onReceiveStream);

//If streams are already running

var _streamManager : StreamManager = audioSubscriber.connectSession.streamManager;

_userManager = connectsession.userManager;

var publishers : Object = streamManager.getStreamsOfType(StreamManager.AUDIOSTREAM);

for (var streamPublisherID:String in publishers) {

if (streamPublisherID != _userManager.myUserID) setUpSubscriber(streamPublisherID); // If it's not myself

}

}

private function onReceiveStream(event : StreamEvent) : void {

if (event.streamDescriptor.streamPublisherID != _userManager.myUserID) {

setUpSubscriber(event.streamDescriptor.streamPublisherID);

}

}

private function setUpSubscriber(streamPublisherID : *) : void {

if (subscribed) return;

subscribed = true;

audioSubscriber.subscribe();

audioSubscriber.publisherIDs = ;

}

Hope this helps.

Thanks

Hironmay Basu

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] ----