RTP Real Time Protocol LTN ZOELLER Cédric MAJ CONSTANTIN Jean-Yves

Slides:



Advertisements
Présentations similaires
Le streaming des média à la demande sur Internet
Advertisements

Le Protocole TCP Chapitre 6.
RSX101 Réseaux et Télécommunications
Chapitre 2 – Protocoles liés à la VoIP
Le mécanisme des exceptions
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Retour sur RMI.
Communication par diffusion : Multicast
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
Applications distribuées et parallèlisme La communication ne doit pas rester bloquée pour un client.
Communication par diffusion : Multicast Clientn Serveur Client1 Client2 Gr.
Les Sockets et Java Cours Harmonisation Anne-Marie Déry.
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Protocole CDP* * Cisco Discovery Protocol.
Programmation Web Les JSP.
L’ interruption de boucle
Programmer en JAVA par Tama

UDP – User Datagram Protocol
La Voix sur IP.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
POO-L3 H. Fauconnier1 Tableau et héritage Y[] yA=new Y[3]; X[] xA=yA; //ok xA[0]=new Y(); xA[1]=new X(); //non xA[1]=new Z(); //non Object XX[]int[] YZY[]Z[]
À l’aide du sniffer Etherpeek
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Cilia Mediation Framework v0.9.0 Implantation.. Plan Cilia: c'est quoi? Capacités. Cilia: Modèle d'implantation. Mise en œuvre: Médiateur Cilia. Assemblage.
Le Modele OSI.
Cours du 22 novembre généricité. Chapitre VII Généricité.
MIDI Sans Frontières Analyse des problèmes relatifs à la communication musicale sur IP Mémoire présenté en vue de lobtention du grade de Licencié en informatique.
Java, les objets : tout de suite ! Rassembler, grouper les objets
Objectifs À la fin de ce cours, vous serez capables de :
Développement d’application client/serveur
Communication entre processus From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 3, © Addison-Wesley 2001 Chapitre.
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
Couche Transport (4) Routeur Messages entre A et B
Cours 7 Classes locales Clonage Divers: tableaux.
De la communication audio au protocole H323
Cours Les flux ou streams. Cours 162 Flux : objet possédant des méthodes capables de lire ou écrire des flots d’octets sur tout support (mémoire,
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
12/04/ Les exceptions Cours 11 Cours 11.
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
28/01/2008 Mobile VoIP « Un protocole de haut niveau pour les applications temps réel » Ngoné DIOP Remarques générales : Présenter un minimum de diapositives.
Les Réseaux Informatiques Clients & Serveurs Le protocole FTP Laurent JEANPIERRE DEUST AMMILoR.
Les sockets.
Master 1 SIGLIS Ingénierie des réseaux Stéphane Tallard Chapitre 4 – Couche réseau Master 1 SIGLIS1 Ingénierie des réseaux - Chapitre 4 La couche réseau.
Etat d’avancement Développement et intégration Bilal EL ALI Caen, Mars 2001.
Schéma de conception Factory Method Exemple Sylvain Giroux.
C# de plus près.  Ce sont globalement les mêmes que Java : ◦ Int(int16, int32), float, double, bool,…  Les classe « communes » sont également les mêmes.
Les Réseaux Informatiques
Cours du 5 novembre.
Réseaux Informatiques
Liste Une liste est une séquence d’éléments. Concept important: Chaque élément possède une position dans la liste. Notation: De quelles opérations a-t-on.
IPSec Formation.
03/05/2004Diffusion vidéo sur l'Internet - Timothy BURK ENS de Lyon 1 Techniques de diffusion vidéo sur l'Internet Streaming avec RTP/RTSP Timothy BURK.
Service de vidéo à la demande Projet Tutoré : Groupe C3 Université Paris 5.
Ingénierie des réseaux
Les protocoles de niveau message
IPv6 IP Next Generation Xavier BUREAU & Emilien GUERRIER 11/01/2002.
Les bases du protocole Modbus
Architecture Client/Serveur
Langage et Concepts de Programmation Orientée-Objet Pôle Informatique 2007/2008 École Nationale Supérieure des Mines de Saint-Étienne Laurent Vercouter.
Philippe Gandy - 22 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
L. Gurret – M. Herve – P. Mignon – J. Prarioz. Introduction  Dernière étape d’analyse  Cahier des charges, spécifications et conception orientée objet.
Applications en temps réel
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
Département Informatique Les Réseaux Informatiques Couche Transport Protocoles UDP & TCP Laurent JEANPIERRE.
La Voix sur IP.
Développement d’applications Web
Transcription de la présentation:

RTP Real Time Protocol LTN ZOELLER Cédric MAJ CONSTANTIN Jean-Yves Centre de Recherche Opérationnelle et de Simulation de l’Armée de Terre

PLAN Présentation générale de RTP Présentation générale du projet Présentation détaillé de RTP Implémentation Ressources

Présentation générale de RTP

Présentation générale de RTP Real Time Transport Protocol Objectif: fourniture de bout en bout de services pour des données ayant des contraintes de temps réel Composition: Transport des données: RTP Contrôle de la session: RTCP

Place de RTP Application SAP/SDP RTP/RTCP TCP / UDP IP Niveau 2

Présentation générale du projet

Présentation générale du projet Acquisition RTP Multicast Stockage RTP Multicast Affichage RTP Multicast Affichage RTP Multicast

Présentation détaillé de RTP

Présentation détaillé de RTP RFC 1889 RTP Diffusion synchrone de flux temps réels Pas de contrôle de qualité de la communication RTCP Contrôle de qualité de la communication Partage bande passante

Présentation détaillé de RTP En-tête Fixe 12 Octets En-tête optionnelle Données

Présentation détaillée de RTP V: Version P: Padding X: Extension CC: Nombre de CSRC M: Marker PT: Payload type Sequence Number Timestamp SSRC: Identifiant source synchronisation CSRC: Identifiants des sources

Entête RTP 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |V=2|P|X| CC |M| PT | sequence number | | timestamp | | synchronization source (SSRC) identifier | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | contributing source (CSRC) identifiers | | .... | + extensions + + +

RTCP Feedback qualité distribution Identification Nombre de participant Autres informations

Présentation détaillée de RTCP Rapport d’émission Rapport de réception SDES Bye Application

Présentation détaillée de RTCP V: Version P: Padding RC: Report Count PT: Packet type Length NTP Timestamp RTP Timestamp Sender Packet Count Sender Octet Count SSRC Fraction lost Cumulative number packets lost

RTCP / Sender Report . 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |V=2|P| RC | PT=SR=200 | length | header | SSRC of sender | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | NTP timestamp, most significant word | sender +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ info | NTP timestamp, least significant word | | RTP timestamp | | sender's packet count | | sender's octet count | | | report |...............................................................|

RTCP / Sender Report .. |...............................................................| | | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | SSRC_1 (SSRC of first source) | report +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block | fraction lost | cumulative number of packets lost | 1 -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | extended highest sequence number received | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | interarrival jitter | | last SR (LSR) | | delay since last SR (DLSR) | | SSRC_2 (SSRC of second source) | report : ... : 2 | profile-specific extensions |

RTCP / Receiver Report 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |V=2|P| RC | PT=RR=201 | length | header | SSRC of packet sender | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | SSRC_1 (SSRC of first source) | report +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ block | fraction lost | cumulative number of packets lost | 1 | extended highest sequence number received | | interarrival jitter | | last SR (LSR) | | delay since last SR (DLSR) | | SSRC_2 (SSRC of second source) | report : ... : 2 | profile-specific extensions |

RTCP / SDES 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |V=2|P| SC | PT=SDES=202 | length | header +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | SSRC/CSRC_1 | chunk +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 1 | SDES items | | ... | | SSRC/CSRC_2 | chunk +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 2

RTCP / Bye 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |V=2|P| SC | PT=BYE=203 | length | | SSRC/CSRC | : ... : +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | length | reason for leaving ... (opt)

DEMO Capture Ethereal depuis JMF

Translators Envoie les flux de différentes sources séparément Transmet les paquets avec leurs identifiant SSRC intact. Peut changer le codage des données. Il assigne alors de nouveaux numéros de séquences aux paquets Un destinataire ne peut détecter la présence d’un Translator à moins de se procurer les caractéristiques de la source

Mixers Combine les flux de différentes sources pour former un nouveau flux Il devient source de synchronisation: Tous les paquets RTP émis sont marqués avec l’identificateur SSRC du mixer. Pour préserver l’identité des sources principales il inclut la liste des différents identificateur SSRC derrière le header RTP (liste CSRC). CSRC : Contributing source Identifiers

Exemple Réseau RTP M1:48(1,17) E4:47 M1:48(1,17) M3:89(64,45)

Implémentation

Implémentations Classe RTP de bas niveau RTP selon SUN: API JMF

RTP bas niveau

RTP bas niveau public class MulticastSocketRTP_RTCP extends MulticastSocket { private byte buf[]; private DatagramPacket packet; private RTPPacket2 rtp_packet; private RTCPPacket2 rtcp_packet; private int type; public MulticastSocketRTP_RTCP(String adresse,int port,int t) throws IOException { super(port); type = t; buf = new byte[1500]; InetAddress multicastadresse = InetAddress.getByName(adresse); packet = new DatagramPacket(buf,buf.length); joinGroup(multicastadresse); }

RTP bas niveau public void printOutHeader() { try{ receive(packet); System.out.println("Header "+getType()); switch (type) case 0: rtp_packet = new RTPPacket2(packet.getData(),packet.getLength() ); System.out.print("|V :"+rtp_packet.getVersion() ); System.out.print("|P :"+rtp_packet.getPadding() ); System.out.print("|X :"+rtp_packet.getExtension() ); System.out.print("|CC :"+rtp_packet.getCC() ); System.out.print("|M :"+rtp_packet.getMarker() ); System.out.println("|PT :"+rtp_packet.getPayloadType() ); System.out.print("|Sequence Number :"+rtp_packet.getSequenceNumber() ); System.out.print("|TimeStamp :"+rtp_packet.getTimeStamp() ); System.out.print("|SSRC :"+rtp_packet.getSsrc() ); System.out.println(""); break;

RTP bas niveau public class RTPPacket2{ //Taille de l'en-tête RTP: static int HEADER_SIZE = 12; //Champ de l'en-tête private int Version; private int Padding; private int Extension; private int CC; private int Marker; private int PayloadType; private int SequenceNumber; private int TimeStamp; private int Ssrc; public byte[] header; //Taille de la charge utile (payload) public int payload_size; //Data de la charge utile public byte[] payload;

RTP bas niveau if (packet_size >= HEADER_SIZE) { //Récupération de l'en-tête header = new byte[HEADER_SIZE]; for (int i=0; i < HEADER_SIZE; i++) header[i] = packet[i]; //Récupération des data de la charge utils payload_size = packet_size - HEADER_SIZE; payload = new byte[payload_size]; for (int i=HEADER_SIZE; i < packet_size; i++) payload[i-HEADER_SIZE] = packet[i]; //Récupération des valeurs des champs de l'en-tête Marker = header[1] & 128; if (Marker != 0) Marker=1; CC = header[0] & 64; Extension = header[0] & 16; if (Extension !=0) Extension = 1; Padding = header[0] & 32; if (Padding !=0) Padding = 1;

RTP bas niveau DEMO

RTP selon SUN RTPManager Manager de connections RTP RTPControl Player Classe contenant le type de flux RTP (JPEG/MPEG…) Player Classe où l’on joue les flux RTP RTPConnector Classe permettant de s’adapter à différentes couches (réseau/transport différents TCP/UDP//IP) + de détails sur le site sun

RTP selon SUN

RTP selon SUN public class reception_rtp implements ReceiveStreamListener, SessionListener, ControllerListener { String sessions[] = null; RTPManager mgrs[] = null; Vector playerWindows = null; boolean dataReceived = false; Object dataSync = new Object(); public reception_rtp(String sessions[]) { //CONSTRUCTEUR this.sessions = sessions; //224.123.111.101/22222 224.123.111.102/22224 } protected boolean initialize() { try { InetAddress ipAddr; SessionAddress localAddr = new SessionAddress(); SessionAddress destAddr; mgrs = new RTPManager[sessions.length]; //un MANAGER RTP par session playerWindows = new Vector();

RTP selon SUN mgrs[i] = (RTPManager) RTPManager.newInstance(); mgrs[i].addSessionListener(this); mgrs[i].addReceiveStreamListener(this); ipAddr = InetAddress.getByName(session.addr); if( ipAddr.isMulticastAddress()) { // adresse locale et distante identique localAddr= new SessionAddress( ipAddr, session.port, session.ttl); destAddr = new SessionAddress( ipAddr, } else { localAddr= new SessionAddress( InetAddress.getLocalHost(), session.port); destAddr = new SessionAddress( ipAddr, session.port); } mgrs[i].initialize( localAddr); mgrs[i].addTarget(destAddr);

RTP selon SUN if (evt instanceof NewReceiveStreamEvent) { try { stream = ((NewReceiveStreamEvent)evt).getReceiveStream(); DataSource ds = stream.getDataSource(); // Trouve le format reçu RTPControl ctl = (RTPControl)ds.getControl("javax.media.rtp.RTPControl"); if (participant == null) System.err.println(" L'emmetteur du stream est déjà identifié."); else { System.err.println(" Le stream vient de: " + participant.getCNAME()); } // creation d'un player en passant DataSource (ds) au constructeur Player p = javax.media.Manager.createPlayer(ds); if (p == null) return; p.addControllerListener(this); p.realize(); PlayerWindow pw = new PlayerWindow(p, stream); playerWindows.addElement(pw);

Ressources

Ressources RFC http://rfc.net/rfc1889.html RFC en « français » JAVA http://java.sun.com/products/java-media/jmf/ C Exemples de code dans la RFC