• No se han encontrado resultados

pymeet VideoConferencia sobre JABBER Javi Palanca

N/A
N/A
Protected

Academic year: 2021

Share "pymeet VideoConferencia sobre JABBER Javi Palanca"

Copied!
26
0
0

Texto completo

(1)

pyMeet

VideoConferencia sobre JABBER

Javi Palanca

(2)

¿ Qué es el proyecto pyMeet ?

• PyMeet, es una aplicación de Mensajería Instantánea basada en el protocolo Jabber con soporte para videoconferencia en tiempo real.

• Soporte del protocolo JABBER de mensajería instantánea • Notificaciones de presencia, actividad, etc...

• Posibilidad de videoconferencia con varias personas simultaneamente

• Diferentes algoritmos de compresión (modulares)

• Implementado en Python (modular y fácilmente portable)

• Preparado soporte de voz (no implementado) mediante el formato de compresión ogg/Speex

(3)

3

¿ Porqué pyMeet ?

• No existen programas (libres) que den soporte de

videoconferencia para Mensajería Instantánea sobre Jabber. • GAIM no sigue el modelo de desarrollo de GNOME:

– ciclos de 6 meses – HIG

– no aceptan parches – etc...

GOSSIP está muy verde aún... (pero le seguimos la pista) • Queríamos hacerlo en PYTHON :-)

(4)

¿ Qué es Jabber ?

• Abierto, público y libre

• Estándar

• Probado

• Descentralizado

• Seguro

• Extensible

• Flexible

(5)

5

¿ Cómo funciona Jabber ?

(6)

Extensiones al Protocolo

• El protocolo Jabber está definido por la Jabber Foundation en una serie de estándares que explican «exactamente» como debe llevarse a cabo el proceso básico de comunicación.

• Las dos especificaciones básicas son el XMPP Core y el XMPP IM.

• El resto de características están definidas en los JEP (Jabber

Enhancement Proposals)

– JEP-0022: Message Events

– JEP-0047: In-Band Bytestreams (IBB)

– JEP-0066: Out of Band Data

– JEP-0095: Stream Initiation

(7)

7

message:chat

<message       to='[email protected]'       from='[email protected]/balcony'       type='chat'       xml:lang='en'>       <body>Wherefore art thou, Romeo?</body> </message>

(8)

jabber:x:event

<message to='[email protected]' id='message22'> <body> Art thou not Romeo, and a Montague? </body>    <x xmlns='jabber:x:event'>     <offline/> <delivered/>       <composing/>    </x> </message>

(9)

9

message:iq

<iq from='example.com' type='error' id='sess_1'> <session xmlns='urn:ietf:params:xml:ns:xmpp­session'/>     <error type='cancel'>    <conflict xmlns='urn:ietf:params:xml:ns:xmpp­tanzas'/>     </error> </iq>

(10)

Extendiendo el protocolo Jabber

<message to='[email protected]' id='message22'> <body> Art thou not Romeo, and a Montague? </body> <x xmlns='jabber:x:event'> <offline/> <delivered/> <composing/> <closed/> </x> </message>

(11)

11

El Protocolo de Videoconferencia

• Es un apoyo visual a la conversación • Debe estar basado en XML

Interoperable con clientes que no soporten el protocolo

• Es únicamente una prueba de concepto. Ahora falta implementar un protocolo estándar de videoconferencia (¿cual?)

• Protocolo:

Protocolo de Inicialización

(12)

Protocolo de Inicialización

• Basado en el JEP-0095:Stream Initiation.

• Si la comunicación va a ser P2P hay que informar de la dirección y el puerto para establecer la comunicación.

• Se devolverá en todo caso una respuesta afirmativa o negativa indicando si está dispuesto a abrir un canal de comunicación.

(13)

13

Stream Initiation

 <iq type='set' id='offer1' to='[email protected]/resource'> <si xmlns='http://jabber.org/protocol/si' id='a0' mime­type='binary/octet­ stream' profile='http://jabber.org/protocol/si/profile/file­transfer'> <profile xmlns='http://jabber.org/protocol/si/profile/file­transfer'> <info>This is info</info>       <flag/>       </profile>       <streamhost jid='[email protected]/PyMeet'       host='174.16.1.2'       port='7676' /> <feature xmlns='http://jabber.org/protocol/feature­neg'>        <x xmlns='jabber:x:data' type='form'>        <field var='stream­method' type='list­single'>       <option>      <value>http://jabber.org/protocol/bytestreams</value>        </option>       <option><value>jabber:iq:oob</value></option>        </field>        </x>       </feature> </si>  </iq>

(14)

ACK

<iq type='result' to='[email protected]/resource' id='offer1'> <si xmlns='http://jabber.org/protocol/si'> <feature xmlns='http://jabber.org/protocol/feature-neg'> <x xmlns='jabber:x:data' type='submit'> <field var='stream-method'> <value>http://jabber.org/protocol/bytestreams</value> </field> </x> </feature> </si> </iq>

(15)

15

ACK

<iq type='error' to='[email protected]/resource' id='offer1'> <error code='400' type='cancel'>

<bad-request xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> <no-valid-streams xmlns='http://jabber.org/protocol/si'/>

</error> </iq>

(16)

Protocolo de Envio de Datos

• In-Band Bytestreams (IBB)

– JEP-0047

• Out of Band Data

– JEP-0066

• Compresión:

– raw (sin compresión) – gz

– bz2 – sparse

(17)

17

In-Band Bytestreams (IBB)

<message from='[email protected]/orchard' to='[email protected]/balcony' id='msg1'> <data xmlns='http://jabber.org/protocol/ibb'sid='mySID' seq='0'> qANQR1DBwU4DX7jmYZnncmUQB/9KuKBddzQH+tZ1ZywKK0yHKnq57kWq+RFtQdCJ WpdWpR0uQsuJe7+vh3NWn59/gTc5MDlX8dS9p0ovStmNcyLhxVgmqS8ZKhsblVeu IpQ0JgavABqibJolc3BKrVtVV1igKiX/N7Pi8RtY1K18toaMDhdEfhBRzO/XB0+P AQhYlRjNacGcslkhXqNjK5Va4tuOAPy2n1Q8UUrHbUd0g+xJ9Bm0G0LZXyvCWyKH kuNEHFQiLuCY6Iv0myq6iX6tjuHehZlFSh80b5BVV9tNLwNR5Eqz1klxMhoghJOA </data> <amp xmlns='http://jabber.org/protocol/amp'>

<rule condition='deliver-at' value='stored' action='error'/>

<rule condition='match-resource' value='exact' action='error'/>

</amp> </message>

(18)

In-Band Bytestreams (IBB)

Ventajas:

Potente

– Permite enviar mucha información de manera estándar (XML): • sincronización • cabeceras • audio • número de secuencia • identificador de sesión • etc... • Desventajas:

– Los mensajes pasan a través del servidor (no es P2P) – El servidor descarta mensajes muy grandes :­(

(19)

19

Out of Band Data

• Conexión punto a punto entre los clientes (P2P)

• No es necesario que los mensajes de datos pasen por el servidor • Por el servidor pasan mensajes de control (iq)

(20)

Compresión

• raw (sin compresión) • gz

• bz2 • sparse

(21)

21

Mejoras al protocolo

RTP (RealTime Transport Protocol)RTSP (RealTime Streaming Protocol) • Audio (ogg/Speex)

(22)

RealTime Transport Protocol

• Protocolo punto-a-punto para aplicaciones de transmisión de datos en tiempo real (audio, video, simulación...)

• RTP no reserva recursos ni garantiza la calidad de servicio (QoS) • RTCP (Realtime Transport Control Protocol) para monitorización y

control.

• Ver, Version. 2 bits. • P, Padding. 1 bit. • X, Extension. 1 bit. • CC, CSRC count. 4 bits. • M, Marker. 1 bit.

• PT, Payload Type. 7 bits. • Sequence Number. 16 bits. • Timestamp. 32 bits.

• SSRC, Synchronization source. 32 bits.

(23)

23

La Interfaz Gráfica

(24)
(25)

25

Estado de pyMeet

• Desarrollo inicial funcional con la librería wxWidget. • Iniciado el port a pyGTK (casi acabado).

• Videoconferencia sin compresión :-( • No soporte audio

• No envío de ficheros • No multiconferencia

• Soporte completo para conversación interoperable con cualquier otro cliente jabber.

• Multiplataforma salvo por la captura de video ¡¡¡ estado muy inicial !!!

(26)

Fin

¡¡¡ Queda mucho

trabajo !!!

¡¡¡ Os queremos

para pyMeet !!!

¿ voluntarios ?

Referencias

Documento similar