2016-08-24 2 views
0

Ich bin ziemlich neu beim Lync 2013 SDK (habe es seit ein paar Wochen benutzt) und habe es war in der Lage, meist alles herauszufinden, was ich brauche, außer für diese ...Lync 2013 SDK - An der Konferenz teilnehmen und AVModality verbinden, wenn "Join Meeting-Audio von" auf "Audio nicht verbinden" eingestellt ist

Wenn ich einer Konferenz beitrete (mit ConversationManager.JoinConference()) kommt es gut zusammen. In bestimmten Fällen (nicht alle) möchte ich dann die AVModality auf der Konferenz verbinden. Manchmal funktioniert es, manchmal sitzt es nur in "Verbinden" und verbindet sich nie (obwohl ich EndConnect genannt habe).

Was ich gefunden habe, ist die Einstellung in Skype Optionen -> Skype Meetings -> Beitritt zu Konferenzanrufen, scheint meinen Code zu überschreiben. Vielleicht eine Race Condition?

Wenn die Einstellung "Audio nicht beitreten" und "Bevor ich an Besprechungen teilnehme, frage mich, welches Audiogerät ich verwenden möchte" wird NICHT ÜBERPRÜFT (dh ich bekomme keine Eingabeaufforderung): Die Konferenz verbindet sich mit der AVModalität wird getrennt -> Verbindung -> getrennt. Dann löst mein Code ein BeginConnect aus und die AVModalität wird getrennt -> Verbinden - und löst nie auf (manchmal bekomme ich einen schnellen Besetztton-Ton).

Wenn "Bevor ich an Besprechungen teilnehmen, fragen Sie mich, welches Audiogerät ich verwenden möchte" wird überprüft (bedeutet, ich bekomme die Eingabeaufforderung): die Konferenz tritt ein, die Eingabeaufforderung fragt, wie Sie eine Verbindung herstellen, wenn ich Skype für Unternehmen wähle - Es verbindet Audio fein (erwartet). Interessanterweise, wenn ich den Anruf über die Lync-Benutzeroberfläche aufhalte (AVModality wechselt zu Disconnected), wird sofort wieder eine Verbindung hergestellt (vorausgesetzt, dass mein BeginConnect dies tut).

Hier, wo es wirklich gewunden wird: Wenn ich Beginconnect aufrufen, wenn der Staat auf der AVmodality innerhalb der Handler ModalityStateChanged Ereignis Connecting ... geschieht Folgendes: Konferenz beitritt, prompt fragt mich, wie die Verbindung (AVmodality Zustand ist "Verbinden" an dieser Stelle, bis eine Entscheidung in der Eingabeaufforderung getroffen wird - das bedeutet, dass BeginConnect ausgelöst wird. Wenn ich dann in der Eingabeaufforderung "Audio nicht verbinden" wähle, wird der AVModality-Status "Verbinden" -> "Nicht verbunden" -> "Verbinden" -> "Verbinden" -> "Verbunden" angezeigt. Also - mein BeginConnect ist bereits in Arbeit und funktioniert immer noch in diesem Fall, solange es VOR der Auswahl von "Dojo Join Join" nicht ausgelöst wird.

Also frage ich mich, ob die "Dojojojo" -Auswahl (ob mit oder ohne die Eingabeaufforderung) tatsächlich einige andere Eigenschaften auf etwas setzt, die verhindert, dass die AVModality nach diesem Punkt verbunden ist, ohne einige zusätzliche Hokuspokus tun? Wenn ja - ich möchte den zusätzlichen Hocus pocus kennen, den ich durchführen muss :)

Danke für irgendeine und alle Hilfe!

Antwort

0

Wenn JoinConference() aufgerufen wird, wird die Audiomodalität verbunden, auch ohne BeginConnect() explizit aufzurufen.

Wenn die Aufforderung zur Auswahl der Audiogeräte angezeigt wird (wenn in skype die Option ask before join eingestellt ist), hat die Konversationseigenschaft ConferenceEscalationProgress den Wert AvaitingJoinDialogResponse.

Einstellung der Konversationseigenschaft ConferenceJoinDialogCompleted als true wird die Modality-Verbindung initiieren, obwohl die Eingabeaufforderung nicht geschlossen ist.

bearbeitet

Wenn nicht beitreten Audio ausgewählt ist, wird Modalität getrennt werden, an dieser Stelle Sie versuchen Beginconnect() aufzurufen. Versuchen Sie, den Modalitätsendpunkt vor dem Aufruf von BeginConnect() zu setzen.

conversation.Modalities[ModalityTypes.AudioVideo].Endpoint = lyncClient.Self.Contact.CreateContactEndpoint(lyncClient.Self.Contact.Uri); 
+0

Zuerst - danke für die Antwort! Ich habe diese Eigenschaft kürzlich in meinen Tests verfolgt ... dies hilft, etwas Verhalten zu erklären. Wenn die Einstellung jedoch so ist, dass die Eingabeaufforderung nicht angezeigt wird, habe ich bemerkt, dass die ConferenceJoinDialogCompleted-Eigenschaft sofort auf True gesetzt wird - und die AVModality wird getrennt -> Verbinden -> beim Verbinden verbunden. Nachdem dies passiert ist, konnte ich keine Möglichkeit finden, die AVModality erfolgreich zu verbinden ...? – Scott7004

+0

Aufforderung lautet, den Audioendpunkt uri auszuwählen, d. H. Den AV Modality Endpunkt uri. Wenn Sie Audio als Skype-Endpunkt auswählen, bleibt uri als sip: [email protected], wenn Sie die Telefonnummer wählen, wird der Endpunkt uri "tel: Ihre Telefonnummer" sein. Gibt es eine Warnung in der Benutzeroberfläche? –

+0

Sorry für die lange Zeit - hatten sich zwischendurch andere drängendere Probleme ergeben. Ich werde eine neue Antwort unten schreiben ... – Scott7004

1

Es ist dazu kommen ... ob die Konferenz Beitritt ist die Audiowieder beitreten oder nicht - ich jedes Szenario mit einer Ausnahme behandelt habe, was ich kann immer noch nicht herausfinden: 1. ich die Notwendigkeit Konferenz-Audio, dem Sie beitreten möchten, aber der Benutzer wählt, dem Audio NICHT beizutreten (entweder über die Eingabeaufforderung oder über die Skype-Optionen).

In diesem Fall - Ich habe einen Event-Handler zum Modalität State Change Event hinzugefügt, und wenn der NewState == Disconnected, trigger ich ein BeginConnect auf die Modalität selbst. Das funktioniert gut. Innerhalb des Callbacks habe ich den EndConnect-Anruf. Allerdings - der AVModality-Zustand bleibt weiterhin in "Connecting" und löst niemals eine Verbindung auf. Auf der Benutzeroberfläche - es zeigt die Audio-Tasten, aber alle ausgegraut (wie normal, wenn es verbindet). Ich bin mir nicht sicher, wie ich es fertigstellen kann, um die Verbindung herzustellen?

Hier ist ein Code-Snippet:

if (merge) 
      { 
       myHandler = delegate (object sender1, ModalityStateChangedEventArgs e1) 
       { 
        AVModality avModality = (AVModality)sender1; 
        Globals.ThisAddIn.confConvo = avModality.Conversation; 
        if (e1.NewState == ModalityState.Connected) 
        {        
         DialNumberInSkype(meetingInfo); 
         avModality.ModalityStateChanged -= myHandler; 
        } 
        if (e1.NewState == ModalityState.Disconnected) 
        { 
         object[] asyncState = { avModality, "CONNECT" }; 
         avModality.BeginConnect((ar) => 
         { 
          avModality.EndConnect(ar); 
          DialNumberInSkype(meetingInfo); 
         }, asyncState); 
         avModality.ModalityStateChanged -= myHandler; 
        } 
       }; 
      } 

EDIT: Aus irgendeinem Grund bin ich um einen Kommentar hinzufügen jetzt ...

Ich habe versucht, nicht in der Lage den Endpunkt Einstellung als du schlugst vor. Ich erhalte jedoch einen ArgumentException-Fehler "Wert fällt nicht in den erwarteten Bereich." Also habe ich versucht, den Uri-Wert im CreateContactEndpoint auf "sip: [email protected]" zu schreiben (außer natürlichem Wert) - und den gleichen ArgumentException-Fehler erhalten. Ich habe davor einen Haltepunkt hinzugefügt und konnte den Wert für avModality.Endpoint sehen - und er wird tatsächlich die ganze Zeit auf mich gesetzt ... er ist nicht null oder nicht gesetzt, wenn ich versuche, BeginConnect aufzurufen.

Verwandte Themen