eXosip用户手册:1.2 如何初始化、修改或终止呼叫

基于exosip 编写呼叫流程实例 1、已经编译生成号exosip相关库, 2、复制如下代码生成UAC,该实例使用的是windows控制台程序,对于sdp的解析部分需修改一下 代码如下: #include <eXosip2/eXosip.h> #include <stdio.h> #include <stdlib.h> #include <winsock2.h> int ma... 阅读详情

    eXosip2提供灵活的API,以帮助用户控制呼叫。

1.2.1 初始化呼叫

    要启动一个呼出,用户通常需要一些eXosip2用到的头部,以建立默认的INVITE请求。以下的代码用于启动一个呼叫:

    osip_message_t *invite;
    int i;

    i = eXosip_call_build_initial_invite (&invite, 
                                        "<sip:to@antisip.com>",
                                        "<sip:from@antisip.com>",
                                        NULL, // optional route header
                                        "This is a call for a conversation");
    if (i != 0)
    {
        return -1;
    }

    osip_message_set_supported (invite, "100rel");

    {
        char tmp[4096];
        char localip[128];

        eXosip_guess_localip (AF_INET, localip, 128); // 获取本地IP
        
        // 格式化SDP信息体
        snprintf (tmp, 4096,
                 "v=0\r\n"                           // SDP版本
                 "o=josua 0 0 IN IP4 %s\r\n"         // 用户名、ID、版本、网络类型、地址类型、IP地址
                 "s=conversation\r\n"                // 会话名称
                 "c=IN IP4 %s\r\n"
                 "t=0 0\r\n"                         // 开始时间、结束时间。此处不需要设置
                 "m=audio %s RTP/AVP 0 8 101\r\n"    // 音频、传输端口、传输类型、格式列表
                 "a=rtpmap:0 PCMU/8000\r\n"          // 以下为具体描述格式列表中的
                 "a=rtpmap:8 PCMA/8000\r\n"
                 "a=rtpmap:101 telephone-event/8000\r\n"
                 "a=fmtp:101 0-11\r\n", localip, localip, port);
                  
        osip_message_set_body (invite, tmp, strlen (tmp));
        osip_message_set_content_type (invite, "application/sdp");
    }

    eXosip_lock ();
    i = eXosip_call_send_initial_invite (invite); // 发送INVITE请求
    
    if (i > 0)
    {
        eXosip_call_set_reference (i, reference); 

    }
    
    eXosip_unlock ();
    return i;

    
       上面代码使用eXosip_call_build_initial_invite函数为新的呼叫建立一个默认的SIP INVITE请求。用户需要插入SDP信息体,以指示RTP流的音频参数。
       同时上述代码演示了eXosip2 API的灵活性,它允许您插入额外的头部,比如:"Supported: 100rel"(宣布支持SIP扩展)。因此,您可以完全的控制SIP请求的创建。    
       eXosip_call_send_initial_invite函数的返回值为呼叫标识(call identifier),该标识可以用于发送CANCEL请求。之后的事件中(除了100 Trying),用户可以获得会话标识(dialog identifier),该标识用于控制已建立的呼叫。  
      eXosip_call_set_reference函数将用户自己的环境(context)与呼叫联系起来,这样用户可以从eXosip_event取回指针。
   
1.2.2 应答呼叫 
      下面的代码教您如何应答一个到来的呼叫。当接收到SIP INVITE请求后,用户通常需要发送一个 "180 Ringing" SIP应答。

    eXosip_lock ();
    eXosip_call_send_answer (ca->tid, 180, NULL);
    eXosip_unlock ();

 
       上述代码表明,协议栈有时只需要一个API函数就可以建立和发送默认的SIP消息。
       然后,当用户想要回复呼叫时,需要发送“200 OK”,同时在回复中插入SDP信息体:

    osip_message_t *answer = NULL;

    eXosip_lock ();
    i = eXosip_call_build_answer (ca->tid, 200, &answer);// 建立200 OK应答
    
    if (i != 0)
    {
        eXosip_call_send_answer (ca->tid, 400, NULL);
    }
    else
    {
        i = sdp_complete_200ok (ca->did, answer); // 伪代码,需要用户自己实现
        
        if (i != 0)
        {
            osip_message_free (answer);
            eXosip_call_send_answer (ca->tid, 415, NULL);
        }
        else
            eXosip_call_send_answer (ca->tid, 200, answer); // 发送200 OK应答
    }
    
    eXosip_unlock ();

    
       注1:上述代码中,注意到给请求发送应答时用到了传送标识(transaction identifier)(不是呼叫标识,也不是会话标识)。
       注2:为了发送“200 OK”,通常需要在回复中插入SDP信息体,而且是在回复前插入,目的是为了协商支持的参数和编码。在test tool目录下,eXosip2提供的josua应用程序中,可以找到一个非常基本的SDP协商操作。
   
1.2.3 发送其他请求  
      呼叫控制API允许发送和接收REFER、UPDATE、INFO、OPTIONS、NOTIFY、INVITE。当回复其他请求时,仍然存在一些限制,但可以发送任何类型的请求。    
      以下的代码是发送INFO请求,用于在不同信号层发送不同信道的dtmf。 

    osip_message_t *info;
    char dtmf_body[1000];
    int i;

    eXosip_lock ();
    i = eXosip_call_build_info (ca->did, &info);
    
    if (i == 0)
    {
        snprintf (dtmf_body, 999, "Signal=%c\r\nDuration=250\r\n", c);
        
        osip_message_set_content_type (info, "application/dtmf-relay");
        osip_message_set_body (info, dtmf_body, strlen (dtmf_body));
        
        i = eXosip_call_send_request (ca->did, info);
    }
    
    eXosip_unlock ();    
视频质量诊断-eXosip2 发送invite 请求视频 视频质量诊断需要视频流,通过发送INVITE请求获取视频 阅读详情

相关推荐

基于eXosip2实现的客户端和服务端

这里选择libeXosip2-3.5.0.tar.gz和libosip2-3.5.0.tar.gz。四、eXosip2服务端。

thehunters的专栏 1452

FFmpeg4.3系列之28:SIP+eXosip+pjsip小白入门

敬告:该系列的课程在抓紧录制更新中,敬请大家关注。敬告: 该系列的课程涉及:FFmpeg,WebRTC,SRS,Nginx,Darwin,Live555,等。包括:音视频、流媒体、直播、Android、视频监控28181、等。我将带领大家一起来学习:学习sip协议的基本原理、流程、结构;编译开源库源码osip,eXosip,pjsip(包括windows和Linux两套环境);使用eXosip或pjsip进行案例实战;具体内容包括:  1.sip协议讲解,包括原理、结构、协议内容、流程分析等。2.osip与eXosip的源码编译,使用eXosip进行案例实战并详解流程。3.pjsip的源码编译,使用pjsip进行案例实战并详解流程。

osip2/eXosip2调试笔记

 软件版本:libosip2-3.3.0.tar.gzlibeXosip2-3.3.0.tar.gz  ./configure --prefix=/opt/sip/target --disable-staticmakemake install  测试代码: 代码来源:http://blog.csdn.net/bat603/archive/2006

bloghome的专栏 7896

使用eXosip_call_build_initial_invite发送invite返回OSIP_SYNTAXERROR(-5)

该问题适用于国标或sip相关的开发

m0_37876242的博客 811

【eXosip】注册与处理推流请求处理逻辑总结

exosip库构建信令服务总结

gma999的博客 1627

Osip源代码框架11--eXosip工作流程简介

eXosip工作流程简介

qq_43538607的博客 1402

eXosip用户手册:1.1 如何初始化libeXosip2

说明:本文的内容是根据官方的eXosip_User_Manual来翻译,为了省时间提高效率,部分内容是意译,部分内容个人觉得没有必要,所以不翻译。后续的相关文章亦如此。 1.1 如何初始化libeXosip2     使用eXosip时,第一步工作是初始化eXosip和libosip库(解析器和状态机)。在使用libeXosip2前必须必须先做这一步。   #include

CheneyMei的博客 8143

保姆级教程:用eXosip2 5.1.2在Linux上快速搭建你的第一个SIP客户端和服务端

本文提供了一份详细的eXosip2 5.1.2在Linux上搭建SIP客户端和服务端的保姆级教程。通过环境准备、库安装、核心概念解析到UAC/UAS实现,帮助开发者快速掌握SIP通信技术,适用于语音、视频和即时消息系统的开发。

weixin_30485379的博客 315

基于osip2/eXosip2协议栈的应用开发之(1):翻译:eXosip开发手册

1、扩展协议栈eXosip1.1 如何初始化libeXsip2库    当使用eXosip是,你首先要完成的工作就是初始化eXsip上下文和libosip库(解析器和状态机)。在使用libeXosip前这个工作必须完成。那么如何初始化呢,我们看下面的代码:include int i; TRACE_INITIALIZE (6, stdout); i=eXosip_init(); if (i!=0

好久都没有更新博客喽,工作原因只能总结在内部机上:-( 8326

Osip源代码框架19--Call的调用

Osip源代码框架19--Call的调用

qq_43538607的博客 2072

基于eXosip的SIP客户端

sip客户端部分代码

Cong的专栏 1万+

osip2和eXosip2协议

http://www.cnblogs.com/pengyingh/articles/2474140.html Osip2是一个开放源代码的sip协议栈,是开源代码中不多使用C语言写的协议栈之一,它具有短小简洁的特点,专注于sip底层解析使得它的效率比较高 eXosip2是Osip2的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用。 exosip2增加了cal

L_Office_Software的博客 1806

详解Nacos集群搭建

在我们日常的开发当中,用的都是单点Nacos,这种模式,我们自己开发测试玩一玩还可以,但是到了企业的生产环境之下,你还这么玩的话,那肯定是要出大问题了。因为在企业当中,我们更加强调的是高可用,所以在企业的生产环境下,Nacos一定要做成个集群。

博客 1万+

exosip2 的简单使用

http://blog.chinaunix.net/u/29227/showart_326021.html 今天从网上搞了一个基于osip 库的 SIP 协议的简单的 UAC 代理客户端和 UAS 代理服务器端,并进行了编译连接,代码整理后如下: ----------- UAC 代理客户端的代码整理 --------------- /** * 一个使用了 osip 和 eXo

spivic的专栏 2703

机器学习---xgboost算法

问题上表现的十分顶尖,本节将较详细的介绍XGBoost的算法原理。成和剪枝分别对应了经验风险最小化和结构风险最小化, XGBoost的决策树生成是结构风险最小。式(1.1)称为经验风险最小化,训练得到的模型复杂度较高。出结果, 是模型的输出结果;等式右边第⼀部分是模型的训练误差,第⼆部分是正则化项,这里。其中,F是假设空间,假设空间是在已知属性和属性可能取值的情况下,对所有可能满足目标的情。最小化,结构风险最小化的模型往往对训练数据以及未知的测试数据都有较好的预测。的正则化项是K棵树的正则化项相加而来的。

weixin_43961909的博客 1万+

ESP32蓝牙配网实战:微信小程序中的blufi协议实现与优化

本文详细介绍了在微信小程序中实现ESP32蓝牙配网的实战经验,重点解析了blufi协议的应用与优化。内容涵盖从开发环境配置、协议帧格式解析,到小程序端蓝牙通信、数据转换的核心步骤,并提供了配网状态机设计、错误处理及性能调优等进阶方案,旨在帮助开发者高效、稳定地完成物联网设备配网功能开发。

weixin_29159613的博客 456

一个用eXosip实现的UAC和UAS的例子

学习理解exOsip参考。

Derry的专栏 4630

Isaac Sim 6 利用Replicator实现高效语义分割与实例分割(实践指南5.10)

本文详细介绍了如何利用Isaac Sim 6的Replicator工具高效生成语义分割和实例分割数据集。通过虚拟环境自动标注,效率提升20倍以上,特别适用于农业机器人等计算机视觉项目。文章包含环境配置、场景构建、批量标注技巧及实例分割处理等实战指南,帮助开发者快速掌握合成数据生成技术。

weixin_42526415的博客 266

osip和mysql_osip2和eXosip2协议

http://blog.csdn.net/flyhawk007j2me/article/details/6830586Osip2是一个开放源代码的sip协议栈,是开源代码中不多使用C语言写的协议栈之一,它具有短小简洁的特点,专注于sip底层解析使得它的效率比较高eXosip2是Osip2的一个扩展协议集,它部分封装了Osip2协议栈,使得它更容易被使用。exosip2增加了call、dialog、...

weixin_42406333的博客 372

Workbench-nCode下发动机引擎应力疲劳分析

在工程数据库中定义材料模型参数,结构场分析基本参数:密度7850Kg/m3、弹性模量210E9Pa、泊松比0.3,疲劳分析参数:应力-疲劳曲线表(S-N Curve),应力-疲劳曲线如下图2所示,如果没有合适的数据可使用结构钢材料进行分析。网格为四面体高阶单元,各零件的单元尺寸如下表1所示,单元质量分布如下图3所示。在workbench平台下搭建分析流程如下图6所示,前述设定完成后,提交求解后即可得到相应的应力、应变结果,更新结果后目录树中会有相应的nCode DesignLife插件,如下图7所示。

ansysxuexizhe的博客 1547

GEE APP:基于GEE的红树林监测平台

本文将介绍如何利用Google Earth Engine平台,结合Landsat系列卫星影像和SRTM高程数据,实现红树林分布的动态监测与变化分析。

此星光明博客 160

linux下编译eXosip、osip,以及UAC和UAS的例子

从网站上看到了这样的一篇博文 :Windows下编译eXosip、osip,以及UAC和UAS的例子 (链接:http://www.cnblogs.com/dyllove98/archive/2013/06/25/3155427.html) 觉得对学习sip的初学者,包括我,都是很有帮助的。但是那是在window下的编译,我在这里稍微改了一下,让它支持在linux下编译测试运行通过。 我们这...

lina_suda的博客 2229

一个人干完整个运营团队!浙大开源「Easel」全链路拆解:从热点发现到自动发布,一个 Agent 直接做出来

一个人干完整个运营团队?浙大 REAL 实验室开源的 Easel,把 OpenClaw Agent、账号画像、114 个内容技能和真实媒体工具接在一起:从热点发现、选题策划、图文视频创作,到七平台适配发布、数据归因复盘,全链路一个 Agent 闭环完成,产物按项目归档。本文完整拆解其五层工作流、四层 Prompt Stack 架构、画像内联机制、Skill 三层加载与产物契约,附安装部署、.env 关键配置、Embedding 避坑、已知问题修复等实战干货,全程无虚构、可复现。

program哲学 283
上一篇: SIP入门(一):建立SIP软电话环境
下一篇: eXoisp用户手册:1.3 如何发送或者升级注册
cheneymei
博客等级 码龄16年 144粉丝 9原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值