Situatie
Ik heb een Flash applicatie (stand-alone) die audio en video naar een Flash Media Server (FMS) streamt. Het koppelen van de video en audio gebeurt in één klasse. Op een bepaald event moet de audio aan de NetStream instance gekoppeld worden, waarna op een ander event de audio weer ontkoppelt moet worden.
Voorbeeld:
1.) NetConnection: Verbinding met FMS wordt opgezet;
2.) NetStream: Stream wordt opgezet over de verbinding;
3.) AudioVideoClass: Persoon drukt op knop, koppel instance van het Microphone object aan het NetStream object;
4.) AudioVideoClass: Persoon laat knop los, ontkoppel Microphone instance weer van het NetStream object.
Probleem
Bovenstaand voorbeeld werkt prima. De eerste keer komt het geluid netjes op de stream terecht en kan de luisterende partij het goed horen. Wanneer men echter na stap 4 opnieuw de knop indrukt om audio te streamen, dan lijkt de instance van het Microphone object te zijn verdwenen. De variabele bestaat nog wel, maar er hangt geen actief Microphone object meer achter.
Wat ik ook erg vreemd vind, is dat ik geen foutmelding krijg bij het voor een tweede keer koppelen van de instance van het Microphone object. Als deze instance ongeldig zou zijn geworden dan had ik hier toch een foutmelding van verwacht.
Het probleem is dus dat bij het ontkoppelen van de audio van een NetStream instance, hetgeen ontkoppeld wordt onbruikbaar lijkt te worden. Is er iemand die hier ervaring mee heeft en een goede oplossing weet? Ik vind het niet zo'n aantrekkelijke oplossing om elke keer het Microphone object opnieuw aan te roepen na het ontkoppelen van de audio van de stream.
Ik heb Google, GoT (al is op GoT helaas zeer weinig te vinden over Flash) en nog enkele Flash-fora afgezocht, maar heb het antwoord nog niet kunnen vinden. Ook heb ik de manual doorgespit, maar er staat niets over het verdwijnen van de instance bij het ontkoppelen van de audio.
___
Edit: Onderstaand de code die ik gebruik voor het koppelen en verwijderen van de Microphone instance aan het NetStream object:
___
Edit 2: Zojuist ben ik er achter gekomen dat het activityLevel van het Microphone object na het verwijderen op -1 wordt gezet. In de manual staat hierover:
Ik heb een Flash applicatie (stand-alone) die audio en video naar een Flash Media Server (FMS) streamt. Het koppelen van de video en audio gebeurt in één klasse. Op een bepaald event moet de audio aan de NetStream instance gekoppeld worden, waarna op een ander event de audio weer ontkoppelt moet worden.
Voorbeeld:
1.) NetConnection: Verbinding met FMS wordt opgezet;
2.) NetStream: Stream wordt opgezet over de verbinding;
3.) AudioVideoClass: Persoon drukt op knop, koppel instance van het Microphone object aan het NetStream object;
4.) AudioVideoClass: Persoon laat knop los, ontkoppel Microphone instance weer van het NetStream object.
Probleem
Bovenstaand voorbeeld werkt prima. De eerste keer komt het geluid netjes op de stream terecht en kan de luisterende partij het goed horen. Wanneer men echter na stap 4 opnieuw de knop indrukt om audio te streamen, dan lijkt de instance van het Microphone object te zijn verdwenen. De variabele bestaat nog wel, maar er hangt geen actief Microphone object meer achter.
Wat ik ook erg vreemd vind, is dat ik geen foutmelding krijg bij het voor een tweede keer koppelen van de instance van het Microphone object. Als deze instance ongeldig zou zijn geworden dan had ik hier toch een foutmelding van verwacht.
Het probleem is dus dat bij het ontkoppelen van de audio van een NetStream instance, hetgeen ontkoppeld wordt onbruikbaar lijkt te worden. Is er iemand die hier ervaring mee heeft en een goede oplossing weet? Ik vind het niet zo'n aantrekkelijke oplossing om elke keer het Microphone object opnieuw aan te roepen na het ontkoppelen van de audio van de stream.
Ik heb Google, GoT (al is op GoT helaas zeer weinig te vinden over Flash) en nog enkele Flash-fora afgezocht, maar heb het antwoord nog niet kunnen vinden. Ook heb ik de manual doorgespit, maar er staat niets over het verdwijnen van de instance bij het ontkoppelen van de audio.
___
Edit: Onderstaand de code die ik gebruik voor het koppelen en verwijderen van de Microphone instance aan het NetStream object:
code:
1
2
| // Koppel microfoon aan stream this.stream.attachAudio(this.microphone); |
code:
1
2
| // Ontkoppel microfoon van stream this.stream.attachAudio(null); |
___
Edit 2: Zojuist ben ik er achter gekomen dat het activityLevel van het Microphone object na het verwijderen op -1 wordt gezet. In de manual staat hierover:
Hieruit maak ik op dat Flash - door het loskoppelen van de microfoon van de stream - de verbinding met de microfoon is verloren en deze dus wel degelijk opnieuw opgezet moet worden. Wel heel erg vreemd hoor. Ik ga er maar vanuit dat dit een bug binnen Flash is.If the microphone is available but is not yet being used because Microphone.getMicrophone() has not been called, this property is set to -1.
[ Voor 21% gewijzigd door JaFFoG op 25-04-2008 12:45 . Reden: activityLevel = -1 ]
Bla