簡體   English   中英

音頻文件不是在通話中播放,而是在本地系統上播放-Skype for Business(C#)

[英]Audio file not played on the call but on local system - Skype for Business (C#)

我在這里找到了一些代碼,並將其修改為使用Skype撥打電話號碼,播放音頻文件然后斷開連接。 但是,此代碼中有兩個問題。

  1. 可以在本地系統上聽到正在播放的音頻文件,但不能在電話中聽到(接聽電話的人無法聽到播放的音頻)。
  2. 音頻文件播放完畢后,通話不會斷開。

     using Microsoft.Lync.Model; using Microsoft.Lync.Model.Conversation; using Microsoft.Lync.Model.Conversation.AudioVideo; using Microsoft.Lync.Model.Device; using Microsoft.Lync.Model.Extensibility; using System; using System.Collections.Generic; using System.Threading; using System.Windows.Forms; namespace LyncTest { public partial class frmCaller : Form { public frmCaller() { InitializeComponent(); } private void btnCall_Click(object sender, EventArgs e) { //if this client is in UISuppressionMode... if (client.InSuppressedMode && client.State == ClientState.Uninitialized) { //...need to initialize it try { client.BeginInitialize(this.ClientInitialized, null); } catch (LyncClientException lyncClientException) { Console.WriteLine(lyncClientException); } catch (SystemException systemException) { if (LyncModelExceptionHelper.IsLyncException(systemException)) { // Log the exception thrown by the Lync Model API. Console.WriteLine("Error: " + systemException); } else { // Rethrow the SystemException which did not come from the Lync Model API. throw; } } } else //not in UI Suppression, so the client was already initialized { //sign-in or contact selection SignInToLync(); } SendLyncCall("+6512345678", "Hello, I am calling regarding a pending change request"); } LyncClient client = LyncClient.GetClient(); private void SignInToLync() { try { client.BeginSignIn("abc@contoso.com", "abc@contoso.com", "Pass@word99", HandleEndSignIn, null); } catch (LyncClientException lyncClientException) { Console.WriteLine(lyncClientException); } catch (SystemException systemException) { if (LyncModelExceptionHelper.IsLyncException(systemException)) { // Log the exception thrown by the Lync Model API. Console.WriteLine("Error: " + systemException); } else { // Rethrow the SystemException which did not come from the Lync Model API. throw; } } } Automation _automation = LyncClient.GetAutomation(); ConversationWindow globalConv = null; public void SendLyncCall(string numberToCall, string textToSpeech) { var targetContactUris = new List<string> { numberToCall }; //"tel:+4900000000" _automation.BeginStartConversation(AutomationModalities.Audio, targetContactUris, null, StartConversationCallback, null); while (this.globalConv == null) { Thread.Sleep(1); } if (globalConv != null) { //client.DeviceManager.EndPlayAudioFile( // client.DeviceManager.BeginPlayAudioFile(@"C:\\Temp\\voice.wav", AudioPlayBackModes.AlertAndCommunication, false, AudioPlayed, null) // ); } } private void StartConversationCallback(IAsyncResult asyncop) { // this is called once the dialing completes.. if (asyncop.IsCompleted == true) { ConversationWindow newConversationWindow = _automation.EndStartConversation(asyncop); globalConv = newConversationWindow; AVModality avModality = newConversationWindow.Conversation.Modalities[ModalityTypes.AudioVideo] as AVModality; avModality.ModalityStateChanged += ConversationModalityStateChangedCallback; } } /// <summary> /// Called when the client in done initializing. /// </summary> /// <param name="result"></param> private void ClientInitialized(IAsyncResult result) { //registers for conversation related events //these events will occur when new conversations are created (incoming/outgoing) and removed //client.ConversationManager.ConversationAdded += ConversationManager_ConversationAdded; //client.ConversationManager.ConversationRemoved += ConversationManager_ConversationRemoved; } private void ConversationModalityStateChangedCallback(object sender, ModalityStateChangedEventArgs e) { AVModality avModality = sender as AVModality; if (avModality != null) { switch (e.NewState) { case ModalityState.Disconnected: avModality.ModalityStateChanged -= ConversationModalityStateChangedCallback; break; case ModalityState.Connected: avModality.ModalityStateChanged -= ConversationModalityStateChangedCallback; //foreach (char c in "SOS") //{ // avModality.AudioChannel.BeginSendDtmf(c.ToString(), null, null); // System.Threading.Thread.Sleep(500); //} client.DeviceManager.EndPlayAudioFile(client.DeviceManager.BeginPlayAudioFile(@"C:\\Temp\\voice.wav", AudioPlayBackModes.Communication, false, AudioPlayed, null)); break; case ModalityState.Invalid: break; case ModalityState.Notified: break; } } } private void AudioPlayed(IAsyncResult audioPlayed) { if(audioPlayed.IsCompleted == true) { client.ConversationManager.Conversations[0].End(); } } private void HandleEndSignIn(IAsyncResult ar) { try { client.EndSignIn(ar); } catch (Exception e) { Console.Out.WriteLine(e); } } private void frmCaller_FormClosing(object sender, FormClosingEventArgs e) { GC.Collect(); } } } 

任何幫助,將不勝感激。 謝謝。

Microsoft已經確認,使用客戶端代碼是不可能的。 我需要使用UCMA並為此開發服務器端解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM