La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "RTP Real Time Protocol LTN ZOELLER Cédric MAJ CONSTANTIN Jean-Yves"— Transcription de la présentation:

1 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

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

3 Présentation générale de RTP

4 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

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

6 Présentation générale du projet

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

8 Présentation détaillé de RTP

9 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

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

11 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

12 Entête RTP |V=2|P|X| CC |M| PT | sequence number | | timestamp | | synchronization source (SSRC) identifier | +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | contributing source (CSRC) identifiers | | | extensions

13 RTCP Feedback qualité distribution Identification
Nombre de participant Autres informations

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

15 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

16 RTCP / Sender Report . |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 | |

17 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 |

18 RTCP / Receiver Report |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 |

19 RTCP / SDES |V=2|P| SC | PT=SDES=202 | length | header +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | SSRC/CSRC_ | chunk | SDES items | | | | SSRC/CSRC_ | chunk

20 RTCP / Bye |V=2|P| SC | PT=BYE=203 | length | | SSRC/CSRC | : : +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ | length | reason for leaving (opt)

21 DEMO Capture Ethereal depuis JMF

22 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

23 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

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

25 Implémentation

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

27 RTP bas niveau

28 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); }

29 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;

30 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;

31 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;

32 RTP bas niveau DEMO

33 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

34 RTP selon SUN

35 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; // / /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();

36 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);

37 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);

38 Ressources

39 Ressources RFC http://rfc.net/rfc1889.html RFC en « français »
JAVA C Exemples de code dans la RFC


Télécharger ppt "RTP Real Time Protocol LTN ZOELLER Cédric MAJ CONSTANTIN Jean-Yves"

Présentations similaires


Annonces Google