NEUROS - tous droits réservés
Neuros – 20 rue de Mogador 75009 Paris - Tél : 01 47 03 43 65nAcademy Le 04 juin 2014 Neuros -
Les Protocoles Temps Réels
Ezzaouia Mohamed
nAcademy Le 04 juin 2014 Neuros -
• DEFINITIONS:
 RTP/RTCP pour le transport temps réel.
 RTSP pour la gestion d’une session streaming.
 SIP pour Session Initiation Protocol.
• APPLICATIONS:
• EXEMPLE : CODE
Plan
2
nAcademy Le 04 juin 2014 Neuros -
Qu’est ce que le transport de données en temps réel ?
•Satisfaire des contraintes de Temps.
DEFINITION : Le transport de données
3
nAcademy Le 04 juin 2014 Neuros -
• Quels sont les protocoles temps réels existant ?
→RTP : Real-Time Transport Protocol [ RFC 1889 ]
→RTCP : RTP Control Protocol [ RFC 1889 ]
→RTSP : Real-Time Streaming Protocol [ RFC 2326 ]
→SDP : Session Description Protocol [ RFC 2327 ]
→SIP: Session Initiation Protocol [ RFC 3265 ]
DEFINITION : Protocoles temps réels
4
nAcademy Le 04 juin 2014 Neuros -
• Protocoles au dessus de UDP adaptés au besoin temps réel
→RTP : pour l’acheminement des données.
→RTCP : pour échanger des messages de contrôles.
DEFINITION : RTP
5
RTP
UDP
nAcademy Le 04 juin 2014 Neuros -
• RTSP : REAL TIME STREAMING PROTOCOL
→Ciblé vers le multimédia.
→Fonctionnalités fournies au client :
 url pour rechercher un média sur le serveur
 Commande pour avancer, rembobiner, pause, play…
→Les requêtes de contrôle RTSP utilisent TCP.
→S’appuie sur RTP/RTCP.
DEFINITION : RTSP
6
RTSP
TCP
nAcademy Le 04 juin 2014 Neuros -
Méthodologie
7
nAcademy Le 04 juin 2014 Neuros -
→SETUP : Le client demande l’allocation des ressources pour le
flux demandé
→PLAY : Le client demande la transmission
→PAUSE : Le client demande au serveur d’arrêter
momentanément le flux
→TEARDOWN : Le client demande au serveur de libérer les
ressources associées au flux
Déroulement de la méthodologie
8
nAcademy Le 04 juin 2014 Neuros -
• SIP : SESSION INITIATION PROTOCOL
 les télécommunications multimédia.
 la téléphonie par internet (La VoIP).
DEFINITION : SIP
9
nAcademy Le 04 juin 2014 Neuros -
APPLICATIONS : Média
10
nAcademy Le 04 juin 2014 Neuros -
APPLICATIONS : Réalité augmentée
11
nAcademy Le 04 juin 2014 Neuros -
APPLICATIONS : VoIP
12
nAcademy Le 04 juin 2014 Neuros -
APPLICATIONS : Visio
13
nAcademy Le 04 juin 2014 Neuros -
• La librairie rtsp.c :
/* send RTSP SETUP request */
static void rtsp_setup(CURL *curl, const char *uri, const char
*transport)
{
CURLcode res = CURLE_OK; printf("nRTSP: SETUP %sn", uri);
printf(" TRANSPORT %sn", transport);
my_curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI, uri);
my_curl_easy_setopt(curl, CURLOPT_RTSP_TRANSPORT, transport);
my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST,
(long)CURL_RTSPREQ_SETUP); my_curl_easy_perform(curl);
}
EXEMPLE : CODE : (1/7)
14
nAcademy Le 04 juin 2014 Neuros -
• /* send RTSP PLAY request */
static void rtsp_play(CURL *curl, const char *uri, const char
*range)
{
CURLcode res = CURLE_OK; printf("nRTSP: PLAY %sn", uri);
my_curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI, uri);
my_curl_easy_setopt(curl, CURLOPT_RANGE, range);
my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST,
(long)CURL_RTSPREQ_PLAY); my_curl_easy_perform(curl);
}
EXEMPLE : CODE : (2/7)
15
nAcademy Le 04 juin 2014 Neuros -
• /* send RTSP TEARDOWN request */
static void rtsp_teardown(CURL *curl, const char *uri)
{
CURLcode res = CURLE_OK;
printf("nRTSP: TEARDOWN %sn", uri);
my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST,
(long)CURL_RTSPREQ_TEARDOWN);
my_curl_easy_perform(curl);
}
EXEMPLE : CODE : (3/7)
16
nAcademy Le 04 juin 2014 Neuros -
• /* main app */
int main(int argc, char * const argv[])
{ /* quelques traitement…*/
…
const char *url = argv[1];
char *uri = malloc(strlen(url) + 32);
…
/* encore quelques autre traitement …*/
…
/* request session description and write response to sdp file */
rtsp_describe(curl, uri, sdp_filename);
/* get media control attribute from sdp file */
get_media_control_attribute(sdp_filename, control);
EXEMPLE : CODE : (4/7)
17
nAcademy Le 04 juin 2014 Neuros -
/* setup media stream */
sprintf(uri, "%s/%s", url, control);
rtsp_setup(curl, uri, transport);
/* start playing media stream */
sprintf(uri, "%s/", url); rtsp_play(curl, uri, range);
printf("Playing video, press any key to stop ...");
_getch(); printf("n");
/* teardown session */
rtsp_teardown(curl, uri);
…
}
EXEMPLE : CODE : (5/7)
18
nAcademy Le 04 juin 2014 Neuros -
Streamer un fichier flv avec PHP :
<?php
$seekat = $_GET["position"]; // Position de début de lecture
$file = $_GET["file"]; // Fichier FLV à streamer
//Effacement du cache
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
EXEMPLE : CODE : (6/7)
19
nAcademy Le 04 juin 2014 Neuros -
// Ajout des bon headers
header("Content-Type: video/x-flv");
if($seekat != 0) {
print("FLV");
print(pack('C', 1 ));
print(pack('C', 1 ));
print(pack('N', 9 ));
print(pack('N', 9 ));
}
$fh = fopen($file, "rb");
fseek($fh, $seekat);
while (!feof($fh)) {
print (fread($fh, 16384));
}
fclose($fh);
?>
EXEMPLE : CODE : (7/7)
20
nAcademy Le 04 juin 2014 Neuros -
• http://fr.wikipedia.org/wiki/Real-time_Transport_Protocol
• http://fr.wikipedia.org/wiki/Real_Time_Streaming_Protocol
• http://fr.wikipedia.org/wiki/Session_Initiation_Protocol
• http://level7systems.co.uk/en/blog/Click+to+Call+with+PHP-SIP
• http://www.rap.prd.fr/pdf/technologie_streaming.pdf
• http://www.c-p-f.org/php-Faire_du_streaming_en_PHP-a28.html
• https://developers.google.com/youtube/v3/live/code_samples/php
• http://www.jeuweb.org/showthread.php?tid=5057
• http://curl.haxx.se/libcurl/c/rtsp.html
• http://net7mma.codeplex.com/
SOURCES :
21
nAcademy Le 04 juin 2014 Neuros -
Merci pour votre attention.
22

Les protocoles temps réels

  • 1.
    NEUROS - tousdroits réservés Neuros – 20 rue de Mogador 75009 Paris - Tél : 01 47 03 43 65nAcademy Le 04 juin 2014 Neuros - Les Protocoles Temps Réels Ezzaouia Mohamed
  • 2.
    nAcademy Le 04juin 2014 Neuros - • DEFINITIONS:  RTP/RTCP pour le transport temps réel.  RTSP pour la gestion d’une session streaming.  SIP pour Session Initiation Protocol. • APPLICATIONS: • EXEMPLE : CODE Plan 2
  • 3.
    nAcademy Le 04juin 2014 Neuros - Qu’est ce que le transport de données en temps réel ? •Satisfaire des contraintes de Temps. DEFINITION : Le transport de données 3
  • 4.
    nAcademy Le 04juin 2014 Neuros - • Quels sont les protocoles temps réels existant ? →RTP : Real-Time Transport Protocol [ RFC 1889 ] →RTCP : RTP Control Protocol [ RFC 1889 ] →RTSP : Real-Time Streaming Protocol [ RFC 2326 ] →SDP : Session Description Protocol [ RFC 2327 ] →SIP: Session Initiation Protocol [ RFC 3265 ] DEFINITION : Protocoles temps réels 4
  • 5.
    nAcademy Le 04juin 2014 Neuros - • Protocoles au dessus de UDP adaptés au besoin temps réel →RTP : pour l’acheminement des données. →RTCP : pour échanger des messages de contrôles. DEFINITION : RTP 5 RTP UDP
  • 6.
    nAcademy Le 04juin 2014 Neuros - • RTSP : REAL TIME STREAMING PROTOCOL →Ciblé vers le multimédia. →Fonctionnalités fournies au client :  url pour rechercher un média sur le serveur  Commande pour avancer, rembobiner, pause, play… →Les requêtes de contrôle RTSP utilisent TCP. →S’appuie sur RTP/RTCP. DEFINITION : RTSP 6 RTSP TCP
  • 7.
    nAcademy Le 04juin 2014 Neuros - Méthodologie 7
  • 8.
    nAcademy Le 04juin 2014 Neuros - →SETUP : Le client demande l’allocation des ressources pour le flux demandé →PLAY : Le client demande la transmission →PAUSE : Le client demande au serveur d’arrêter momentanément le flux →TEARDOWN : Le client demande au serveur de libérer les ressources associées au flux Déroulement de la méthodologie 8
  • 9.
    nAcademy Le 04juin 2014 Neuros - • SIP : SESSION INITIATION PROTOCOL  les télécommunications multimédia.  la téléphonie par internet (La VoIP). DEFINITION : SIP 9
  • 10.
    nAcademy Le 04juin 2014 Neuros - APPLICATIONS : Média 10
  • 11.
    nAcademy Le 04juin 2014 Neuros - APPLICATIONS : Réalité augmentée 11
  • 12.
    nAcademy Le 04juin 2014 Neuros - APPLICATIONS : VoIP 12
  • 13.
    nAcademy Le 04juin 2014 Neuros - APPLICATIONS : Visio 13
  • 14.
    nAcademy Le 04juin 2014 Neuros - • La librairie rtsp.c : /* send RTSP SETUP request */ static void rtsp_setup(CURL *curl, const char *uri, const char *transport) { CURLcode res = CURLE_OK; printf("nRTSP: SETUP %sn", uri); printf(" TRANSPORT %sn", transport); my_curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI, uri); my_curl_easy_setopt(curl, CURLOPT_RTSP_TRANSPORT, transport); my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_SETUP); my_curl_easy_perform(curl); } EXEMPLE : CODE : (1/7) 14
  • 15.
    nAcademy Le 04juin 2014 Neuros - • /* send RTSP PLAY request */ static void rtsp_play(CURL *curl, const char *uri, const char *range) { CURLcode res = CURLE_OK; printf("nRTSP: PLAY %sn", uri); my_curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI, uri); my_curl_easy_setopt(curl, CURLOPT_RANGE, range); my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_PLAY); my_curl_easy_perform(curl); } EXEMPLE : CODE : (2/7) 15
  • 16.
    nAcademy Le 04juin 2014 Neuros - • /* send RTSP TEARDOWN request */ static void rtsp_teardown(CURL *curl, const char *uri) { CURLcode res = CURLE_OK; printf("nRTSP: TEARDOWN %sn", uri); my_curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, (long)CURL_RTSPREQ_TEARDOWN); my_curl_easy_perform(curl); } EXEMPLE : CODE : (3/7) 16
  • 17.
    nAcademy Le 04juin 2014 Neuros - • /* main app */ int main(int argc, char * const argv[]) { /* quelques traitement…*/ … const char *url = argv[1]; char *uri = malloc(strlen(url) + 32); … /* encore quelques autre traitement …*/ … /* request session description and write response to sdp file */ rtsp_describe(curl, uri, sdp_filename); /* get media control attribute from sdp file */ get_media_control_attribute(sdp_filename, control); EXEMPLE : CODE : (4/7) 17
  • 18.
    nAcademy Le 04juin 2014 Neuros - /* setup media stream */ sprintf(uri, "%s/%s", url, control); rtsp_setup(curl, uri, transport); /* start playing media stream */ sprintf(uri, "%s/", url); rtsp_play(curl, uri, range); printf("Playing video, press any key to stop ..."); _getch(); printf("n"); /* teardown session */ rtsp_teardown(curl, uri); … } EXEMPLE : CODE : (5/7) 18
  • 19.
    nAcademy Le 04juin 2014 Neuros - Streamer un fichier flv avec PHP : <?php $seekat = $_GET["position"]; // Position de début de lecture $file = $_GET["file"]; // Fichier FLV à streamer //Effacement du cache header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); EXEMPLE : CODE : (6/7) 19
  • 20.
    nAcademy Le 04juin 2014 Neuros - // Ajout des bon headers header("Content-Type: video/x-flv"); if($seekat != 0) { print("FLV"); print(pack('C', 1 )); print(pack('C', 1 )); print(pack('N', 9 )); print(pack('N', 9 )); } $fh = fopen($file, "rb"); fseek($fh, $seekat); while (!feof($fh)) { print (fread($fh, 16384)); } fclose($fh); ?> EXEMPLE : CODE : (7/7) 20
  • 21.
    nAcademy Le 04juin 2014 Neuros - • http://fr.wikipedia.org/wiki/Real-time_Transport_Protocol • http://fr.wikipedia.org/wiki/Real_Time_Streaming_Protocol • http://fr.wikipedia.org/wiki/Session_Initiation_Protocol • http://level7systems.co.uk/en/blog/Click+to+Call+with+PHP-SIP • http://www.rap.prd.fr/pdf/technologie_streaming.pdf • http://www.c-p-f.org/php-Faire_du_streaming_en_PHP-a28.html • https://developers.google.com/youtube/v3/live/code_samples/php • http://www.jeuweb.org/showthread.php?tid=5057 • http://curl.haxx.se/libcurl/c/rtsp.html • http://net7mma.codeplex.com/ SOURCES : 21
  • 22.
    nAcademy Le 04juin 2014 Neuros - Merci pour votre attention. 22