Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parPierre-Antoine Bélanger Modifié depuis plus de 9 années
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.