2012-01-30 69 views
10

我正在开发一个安全监视器应用程序,我发现的最佳方法是Skype。C#Skype API视频通话

当一个可能的入侵发生时,应用程序调用一个指定的Skype ID,这可能是我的Android手机,我完成了所有图像处理的东西。但我坚持这个Skype的API,我写这段代码:

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(); 
     } 
    } 
} 

此发起语音呼叫,但在call.StartVideoSend();显示错误

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

Additional information: CALL: Action failed 

我甚至试过this但我想这是旧的API,并不能得到什么的吧。 甚至没有发送commands

如果有人能帮助我,我将不胜感激。

回答

5

我认为你需要等到通话连接。

最简单的方法是测试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(); 
     } 
    } 

你也可以添加事件,但我认为这会所以除非你只使用它的这个项目可能是每一个电话开枪太多了。

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

感谢百万@Matt – 2012-01-31 11:58:55