10

我正在开发一个安全监控应用程序,我发现最好的方法是 Skype。

当可能的入侵发生时,应用程序会调用一个指定的 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

我什至试过这个,但我想那是旧的 API,无法从中得到任何东西。甚至不是通过发送命令

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

4

1 回答 1

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(); }
        }
    }
于 2012-01-30T16:25:51.313 回答