我无法在visual studio开发环境中构建linphone 3.8.5

时间:2015-11-01 07:42:00

标签: voip linphone

有人能告诉我如何在Visual Studio上构建linphone 3.8.5吗? 我试图这样做一个月,但失败了。 我通过阅读许多答案在很多方面尝试过,但都失败了。 可能有人帮我建造它?

1 个答案:

答案 0 :(得分:2)

创建项目

  1. 要创建项目,请转到"文件"菜单 - >新 - >项目...
  2. 选择" Win32控制台应用程序"模板中的#34; Visual C ++" - > "的Win32"并为您的项目命名,例如" Liblinphone教程"。然后单击"确定"。
  3. 现在,Win32应用程序的向导出来了。单击"下一步",检查"清空项目"框,然后单击"完成"。
  4. 您现在应该有一个名为" Liblinphone教程的项目"和一个同名的新目标。您可以将此目标重命名为" Basic call"。
  5. 配置项目以使用liblinphone

    1. 下载ZIP archive of linphone SDK并将其解压缩到Visual Studio项目目录中。在我们的例子中,它被放置在Documents \ Visual Studio 2013 \ Projects \ Liblinphone tutorial \ Liblinphone教程中。注意将提取的目录命名为" liblinphone"。
    2. 在Visual Studio中,右键单击"基本调用"目标并单击"属性"
    3. 转到" C / C ++"部分然后"一般"。添加目录" liblinphone / include"在" Additonal Include Directory"使用编辑向导填写字段。
    4. 转到" Linker" - > "通用及#34;部分并添加" liblinphone / lib"目录到"其他图书馆目录"。
    5. 转到" Linker" - > "输入"部分并将以下库添加到"附加依赖项":    ortp.lib     mediastreamer_base.lib     mediastreamer_voip.lib     linphone.lib
    6. 编译

      在目标的源文件中添加名为name.c的文件,并使用Basic call tutorial

      的源代码填充它
      /*
      linphone
      Copyright (C) 2010  Belledonne Communications SARL 
       (simon.morlat@linphone.org)
      This program is free software; you can redistribute it and/or
      modify it under the terms of the GNU General Public License
      as published by the Free Software Foundation; either version 2
      of the License, or (at your option) any later version.
      This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU General Public License for more details.
      You should have received a copy of the GNU General Public License
      along with this program; if not, write to the Free Software
      Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
      */
      #ifdef IN_LINPHONE
      #include "linphonecore.h"
      #else
      #include "linphone/linphonecore.h"
      #endif
      #include <signal.h>
      static bool_t running=TRUE;
      static void stop(int signum){
              running=FALSE;
      }
      /*
       * Call state notification callback
       */
      static void call_state_changed(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState cstate, const char *msg){
              switch(cstate){
                      case LinphoneCallOutgoingRinging:
                              printf("It is now ringing remotely !\n");
                      break;
                      case LinphoneCallOutgoingEarlyMedia:
                              printf("Receiving some early media\n");
                      break;
                      case LinphoneCallConnected:
                              printf("We are connected !\n");
                      break;
                      case LinphoneCallStreamsRunning:
                              printf("Media streams established !\n");
                      break;
                      case LinphoneCallEnd:
                              printf("Call is terminated.\n");
                      break;
                      case LinphoneCallError:
                              printf("Call failure !");
                      break;
                      default:
                              printf("Unhandled notification %i\n",cstate);
              }
      }
      int main(int argc, char *argv[]){
              LinphoneCoreVTable vtable={0};
              LinphoneCore *lc;
              LinphoneCall *call=NULL;
              const char *dest=NULL;
              /* take the destination sip uri from the command line arguments */
              if (argc>1){
                      dest=argv[1];
              }
              signal(SIGINT,stop);
      #ifdef DEBUG
              linphone_core_enable_logs(NULL); /*enable liblinphone logs.*/
      #endif
              /* 
               Fill the LinphoneCoreVTable with application callbacks.
               All are optional. Here we only use the call_state_changed callbacks
               in order to get notifications about the progress of the call.
               */
              vtable.call_state_changed=call_state_changed;
              /*
               Instanciate a LinphoneCore object given the LinphoneCoreVTable
              */
              lc=linphone_core_new(&vtable,NULL,NULL,NULL);
              if (dest){
                      /*
                       Place an outgoing call
                      */
                      call=linphone_core_invite(lc,dest);
                      if (call==NULL){
                              printf("Could not place call to %s\n",dest);
                              goto end;
                      }else printf("Call to %s is in progress...",dest);
                      linphone_call_ref(call);
              }
              /* main loop for receiving notifications and doing background linphonecore work: */
              while(running){
                      linphone_core_iterate(lc);
                      ms_usleep(50000);
              }
              if (call && linphone_call_get_state(call)!=LinphoneCallEnd){
                      /* terminate the call */
                      printf("Terminating the call...\n");
                      linphone_core_terminate_call(lc,call);
                      /*at this stage we don't need the call object */
                      linphone_call_unref(call);
              }
      end:
              printf("Shutting down...\n");
              linphone_core_destroy(lc);
              printf("Exited\n");
              return 0;
      }
      


      您现在可以通过右键单击要构建的目标并单击&#34;构建&#34;

      来构建项目

      执行和调试

      为了能够执行生成二进制文件,您需要设置PATH环境变量。转到目标的属性面板,然后在&#34; Debuging&#34;部分。编辑环境字段并添加以下行:

      PATH=C:\Users\<user_name>\Documents\Visual Studio 2013\Projects\Liblinphone tutorial\Liblinphone tutorial\liblinphone\bin;%PATH%
      


      &#34;基本电话&#34;程序需要一个SIP地址作为参数。您可以通过编辑&#34;命令参数&#34;来指定它。领域。例如,你可以写sip:bot.linphone.org.

      您现在可以通过单击&#34; Local Windows Debugger&#34;来执行该程序。在主界面中。

      注意:Mediastreamer将其插件相对于SDK的根目录加载。如果您需要此类插件提供的功能,例如OpenH264的支持,您可以将工作目录设置为SDK的位置。这可以通过进入&#34; Debuging&#34;项目属性中的部分。

      <小时/> 的 Refrence