【问题标题】:Adobe AIR desktop application communicate with Processing applicationAdobe AIR 桌面应用程序与处理应用程序通信
【发布时间】:2014-04-21 17:40:00
【问题描述】:

我有一个处理应用程序,它必须与桌面 Adob​​e AIR 应用程序通信。 考虑到以下因素,有人可以提出最佳选择吗?

如果套接字是答案,哪种类型的 Socket、UDP(数据报类)、ServerSocket 或只是普通的 Socket?

-两个应用程序都驻留在同一台机器上
-延迟很重要,越小越好
- 发送的信号很小,由 3 个值组成

-通信只有一种方式,处理到 Adob​​e AIR

【问题讨论】:

    标签: sockets air processing serversocket osc


    【解决方案1】:

    在处理端你可以使用oscP5:

    import oscP5.*;
    import netP5.*;
    
    OscP5 osc;
    NetAddress where;
    
    void setup() {
      frameRate(25);text("click to send\nOSC",5,50);
    
      osc = new OscP5(this,12000);
      where = new NetAddress("127.0.0.1",8082);
    }
    void draw() {}
    void mousePressed() {
      OscMessage what = new OscMessage("/straps");
      what.add(193.4509887695313);
      osc.send(what, where); 
    }
    

    在 AIR 中,您确实会使用 DatagramSocket。幸运的是,您可以使用像TUIO AS3's UDPConnector 这样的 OSC 数据包。这是一个基本的 as3 示例:

    package
    {
        import flash.display.Sprite;
        import flash.utils.getDefinitionByName;
    
        import org.tuio.connectors.UDPConnector;
        import org.tuio.osc.*;
    
        public class BasicOSC extends Sprite implements IOSCConnectorListener
        {
            private var oscSocket:UDPConnector;
            private const OSCSERVER:String = "127.0.0.1";
            private const PORT:int = 8082;
    
            public function BasicOSC()
            {
                try{    
                    oscSocket = new UDPConnector(OSCSERVER,PORT);
                    oscSocket.addListener(this);
                    trace(this,"OSC ready");
                }catch(e:Error){    trace(e.getStackTrace());   }   
            }
            public function acceptOSCPacket(oscPacket:OSCPacket):void{
                //handle OSC here
                var message:OSCMessage = oscPacket as OSCMessage;
                trace("message from :",message.address,"at",new Date());
                for(var i:int = 0; i < message.arguments.length; i++)
                    trace("\targs["+i+"]",message.arguments[i]);
            }
        }
    }
    

    这大致是我用于these projects 的一些内容:

    【讨论】:

    • 你好,我使用了你的答案,但是在 1/30 秒 25 消息(每个 kinect 主体点作为一条消息)中执行时,osc 接收器会减慢......有没有办法刷新或检查队列中的所有消息?
    • @bluelemonade 随意投票给它有用的答案;)我有一段时间没有使用 AIR 了,所以如果套接字的处理方式发生了变化,我将退出循环如果性能从一个版本的 AIR 下降到另一个版本。如果不查看整个项目,很难判断瓶颈在哪里。我会尝试的一件事是发送一条带有 25*3 浮点数的消息(25 个带有 x、y、z 的关节),看看它是否表现更好。我能想到的另一件事是尝试airkinect。我自己还没有尝试过,但保持原生可能会起作用:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多