2012-01-30 8 views
10

Pracowałem nad aplikacją monitorującą bezpieczeństwo i najlepszym rozwiązaniem, jakie znalazłem, było Skype.C# Skype API Połączenie wideo

Kiedy wystąpi ewentualne włamanie, aplikacja wywołuje określony identyfikator Skype ID, który jest prawdopodobnie moim telefonem z Androidem i skończyłem z wszystkimi operacjami przetwarzania obrazu. Ale siedzę z tym Skype API Napisałem ten kawałek kodu:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using SKYPE4COMLib; 


namespace SkypeCall 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Skype skype; 
      skype = new Skype("Skype4COM.Skype", "Skype_"); 

      Call call = skype.PlaceCall(SkypeID); 
      call.StartVideoSend(); 
     } 
    } 
} 

ten inicjuje połączenie głosowe, ale w call.StartVideoSend(); pokazuje błąd

An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in SkypeCall.exe 

Additional information: CALL: Action failed 

Próbowałem nawet this ale myślę, że to stary API i nie można dostać nic z tego. I nawet nie wysyłając commands.

jeśli ktoś mi pomoże, będę wdzięczny.

Odpowiedz

5

Myślę, że musisz poczekać, aż połączenie zostanie nawiązane.

Najprostszym sposobem byłoby przetestować call.Status

class Program 
    { 
     static void Main(string[] args) 
     { 
      Skype skype; 
      skype = new SKYPE4COMLib.Skype(); 
      string SkypeID = args[1]; 
      Call call = skype.PlaceCall(SkypeID); 
      do 
      { 
       System.Threading.Thread.Sleep(1); 
      } while (call.Status != TCallStatus.clsInProgress); 
      call.StartVideoSend(); 
     } 
    } 

Można również dodać wydarzenie, jednak myślę, że to zadziała na każde wezwanie więc jeśli używasz tylko go do tego projektu może być zbyt wiele.

class Program 
    { 
     static string SkypeID = ""; 
     static void Main(string[] args) 
     { 
      Skype skype; 
      skype = new SKYPE4COMLib.Skype(); 
      skype.CallStatus += new _ISkypeEvents_CallStatusEventHandler(skype_CallStatus); 
      Call call = skype.PlaceCall(SkypeID); 

      Console.ReadKey(); 
     } 

     static void skype_CallStatus(Call pCall, TCallStatus Status) 
     { 
      if (Status == TCallStatus.clsInProgress && pCall.PartnerHandle == SkypeID) { pCall.StartVideoSend(); } 
     } 
    } 
+0

Dzięki milion @Matt –

Powiązane problemy