le mie informazioni di contatto
Posta[email protected]
2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
😁博客主页😁:🚀Italiano: https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C 、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍RTSP协议 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰Tempo di rilascio⏰: 06-07-2024 12:22:00
Questo articolo non può essere inoltrato senza autorizzazione! ! !
RTSP, nome completo Real Time Streaming Protocol
, il protocollo di streaming in tempo reale, è un protocollo del livello di applicazione nel sistema di protocolli TCP/IP. È uno standard RFC IETF presentato dalla Columbia University, Netscape e RealNetworks.
Il documento ufficiale sul protocollo RTSP è RFC2326, link al documento:RFC2326 - Protocollo di streaming in tempo reale (RTSP)。
Viene fatto riferimento alla sintassi e al funzionamento del protocollo RTSP. HTTP/1.1
, un protocollo basato su testo che utilizza il set di caratteri ISO10646 e la codifica UTF-8 è il protocollo del livello di trasporto che trasporta RTSP;TCP
, porta predefinita554
; Se si tratta di tunneling RTSP-over-HTTP, la porta TCP predefinita è generalmente utilizzata insieme al protocollo RTP/RTCP, il protocollo RTP trasmette dati di flusso in tempo reale e il protocollo RTCP completa la trasmissione di flussi di dati e; comandi di controllo.
Protocollo RTP: nome completo
Real-time Transport Protocol
, il protocollo di trasmissione in tempo reale, è stato annunciato dal Multimedia Transmission Working Group dell'IETF nel 1996 nella RFC 1889. Il protocollo RTP descrive in dettaglio il formato di pacchetto standard per la distribuzione di audio e video su Internet. È costruito sul protocollo UDP.
Protocollo RTCP: nome completo
Real-time Transport Control Protocol
, Protocollo di controllo del trasporto in tempo reale, utilizzato con RTP. RTP utilizza una porta UDP con numero pari; RTCP utilizza la porta successiva da RTP, che è una porta con numero dispari. RTCP e RTP lavorano insieme. RTP implementa la trasmissione dei dati effettivi e RTCP è responsabile dell'invio di pacchetti di controllo a tutti i partecipanti alla sessione. La sua funzione principale è fornire feedback sulla qualità del servizio fornito da RTP.
La differenza tra protocollo RTSP e protocollo HTTP:
RTSP è stateful e i suoi comandi vengono sempre inviati in ordine e potrebbe essere sempre necessario inviare un comando prima di un altro comando. HTTP è senza stato Dopo che il protocollo invia un comando, la connessione verrà disconnessa e non esiste alcuna dipendenza tra i comandi.
Il protocollo rtsp utilizza la porta 554 e http utilizza la porta 80.
Le richieste RTSP possono essere inviate sia dal server che dal client, mentre le richieste HTTP possono essere inviate solo dal client.
I metodi RTSP comunemente utilizzati includono: OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN, ANNOUNCE, GET_PARAMETER e SET_PARAMETER, ecc. Le istruzioni dettagliate per l'uso sono le seguenti:
OPTIONS
: Il client ottiene dal server il metodo supportato dal server. Non influisce sullo stato del server;DESCRIBE
: Il client ottiene la descrizione dell'oggetto multimediale specificato dall'URL dal server, doveAccept
Il campo specifica il formato della descrizione;SETUP
: Il client richiede al server di stabilire una sessione e prepararsi per la trasmissione. Le informazioni richieste includono principalmente il protocollo di trasmissione e il numero di porta del cliente;PLAY
: Il client notifica attivamente al server di iniziare a inviare dati utilizzando il meccanismo specificato da SETUP.InRange
Il campo specifica l'ora di inizio e di fine della riproduzione (l'intervallo del flusso in tempo reale è generalmenteRange: npt=0.000-
), quando arrivano più richieste PLAY, il server metterà in coda le richieste PLAY e le eseguirà in sequenza, ovvero dovrà attendere il completamento del primo tempo PLAY prima di continuare a elaborare il secondo messaggio PLAY.PAUSE
: il client richiede che lo streaming multimediale del server venga temporaneamente sospeso.in grado di passareRange
Il parametro viene messo in pausa in un punto temporale specificato oppure è possibile specificare un flusso da mettere in pausa. Ad esempio, se si specifica un flusso audio da mettere in pausa, la riproduzione sarà silenziosa.RECORD
: RECORD notifica al server che il client inizierà a registrare i dati multimediali in base alla descrizione precedente. Intimestamp
I campi riflettono l'ora di inizio e di fine (UTC). Se questo campo non è presente, verrà utilizzata l'ora di inizio o di fine dalla descrizione del supporto. Se la sessione è già iniziata, la registrazione inizia immediatamente.request-URI
Successivo o un altro URI. Se il server non utilizza un URI di richiesta, la risposta dovrebbe essere 201 (Creato) e contenere un'intestazione Entità e Posizione che descriva lo stato della richiesta e faccia riferimento alla nuova risorsa.TEARDOWN
: il client richiede di interrompere l'invio del flusso URL specificato e di rilasciare le risorse correlate.REDIRECT
: per reindirizzare una richiesta, il server notifica al client che deve connettersi a un'altra posizione del server. Contiene l'intestazione Location obbligatoria, che indica che il client deve effettuare una richiesta per questo URL. Può contenere il parametro Range, che indica quando avrà effetto il reindirizzamento. Se il client desidera continuare a inviare o ricevere contenuti multimediali per questo URI, il client deve emettere una richiesta TEARDOWN per la sessione corrente e una SETUP per la nuova sessione sull'host specificato.ANNOUNCE
: Quando il client invia al server, significa inviare al server la descrizione della presentazione o l'oggetto multimediale identificato dall'URL della richiestaGET_PARAMETER
:GET_PARAMETER richiesta per recuperare i valori dei parametri per la rappresentazione o il flusso specificato nell'URI. Il contenuto delle risposte e delle risposte è lasciato all'implementazione. GET_PARAMETER senza un corpo dell'entità può essere utilizzato per testare l'attività ("ping") di un client o server.SET_PARAMETER
: questo metodo richiede di impostare i valori dei parametri della demo o del flusso specificato dall'URL. Le richieste dovrebbero contenere solo un singolo parametro, consentendo al client di decidere perché una particolare richiesta non è riuscita. Se la richiesta contiene più parametri, tutti i parametri possono essere impostati correttamente e il server deve agire solo su questa richiesta. Il server deve consentire l'impostazione ripetuta dei parametri sullo stesso valore, ma non la modifica del valore del parametro. Nota: i parametri di streaming multimediale devono essere impostati utilizzando il comando SETUP. È utile che i firewall limitino i parametri di trasferimento della configurazione a SETUP.Sopra vengono introdotti un totale di 11 metodi RTSP, tra cui:SETUP
、PLAY
、TEARDOWN
I tre comandi sono necessari nel processo RTSP e altri metodi non sono necessari.EANNOUNCE
、GET_PARAMETER
、SET_PARAMETER
I tre comandi possono essere inviati dal client al server o dal server al client. Gli altri comandi vengono inviati dal client al server.
RTSP ha due tipi di messaggi: messaggi di richiesta e messaggi di risposta. Il messaggio di richiesta si riferisce al messaggio di richiesta inviato dal client al server e il messaggio di risposta si riferisce alla risposta dal server al client.
Il messaggio di richiesta RTSP è composto da tre parti: riga di richiesta, intestazione della richiesta e corpo della richiesta. Tra questi, la riga della richiesta è obbligatoria, mentre l'intestazione e il corpo della richiesta sono facoltativi a seconda della situazione specifica.
rn
)Fine.方法
: È il metodo RTSP introdotto sopra. Incluse OPZIONI, DESCRIVI, IMPOSTA, GIOCA, PAUSA, SMONTA, ecc.请求URI
: identifica la risorsa multimediale da gestire, solitamente nel formato rtsp://example.com/path/to/stream.协议版本
: Indica la versione del protocollo RTSP che solitamente segue la richiestaRTSP/1.0
ORTSP/2.0
。OPTIONS rtsp://192.168.3.225:554/wbc RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
Il messaggio di richiesta RTSP è composto da tre parti: riga di stato, intestazione della risposta e corpo della risposta. Tra questi, la riga di stato è obbligatoria, mentre l'intestazione e il corpo della risposta sono facoltativi a seconda della situazione specifica.
协议版本
: indica la versione del protocollo RTSP seguita dalla risposta, solitamente RTSP/1.0 o RTSP/2.0.状态码
: Tre cifre, ad esempio: 200, 401, 500, ecc., utilizzate per indicare il risultato dell'elaborazione della richiesta. La prima cifra rappresenta la categoria di risposta: 2xx indica successo, 4xx indica errore del client e 5xx indica errore del server.状态文本
: una breve descrizione testuale che spiega il significato specifico del codice di stato corrispondente, ad esempio: OK, Non autorizzato, ecc.RTSP/1.0 200 OK
CSeq: 2
Date: Wed, Feb 04 1970 03:25:10 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER
v=0
o=- 8913478 1 IN IP4 192.168.3.91
s=LIVE555 Streaming Media v2016.07.19
i=1080
t=0 0
a=tool:LIVE555 Streaming Media v2016.07.19
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:LIVE555 Streaming Media v2016.07.19
a=x-qt-text-inf:1080
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64002A;sprop-parameter-sets=Z2QAKq2EAQwgCGEAQwgCGEAQwgCEO1A8ARPyoA==,aO48sA==
a=control:track1
m=audio 0 RTP/AVP 97
c=IN IP4 0.0.0.0
b=AS:768
a=rtpmap:97 PCMA/48000/2
a=control:track2
L'intestazione della risposta del messaggio RTSP conterrà alcuni campi. Di seguito sono riportati alcuni campi comunemente utilizzati:
SETUP
Selezionato nella risposta, una volta che il client ottiene l'ID di sessione, includerà l'ID di sessione nei futuri messaggi di richiesta di operazione per la sessione. Ad esempio: Session: 4581E0AE;Utilizza wireshark per acquisire i pacchetti di rete dei media di streaming RTSP. Puoi vedere che il processo generale è il seguente:
1. Il cliente inviaOPTIONS
Metodo, risposta del server;
2. Il cliente inviaDESCRIBE
Metodo, risposta del server;
3. Il cliente inviaSETUP
Metodo, risposta del server;
2. Il cliente inviaPLAY
Metodo, risposta del server;
2. Il cliente inviaTEARDOWN
Metodo, risposta del server;
Il pacchetto di flusso completo è il seguente:
OPTIONS rtsp://192.168.3.225:554/wbc RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
RTSP/1.0 200 OK
CSeq: 2
Date: Wed, Jul 03 2024 14:42:11 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER
DESCRIBE rtsp://192.168.3.225:554/wbc RTSP/1.0
CSeq: 3
User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp
RTSP/1.0 200 OK
CSeq: 3
Date: Wed, Jul 03 2024 14:42:11 GMT
Content-Base: rtsp://192.168.3.225/wbc/
Content-Type: application/sdp
Content-Length: 472
v=0
o=- 1720014950032000 1 IN IP4 192.168.3.225
s=LIVE555 Streaming Media v2016.07.19
i=wbc
t=0 0
a=tool:LIVE555 Streaming Media v2016.07.19
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:LIVE555 Streaming Media v2016.07.19
a=x-qt-text-inf:wbc
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=640029;sprop-parameter-sets=Z2QAKawsaoHgCJ WbgoCCgQ=,aO4xshs=
a=control:track1
SETUP rtsp://192.168.3.225/wbc/track1 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=55320-55321
RTSP/1.0 200 OK
CSeq: 4
Date: Wed, Jul 03 2024 14:42:11 GMT
Transport: RTP/AVP;unicast;destination=192.168.2.180;source=192.168.3.225;client_port=55320-55321;server_port=6970-6971
Session: 4581E0AE;timeout=65
PLAY rtsp://192.168.3.225/wbc/ RTSP/1.0
CSeq: 5
User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
Session: 4581E0AE
Range: npt=0.000-
RTSP/1.0 200 OK
CSeq: 5
Date: Wed, Jul 03 2024 14:42:11 GMT
Range: npt=0.000-
Session: 4581E0AE
RTP-Info: url=rtsp://192.168.3.225/wbc/track1;seq=7880;rtptime=3548171463
TEARDOWN rtsp://192.168.3.225/wbc/ RTSP/1.0
CSeq: 6
User-Agent: LibVLC/3.0.19 (LIVE555 Streaming Media v2016.11.28)
Session: 4581E0AE
RTSP/1.0 200 OK
CSeq: 6
Date: Wed, Jul 03 2024 14:42:19 GMT
Di seguito verranno analizzati ciascun metodo e risposta RTSP utilizzati nel messaggio precedente.
Ottieni i metodi disponibili dal server:
Il client invia il metodo OPTIONS e utilizzaCSeq
Per specificare il numero di sequenza della richiesta, utilizzareUser-Agent
identificare il proprio agente;
Il server risponderà alla richiesta utilizzandoCSeq
Per indicare a quale richiesta si sta rispondendo, utilizzareDate
specificare la data,Public
Specifica il metodo fornito.
Ottieni dal serverrtsp://192.168.3.225:554/wbc
una descrizione dell'oggetto multimediale, doveAccept
Il campo specifica il formato della descrizione:
Il client invia il metodo DESCRIBE e utilizzaCSeq
Per specificare il numero di sequenza della richiesta, utilizzareUser-Agent
identifica il tuo agente,Accept
Il campo specifica il formato della descrizione come SDP;
Il server risponderà a questa richiesta utilizzando CSeq
Per indicare a quale richiesta si sta rispondendo, utilizzareDate
specificare la data,Content-Type
Indica che il tipo di contenuto è SDP,Content-Length
Specificare la lunghezza del contenuto.
Avviso:
1. Per alcuni che richiedono nome utente e password, il server elaborerà il metodo DESCRIBE per l'autenticazione. Se le informazioni di autenticazione dell'autorizzazione non vengono trasportate o l'autenticazione non riesce, il server restituirà una risposta con il numero di errore 401. Quando il client riceve la risposta 401, deve generare l'autorizzazione in base alle informazioni di autenticazione dell'utente noto e inviare nuovamente la descrizione. Se l'autenticazione ha esito positivo, il server restituisce le informazioni di risposta che trasportano SDP.
2. Le informazioni SDP restituite dal server verranno analizzate in un articolo successivo.
Il client richiede al server di stabilire una sessione e prepararsi per la trasmissione. Le informazioni richieste includono principalmente il protocollo di trasmissione e il numero di porta del cliente;
Il client invia il metodo SETUP e utilizzaCSeq
Per specificare il numero di sequenza della richiesta, utilizzareUser-Agent
identifica il tuo agente,Transport
Il campo specifica il protocollo di trasmissione RTP/AVP e la porta accettabili (qui la porta RTP è 55320 e la porta RTCP è 55321);
Il server risponderà a questa richiesta utilizzando CSeq
Per indicare a quale richiesta si sta rispondendo, utilizzareDate
specificare la data,Transport
Specificare il protocollo di trasporto RTP/AVP, indirizzo di destinazione, indirizzo di origine, porta client (RTP è 55320, RTCP è 55321), porta server (RTP è 6970, RTCP è 6971),Session
Specificare l'ID della sessione.
Avviso:
In questo esempio, RTP viene trasmesso tramite il protocollo UDP. A volte, RTP verrà trasmesso tramite TCPTransport
I campi varieranno. Potrebbe essere il seguente:
客户端请求:Transport: RTP/AVP/TCP;unicast;interleaved=0-1
服务器响应:Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=24e4e500;mode="play"
RTP/AVP/TCP
Indica che il flusso RTP viene trasmesso tramite TCP Quando viene visualizzato questo valore, il messaggio non ha il campo client_port;
interleaved=0-1
Rappresenta streamid, identificando RTP streamid=0;
Quando il flusso di codice viene trasmesso tramite TCP, condivide un collegamento TCP con RTSP, quindi non è necessario stabilire una nuova connessione. Per distinguere i protocolli RTP, RTCP e RTSP, è necessario aggiungere un identificatore di intestazione qui viene utilizzato il campo header e la sezione tcphead è composta da quattro parole, il formato è il seguente:
| magic number | channel number | embedded data length | data |
magic number
: 1 byte, fisso su0x24
, è un personaggio$
, indicando che i dati trasmessi non sono il protocollo rtsp;
channel number
: 1 byte, ID del canale, che identifica il tipo di flusso, che è lo streamid menzionato prima;
embedded data length
: 2 byte, che indicano la lunghezza del flusso
data
: Indica i dati del pacchetto RTP/RTCP
Il client notifica attivamente al server di iniziare a inviare dati utilizzando il meccanismo specificato da SETUP.
Il client invia il metodo PLAY e utilizzaCSeq
Per specificare il numero di sequenza della richiesta, utilizzareUser-Agent
identifica il tuo agente,Session
il campo specifica l'ID della sessione,Range
Il campo specifica l'ora di inizio e di fine della riproduzione.
Il server risponderà a questa richiesta utilizzando CSeq
Indicare a quale richiesta si sta rispondendo;Date
specificare la data;Range
Il campo specifica l'ora di inizio e di fine della riproduzione;Session
Il campo specifica l'ID della sessione;RTP-Info
Il campo descrive le informazioni RTP del flusso di codice da inviare, come seq e rtptime del primo pacchetto RTP. Il client può demultiplexare in base a questo campo.
Il client richiede di interrompere l'invio del flusso URL specificato e di rilasciare le risorse correlate.
Il client invia il metodo TEARDOWN e utilizzaCSeq
Per specificare il numero di sequenza della richiesta, utilizzareUser-Agent
identifica il tuo agente,Session
Il campo specifica l'ID della sessione.
Il server risponderà a questa richiesta utilizzando CSeq
Indicare a quale richiesta si sta rispondendo;Date
Specificare la data.
Il contenuto della risposta di RTSP solitamente contiene un codice di risposta intero a 3 cifre e una frase del motivo. Lo scopo della frase è fornire una breve descrizione testuale del codice di stato. Non è necessario che il client controlli o visualizzi la frase del motivo. In base alla differenza tra la prima cifra del codice di risposta, questo può essere suddiviso nelle seguenti cinque categorie:
Naturalmente, i codici di errore RTSP e i metodi RTSP sono fortemente correlati. Alcuni errori possono essere attivati solo in metodi specifici. Le informazioni dettagliate sui codici di errore sono le seguenti:
codice di errore | frase motivo | metodo di risposta |
---|---|---|
100 | Continua | Tutto |
200 | Successo | Tutto |
201 | Creato | DOCUMENTAZIONE |
250 | Poco spazio di archiviazione | DOCUMENTAZIONE |
300 | Scelte multiple | Tutto |
301 | trasferito | Tutto |
302 | trasferito temporaneamente | Tutto |
303 | Vedi altro | Tutto |
305 | Usa un proxy | Tutto |
400 | Brutta richiesta | Tutto |
401 | Non autorizzato | Tutto |
402 | Pagamento richiesto | Tutto |
403 | Vietato | Tutto |
404 | Non trovato | Tutto |
405 | operazione non permessa | Tutto |
406 | Non accettabile | Tutto |
407 | Autenticazione proxy richiesta | Tutto |
408 | Richiesta timeout | Tutto |
410 | Andato | Tutto |
411 | Lunghezza richiesta | Tutto |
412 | Precondizione fallita DESCRIVI | IMPOSTARE |
413 | Richiesta entità troppo grande | Tutto |
414 | Request-URI troppo lungo | Tutto |
415 | Tipo di supporto non supportato | Tutto |
451 | Parametro non valido | IMPOSTARE |
452 | Identificatore di conferenza illegale | IMPOSTARE |
453 | Larghezza di banda insufficiente | IMPOSTARE |
454 | Sessione non trovata | Tutto |
455 | Metodo non valido in questo stato | Tutto |
456 | Campo intestazione non valido | Tutto |
457 | Intervallo non valido | GIOCARE |
458 | Il parametro è di sola lettura | SET_PARAMETRO |
459 | Operazione di aggregazione non consentita | Tutto |
460 | Solo operazione di aggregazione consentita | Tutto |
461 | Trasporto non supportato | Tutto |
462 | Destinazione irraggiungibile | Tutto |
500 | Errore interno del server | Tutto |
501 | Non implementato | Tutto |
502 | Cattivo Gateway | Tutto |
503 | Servizio non disponibile | Tutto |
504 | Timeout del gateway | Tutto |
505 | Versione RTSP non supportata | Tutto |
551 | Opzione non supportata | Tutto |
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁
fare riferimento a:
Protocollo di streaming in tempo reale: RTSP [spiegazione dettagliata]
Padroneggiare le richieste e le risposte RTSP da zero 1
Spiegazione dettagliata del protocollo multimediale in streaming RTSP