关闭

XMPP学习8-Jingle

标签: xmpp
951人阅读 评论(0) 收藏 举报
分类:

已经了解了用XMPP进行文字消息交互,若交互内容为音频或者视频该如何处理-Jingle

Jingle?

Jingle是提供互联网语音通话方面的一个可靠的机制(见[XEP-0167]的细节),Jingle使用同样的方法可协商和管理任何类型的媒体会话,包括视频聊天,文件转移和屏幕共享,此外,由于XMPP适合传输优化许多XML小片段数据,而不是大量数据媒体流,所以通常用Jingle来设置XMPP本身不适于进行的会话
工作方式
Jingle使用XMPP协议作为信令信道建立,管理和终止媒体会话,而媒体数据本身进行点对点传送或者通过一个专门的中介媒体中继传送
Jingle通道
1 信令通道:发送信息的和整体会话管理
2 媒体通道:发送媒体数据本身,媒体通道本身可能使用点对点连接(直接连接两个客户机)或中介(数据通过一个中继服务器发送)

Jingle模型

在Jingle的谈判中,一方(启动者)启动会话,另一方(应答者)同意继续或者拒绝提供邀请
应用类型:陈述在会话中需要交换什么,例如,通过实时传输协议(RTP)进行语音聊天
运输方式:描述数据如何发送,例如,使用用户数据报协议(UDP)
Jingle会话流程
1 启动者发送一个要约给响应者
2 要约包含一个或多个应用程序类型(语音,视频,文件传输,屏幕共享等)和一个或多个传输方式(UDP,ICE,TCP 等)
3 有关各方商议应用程序类型相关的参数并建立运输通道
4 响应者接受或拒绝这一要约
5 如果要约被接受,双方通过商议的运输方式交换有关的应用程序类型的数据(XMPP协议的信号流量下降)
6 如果需要,双方可以在会话期间修改某些参数(例如,加入视频到语音聊天,或切换到一个更好的运输方式)
7 最后,会话结束,各方继续自己的工作
详细可见以下流程图
这里写图片描述
实例分析
user@ejabberd.org/Psi向gmz@ejabberd.org/Psi发起建立Jingle会话请求

<iq from="user@ejabberd.org/Psi"
     id="jah28fh1"
     to="gmz@ejabberd.org/Psi"
     type="set">
  <jingle xmlns="urn:XMPP:jingle:1"
        //action属性指定了特定的要求或通知,这里的请求是启动一个会话
       action="session-initiate"
       initiator=" user@ejabberd.org/Psi "
        //SID属性指定由发起人生成的这个Jingle会议的唯一会话ID
       sid="a73sjjvkla37jfea">
    <content creator="initiator" name="just-an-example">
      //<description/>元素总是定义应用程序的类型
      //特定的应用程序类型是通过元素的XML命名空间的<description/>来区分的
      <description xmlns="urn:XMPP:jingle:apps:stub:0"/>
      //该<transport/>元素总是定义一个运输方法
      //特定的传输方法是由<transport/>元素的XML命名空间进行区分
      <transport xmlns="urn:XMPP:jingle:transports:stub:0"/>
    </content>
  </jingle>
</iq>

gmz@ejabberd.org/Psi收到user@ejabberd.org/Psi发送的请求,确定协商参数

<iq from="gmz@ejabberd.org/Psi"
     id="b18dh29f"
     to="user@ejabberd.org/Psi"
     type="set">
  <jingle xmlns="urn:XMPP:jingle:1"
       //接受会话的Jingle动作用于最终接受这一提议
       action="session-accept"
       initiator="user@ejabberd.org/Psi"
       responder="gmz@ejabberd.org/Psi"
       sid="a73sjjvkla37jfea">
    <content creator="initiator" name="just-an-example">
      <description xmlns="urn:XMPP:jingle:apps:stub:0"/>
      <transport xmlns="urn:XMPP:jingle:transports:stub:0"/>
    </content>
  </jingle>
</iq>

gmz@ejabberd.org/Psi或user@ejabberd.org/Psi结束会话

<iq from="gmz@ejabberd.org/Psi"
     id="g91hs73n"
     to="user@ejabberd.org/Psi"
     type="set">
  <jingle xmlns="urn:XMPP:jingle:1"
       //终结会话的Jingle行动用于正常终结会话
       action="session-terminate"
       initiator="user@ejabberd.org/Psi "
       responder="gmz@ejabberd.org/Psi"
       sid="a73sjjvkla37jfea">
    //<reason/> 元素用于说明为什么要发送特定的Jingle行动,它包括预先定义的条件
    //人类可读的<text/>元素是可选项
    <reason>
      <success/>
    </reason>
  </jingle>
</iq>

语音聊天

传输类型
数据报:适用于应用中的一些数据包损失是可以容忍的情况,如语音和视频(如果你失去了一些音频或视频数据数据报,质量不会严重退化)-UDP
流:适合用在包亏损是不能容忍的情况,如文件传输(如果你失去了一些数据包的文件数据,则不能正确构建文件)-TCP
实例分析
以部分元素为例

<description xmlns="urn:XMPP:jingle:apps:rtp:1" media="audio">
     //对于 RTP 会话,每个<payload-type/>元素定义一个音频或视频编解码器和一些相关的信息
     //如时钟速率和通道数量(例如,立体声使用双通道)
     <payload-type id="96" name="speex" clockrate="16000"/>
     <payload-type id="97" name="speex" clockrate="8000"/>
     <payload-type id="0" name="PCMU"/>
     <payload-type id="8" name="PCMA"/>
</description>
<transport xmlns="urn:XMPP:jingle:transports:raw-udp:1">
  //对于许多运输方式,<candidate/>元素定义一个 IP 地址,端口
  //可直接或间接进行媒体数据通信
  <candidate candidate="1"
       generation="0"
       id="a9j3mnbtu1"
       ip="10.1.1.104"port="13540"/>
</transport>
0
0
查看评论

XMPP/Jingle Vs SIP/SIMPLE 的简单介绍

SIP vs XMPP (Jabber)   SIP and XMPP are application layer protocols mostly used to send voice or IM over Internet. SIP is defined by RFC 36...
  • cs5512
  • cs5512
  • 2014-03-10 15:24
  • 1249

Jingle协议详解

Jingle详解   1.介绍 Jingle协议的目的是在XMPP实体间建立一对一、点对点的媒体会话,使其在进行媒体数据协商和交互时使用XMPP的信令交互。虽然Jingle协议提供了一个通用的会话管理框架,但是其设计的原始目的仅仅只是为了音视频通讯,强调的是“简单”。Jingle协议的目的...
  • chenhande1990chenhan
  • chenhande1990chenhan
  • 2017-04-14 17:08
  • 1320

Xmpp+openfire+smack音视频(PC和移动端)

一、XMPP XMPP协议是一种基于XML的协议,叫做可扩展通讯和表示协议,其前身是Jabber,一个开源形式组织产生的网络即时通讯协议。XMPP协议目前被IETF国际标准组织完成了标准化工作,标准化的核心结果为两部分:1、核心的XML流传输协议;2、基于XMLFreeEIM流传输的即时通讯扩展应...
  • chenhande1990chenhan
  • chenhande1990chenhan
  • 2017-04-13 16:13
  • 1977

smackx jingle语音通话实例

关于jingle ,资料网上少之又少,官方提供的Demo无法运行(原因:问声明客户端支持Jingle,所以服务端返回501异常)。 这个问题困然我几天,然后在Ignite Realtime看到一篇可以很好工作的JIngle示例: public static void main(String[...
  • xiao2shiqi
  • xiao2shiqi
  • 2013-04-12 22:20
  • 1702

XMPP学习8-Jingle

XMPP学习8-Jingle
  • Nassue_sn
  • Nassue_sn
  • 2017-01-03 19:44
  • 951

XMPP和Jingle

XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。XMPP的前身是Jabber,一个开源形式组织产生的网络即时通...
  • qq_36069590
  • qq_36069590
  • 2018-01-15 14:40
  • 16

XMPP学习教程

一、说明: XMPP简单教程,从自己搭建服务器,到实现简单XMPP协议的通讯。 此博文参考了以下文章,在此表示感谢: http://www.cnblogs.com/cokecoffe/archive/2012/08/19/2646245.html    XMPP(Extensib...
  • jiajiayouba
  • jiajiayouba
  • 2015-03-31 08:58
  • 6171

gloox与xmpp学习

 在使用gloox之前,有必要先提一下XMPP协议这个东东。 XMPP协议是一个基于互联网的即时通信标准协议。它采用XML技术,以文本的方式传输即时消息。支持动态自定义扩展应用。与传统的网络协议相比,如QQ等,XMPP协议并不是一个基于二进制方式实现的协议,而是基于XML技术的文本方式,也就...
  • S04103060
  • S04103060
  • 2014-09-16 22:59
  • 1033

XMPP JINGLE Jar包

  • 2012-12-04 09:51
  • 1.18MB
  • 下载
    个人资料
    • 访问:13652次
    • 积分:467
    • 等级:
    • 排名:千里之外
    • 原创:31篇
    • 转载:1篇
    • 译文:0篇
    • 评论:2条
    最新评论