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();
}
Solved! Go to Solution.
Views
Replies
Total Likes
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
Views
Replies
Total Likes
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
Views
Replies
Total Likes
You're absolutely right - thank you
Views
Replies
Total Likes