minhas informações de contato
Correspondência[email protected]
2024-07-08
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀
🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C 、数据结构、音视频🍭
🤣本文内容🤣:🍭介绍RTSP协议 🍭
😎金句分享😎:🍭你不能选择最好的,但最好的会来选择你——泰戈尔🍭
⏰Tempo de lançamento⏰: 06/07/2024 12:22:00
Este artigo não pode ser encaminhado sem permissão! ! !
RTSP, nome completo Real Time Streaming Protocol
, o protocolo de streaming em tempo real, é um protocolo da camada de aplicação no sistema de protocolo TCP/IP. É um padrão RFC IETF apresentado pela Columbia University, Netscape e RealNetworks.
O documento oficial sobre o protocolo RTSP é RFC2326, link do documento:RFC2326-Protocolo de transmissão em tempo real (RTSP)。
A sintaxe e a operação do protocolo RTSP são referenciadas. HTTP/1.1
, um protocolo baseado em texto que usa o conjunto de caracteres ISO10646 e codificação UTF-8, o protocolo da camada de transporte que transporta RTSP é;TCP
, porta padrão554
; Se for um túnel RTSP sobre HTTP, a porta TCP padrão é geralmente usada em conjunto com o protocolo RTP/RTCP, o protocolo RTP transmite dados de fluxo em tempo real e o protocolo RTCP completa a transmissão de fluxos de dados; comandos de controle.
Protocolo RTP: nome completo
Real-time Transport Protocol
, o protocolo de transmissão em tempo real, foi anunciado pelo Grupo de Trabalho de Transmissão Multimídia da IETF em 1996 na RFC 1889. O protocolo RTP detalha o formato de pacote padrão para entrega de áudio e vídeo pela Internet. É construído no protocolo UDP.
Protocolo RTCP: nome completo
Real-time Transport Control Protocol
, Protocolo de controle de transporte em tempo real, usado com RTP. O RTP usa uma porta UDP de número par. O RTCP usa a próxima porta do RTP, que é uma porta de número ímpar. O RTCP e o RTP trabalham juntos. O RTP implementa a transmissão de dados reais e o RTCP é responsável por enviar pacotes de controle para todos na sessão. A sua principal função é fornecer feedback sobre a qualidade do serviço prestado pela RTP.
A diferença entre o protocolo RTSP e o protocolo HTTP:
O RTSP tem estado e seus comandos são sempre enviados em ordem, e um comando pode sempre precisar ser enviado antes de outro comando. HTTP não tem estado Depois que o protocolo envia um comando, a conexão será desconectada e não haverá dependência entre os comandos.
O protocolo rtsp usa a porta 554 e o http usa a porta 80.
As solicitações RTSP podem ser enviadas tanto pelo servidor quanto pelo cliente, enquanto as solicitações HTTP só podem ser enviadas pelo cliente.
Os métodos RTSP comumente usados incluem: OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN, ANNOUNCE, GET_PARAMETER e SET_PARAMETER, etc. As instruções detalhadas de uso são as seguintes:
OPTIONS
: O cliente obtém do servidor o método suportado pelo servidor. Não afeta o estado do servidor;DESCRIBE
: O cliente obtém a descrição do objeto de mídia especificado pela URL do servidor, ondeAccept
O campo especifica o formato da descrição;SETUP
: o cliente solicita ao servidor que estabeleça uma sessão e se prepare para a transmissão. As informações da solicitação incluem principalmente o protocolo de transmissão e o número da porta do cliente;PLAY
: o cliente notifica ativamente o servidor para começar a enviar dados usando o mecanismo especificado por SETUP.emRange
O campo especifica o horário de início e término da reprodução (o intervalo do fluxo em tempo real geralmente éRange: npt=0.000-
), quando várias solicitações PLAY chegarem, o servidor enfileirará as solicitações PLAY e as executará sequencialmente, ou seja, deverá aguardar a conclusão do primeiro tempo PLAY antes de continuar a processar a segunda mensagem PLAY.PAUSE
: o cliente solicita que o streaming de mídia do servidor seja temporariamente suspenso.capaz de passarRange
O parâmetro pausa em um ponto de tempo especificado ou você pode especificar um fluxo para pausar. Por exemplo, se você especificar um fluxo de áudio para pausar, a reprodução ficará silenciosa.RECORD
: RECORD notifica o servidor que o cliente iniciará a gravação dos dados da mídia conforme descrição anterior. emtimestamp
Os campos refletem os horários de início e término (UTC). Se este campo não estiver presente, será utilizado o horário de início ou término da descrição da mídia. Se a sessão já tiver iniciado, a gravação começa imediatamente.request-URI
Próximo ou outro URI. Se o servidor não usar um URI de solicitação, a resposta deverá ser 201 (Criado) e conter um cabeçalho Entidade e Local descrevendo o status da solicitação e referenciando o novo recurso.TEARDOWN
: o cliente solicita a interrupção do envio do fluxo de URL especificado e a liberação de recursos relacionados.REDIRECT
: para redirecionar uma solicitação, o servidor notifica o cliente de que ele deve se conectar a outro local de servidor. Contém o cabeçalho Location obrigatório, que indica que o cliente deve fazer uma solicitação para esta URL. Pode conter o parâmetro Range, indicando quando o redirecionamento entrará em vigor. Se o cliente quiser continuar enviando ou recebendo mídia para esse URI, o cliente deverá emitir uma solicitação TEARDOWN para a sessão atual e um SETUP para a nova sessão no host especificado.ANNOUNCE
: Quando o cliente envia para o servidor, significa enviar ao servidor a descrição da apresentação ou objeto de mídia identificado pela URL de solicitaçãoGET_PARAMETER
:GET_PARAMETER solicitação para recuperar valores de parâmetros para a representação ou fluxo especificado no URI. O conteúdo das respostas e respostas é deixado para a implementação. GET_PARAMETER sem corpo de entidade pode ser usado para testar a atividade ("ping") de um cliente ou servidor.SET_PARAMETER
: Este método solicita a definição dos valores dos parâmetros do fluxo especificado de demonstração ou URL. As solicitações devem conter apenas um único parâmetro, permitindo ao cliente decidir por que uma solicitação específica falhou. Se a solicitação contiver vários parâmetros, todos os parâmetros poderão ser definidos com sucesso e o servidor deverá agir apenas de acordo com essa solicitação. O servidor deve permitir que os parâmetros sejam definidos repetidamente com o mesmo valor, mas não alterar o valor do parâmetro. Nota: Os parâmetros de streaming de mídia devem ser definidos usando o comando SETUP. É benéfico para os firewalls limitar os parâmetros de transferência de configuração para SETUP.Um total de 11 métodos RTSP são apresentados acima, entre os quais,SETUP
、PLAY
、TEARDOWN
Os três comandos são necessários no processo RTSP e outros métodos não são necessários.eANNOUNCE
、GET_PARAMETER
、SET_PARAMETER
Os três comandos podem ser enviados do cliente para o servidor ou do servidor para o cliente. Os demais comandos são enviados do cliente para o servidor.
O RTSP possui dois tipos de mensagens: mensagens de solicitação e mensagens de resposta. A mensagem de solicitação refere-se à mensagem de solicitação enviada do cliente para o servidor, e a mensagem de resposta refere-se à resposta do servidor para o cliente.
A mensagem de solicitação RTSP consiste em três partes: linha de solicitação, cabeçalho da solicitação e corpo da solicitação. Dentre eles, a linha de solicitação é obrigatória, enquanto o cabeçalho e o corpo da solicitação são opcionais dependendo da situação específica.
rn
)Terminar.方法
: É o método RTSP apresentado acima. Incluindo OPÇÕES, DESCRIÇÃO, CONFIGURAÇÃO, REPRODUÇÃO, PAUSA, DESMONTAGEM, etc.请求URI
: identifica o recurso de mídia a ser operado, geralmente no formato rtsp://example.com/path/to/stream.协议版本
: Indica a versão do protocolo RTSP que a requisição segue, geralmenteRTSP/1.0
ouRTSP/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)
A mensagem de solicitação RTSP consiste em três partes: linha de status, cabeçalho de resposta e corpo da resposta. Entre eles, a linha de status é obrigatória, enquanto o cabeçalho e o corpo da resposta são opcionais dependendo da situação específica.
协议版本
: indica a versão do protocolo RTSP que a resposta segue, geralmente RTSP/1.0 ou RTSP/2.0.状态码
: Três dígitos, como: 200, 401, 500, etc., utilizados para indicar o resultado do processamento da solicitação. O primeiro dígito representa a categoria de resposta: 2xx indica sucesso, 4xx indica erro do cliente e 5xx indica erro do servidor.状态文本
: uma breve descrição de texto explicando o significado específico do código de status correspondente, como: OK, Não autorizado, etc.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
O cabeçalho de resposta da mensagem RTSP conterá alguns campos. A seguir estão alguns campos comumente usados:
SETUP
Selecionado na resposta, assim que o cliente obtiver o ID da Sessão, ele incluirá o ID da Sessão em futuras mensagens de solicitação de operação para a Sessão. Por exemplo: Sessão: 4581E0AE;Use o wireshark para capturar os pacotes de rede da mídia de streaming RTSP. Você pode ver que o processo geral é o seguinte:
1. Cliente enviaOPTIONS
Método, resposta do servidor;
2. Cliente enviaDESCRIBE
Método, resposta do servidor;
3. Cliente enviaSETUP
Método, resposta do servidor;
2. Cliente enviaPLAY
Método, resposta do servidor;
2. Cliente enviaTEARDOWN
Método, resposta do servidor;
O pacote de fluxo completo é o seguinte:
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
A seguir analisaremos cada método RTSP e resposta usado na mensagem anterior.
Obtenha os métodos disponíveis do servidor:
O cliente envia o método OPTIONS e usaCSeq
Para especificar o número de sequência da solicitação, useUser-Agent
identificar o próprio agente;
O servidor responderá à solicitação usandoCSeq
Para indicar qual solicitação está sendo respondida, useDate
especifique a data,Public
Especifica o método fornecido.
Obter do servidorrtsp://192.168.3.225:554/wbc
uma descrição do objeto de mídia, ondeAccept
O campo especifica o formato da descrição:
O cliente envia o método DESCRIBE e usaCSeq
Para especificar o número de sequência da solicitação, useUser-Agent
identifique seu agente,Accept
O campo especifica o formato da descrição como SDP;
O servidor responderá a esta solicitação usando CSeq
Para indicar qual solicitação está sendo respondida, useDate
especifique a data,Content-Type
Indica que o tipo de conteúdo é SDP,Content-Length
Especifique o comprimento do conteúdo.
Perceber:
1. Para alguns que exigem nome de usuário e senha, o servidor processará o método DESCRIBE para autenticação. Se as informações de autenticação da Autorização não forem transportadas ou a autenticação falhar, o servidor retornará uma resposta com o número de erro 401. Quando o cliente receber a resposta 401, ele precisará gerar a Autorização com base nas informações de autenticação do usuário conhecidas e enviar a descrição novamente. Se a autenticação for bem-sucedida, o servidor retornará informações de resposta transportando SDP.
2. As informações SDP retornadas pelo servidor serão analisadas em artigo posterior.
O cliente solicita ao servidor que estabeleça uma sessão e se prepare para a transmissão. As informações da solicitação incluem principalmente o protocolo de transmissão e o número da porta do cliente;
O cliente envia o método SETUP e usaCSeq
Para especificar o número de sequência da solicitação, useUser-Agent
identifique seu agente,Transport
O campo especifica o protocolo de transmissão RTP/AVP e a porta aceitáveis (aqui a porta RTP é 55320 e a porta RTCP é 55321);
O servidor responderá a esta solicitação usando CSeq
Para indicar qual solicitação está sendo respondida, useDate
especifique a data,Transport
Especifique o protocolo de transporte RTP/AVP, endereço de destino, endereço de origem, porta do cliente (RTP é 55320, RTCP é 55321), porta do servidor (RTP é 6970, RTCP é 6971),Session
Especifique o ID da sessão.
Perceber:
Neste exemplo, o RTP é transmitido através do protocolo UDP. Às vezes, o RTP será transmitido através do TCP, então.Transport
Os campos irão variar. Pode ser o seguinte:
客户端请求:Transport: RTP/AVP/TCP;unicast;interleaved=0-1
服务器响应:Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=24e4e500;mode="play"
RTP/AVP/TCP
Indica que o fluxo RTP é transmitido através de TCP. Quando este valor aparece, a mensagem não possui o campo client_port;
interleaved=0-1
Representa streamid, identificando RTP streamid=0;
Quando o fluxo de código é transmitido através do TCP, ele compartilha um link TCP com o RTSP, portanto não precisa estabelecer uma nova conexão. Para distinguir os protocolos RTP, RTCP e RTSP, é necessário adicionar um identificador de cabeçalho. O campo de cabeçalho é usado aqui, e a seção tcphead tem quatro palavras, o formato é o seguinte:
| magic number | channel number | embedded data length | data |
magic number
: 1 byte, fixo em0x24
, é um personagem$
, indicando que os dados que estão sendo transmitidos não são o protocolo rtsp;
channel number
: 1 byte, ID do canal, identificando o tipo de stream, que é o streamid mencionado anteriormente;
embedded data length
: 2 bytes, indicando o comprimento do fluxo
data
: Indica dados de pacote RTP/RTCP
O cliente notifica ativamente o servidor para começar a enviar dados usando o mecanismo especificado por SETUP.
O cliente envia o método PLAY e usaCSeq
Para especificar o número de sequência da solicitação, useUser-Agent
identifique seu agente,Session
campo especifica o ID da sessão,Range
O campo especifica o horário de início e término da reprodução.
O servidor responderá a esta solicitação usando CSeq
Indique qual solicitação está sendo respondida;Date
especifique a data;Range
O campo especifica o horário de início e término da reprodução;Session
O campo especifica o ID da sessão;RTP-Info
O campo descreve as informações RTP do fluxo de código a ser enviado, como o seq e o rtptime do primeiro pacote RTP. O cliente pode demultiplexar com base neste campo.
O cliente solicita a interrupção do envio do fluxo de URL especificado e a liberação de recursos relacionados.
O cliente envia o método TEARDOWN e usaCSeq
Para especificar o número de sequência da solicitação, useUser-Agent
identifique seu agente,Session
campo especifica o ID da sessão.
O servidor responderá a esta solicitação usando CSeq
Indique qual solicitação está sendo respondida;Date
Especifique a data.
O conteúdo da resposta do RTSP geralmente contém um código de resposta inteiro de 3 dígitos e uma frase de razão. O objetivo da frase é fornecer uma breve descrição de texto do código de status. O cliente não precisa verificar ou exibir a frase de razão. De acordo com a diferença entre o primeiro dígito do código de resposta, ele pode ser dividido nas cinco categorias a seguir:
Obviamente, os códigos de erro RTSP e os métodos RTSP estão fortemente relacionados. Alguns erros só podem ser acionados em métodos específicos.
Erro de código | frase de razão | método de resposta |
---|---|---|
100 | Continuar | Todos |
200 | Sucesso | Todos |
201 | Criada | REGISTRO |
250 | Pouco espaço de armazenamento | REGISTRO |
300 | Escolhas múltiplas | Todos |
301 | Movido Permanentemente | Todos |
302 | Movido Temporariamente | Todos |
303 | Ver outros | Todos |
305 | Usar proxy | Todos |
400 | Pedido ruim | Todos |
401 | Não autorizado | Todos |
402 | Pagamento Requerido | Todos |
403 | Proibido | Todos |
404 | Não encontrado | Todos |
405 | Método não permitido | Todos |
406 | Não aceitável | Todos |
407 | Autenticação de proxy necessária | Todos |
408 | Solicitar tempo limite | Todos |
410 | Perdido | Todos |
411 | Comprimento necessário | Todos |
412 | Pré-condição falhou DESCREVA | CONFIGURAR |
413 | Solicitação de entidade muito grande | Todos |
414 | Request-URI muito longo | Todos |
415 | Tipo de mídia não suportado | Todos |
451 | Parâmetro inválido | CONFIGURAR |
452 | Identificador de conferência ilegal | CONFIGURAR |
453 | Não há largura de banda suficiente | CONFIGURAR |
454 | Sessão não encontrada | Todos |
455 | Método não válido neste estado | Todos |
456 | Campo de cabeçalho inválido | Todos |
457 | Intervalo inválido | JOGAR |
458 | O parâmetro é somente leitura | CONJUNTO_PARÂMETRO |
459 | Operação agregada não permitida | Todos |
460 | Somente operação agregada permitida | Todos |
461 | Transporte sem suporte | Todos |
462 | Destino inalcançável | Todos |
500 | Erro do Servidor Interno | Todos |
501 | Não implementado | Todos |
502 | Gateway ruim | Todos |
503 | Serviço não disponível | Todos |
504 | Tempo limite do gateway | Todos |
505 | Versão RTSP não suportada | Todos |
551 | Opção não suportada | Todos |
如果文章有帮助的话,点赞👍、收藏⭐,支持一波,谢谢 😁😁😁
referir-se:
Protocolo de streaming em tempo real – RTSP [explicação detalhada]
Domine solicitações e respostas RTSP do zero 1
Explicação detalhada do protocolo de streaming de mídia RTSP