Pergunta

Eu gostaria de mudar dinamicamente a fonte de vídeo em um aplicativo de streaming de vídeo. No entanto, as diferentes fontes de vídeo tem dimensões de imagem únicos. Posso gerar arquivos SDP individuais para cada fonte de vídeo, mas eu gostaria de combiná-los em um único arquivo SDP para que o cliente visualizar poderia redimensionar automaticamente a janela de exibição, como a fonte de vídeo mudou. Aqui estão dois arquivos exemplo SDP:

640x480.sdp:

v=0
o=VideoServer 305419896 9876543210 IN IP4 192.168.0.2
s=VideoStream640x480
t=0 0
c=IN IP4 192.168.0.2
m=video 8000/2 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=Z01AM5ZkBQHtCAAAAwAIAAADAYR4wZU=,aO48gJ==
a=control:trackID=1

960x480.sdp:

v=0
o=VideoServer 305419896 9876543210 IN IP4 192.168.0.2
s=VideoStream960x480
t=0 0
c=IN IP4 192.168.0.2
m=video 8000/2 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=J01AM5WwPA9sBAIA,KO4G8gA=
a=control:trackID=1

Como podem estes arquivos individuais ser combinados em um único arquivo SDP?

Foi útil?

Solução

Os parâmetros em seus dois exemplos SDP estão muito perto - o nome do fluxo e as sprop-parâmetro de conjuntos diferentes. Eu suponho que você não se preocupam com o nome do fluxo. Se você precisar de sprop-parâmetro de conjuntos separados e os clientes suportam o padrão bem você pode usar tipos de carga dinâmica separadas para cada resolução e tem um único SDP da seguinte forma:

    v=0
    o=VideoServer 305419896 9876543210 IN IP4 192.168.0.2
    s=VideoStream640x480
    t=0 0
    c=IN IP4 192.168.0.2
    m=video 8000/2 RTP/AVP 96 97
    a=rtpmap:96 H264/90000
    a=fmtp:96 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=Z01AM5ZkBQHtCAAAAwAIAAADAYR4wZU=,aO48gJ==
    a=rtpmap:97 H264/90000
    a=fmtp:97 packetization-mode=0; profile-level-id=4D4033; sprop-parameter-sets=J01AM5WwPA9sBAIA,KO4G8gA=
    a=control:trackID=1

Semelhante a outras respostas, se você realmente não precisa os diferentes nomes córrego ou as diferentes sprop-parâmetro de conjuntos que você deve ser capaz de usar seu primeiro SDP e formato de chave de fluxo médio. Eu não sei a carga real de H.264 ou o seu descodificador especial bem o suficiente para garantir que isso vai funcionar nos seus aplicativos, mas é muito comum em videoconferência aplicações para permitir dinamicamente alternar entre resoluções sem sinalizar uma mudança ou exigindo uma dinâmica separado tipo de carga útil.

Embora você pode concatenar dois documentos SDP como mencionado em outra resposta Eu não acho que ele vai ajudar neste caso. decodificadores H.264 só pode trabalhar com um único parâmetro sprop-parâmetro de conjuntos de cada vez que eu acredito. Uma vez que ambos SDPs teria o mesmo tipo de carga, porta de origem, etc. o receptor não sabe quando usar cada sprop parâmetros conjuntos de parâmetro. UPDATE: Nota algumas implementações obter os seus sprops inband e não da SDP (ou única inicialmente da SDP). Se isso se aplica em seu ambiente SDP sprop-parâmetro de conjuntos pode ser atualizado dentro da banda

Referências:

  1. RFC 3984 RTP Payload formato de vídeo H.264
  2. New proposta H.264 RTP Payload formato RFC 6184
  3. RFC 4566 SDP: Session Description Protocol

[Desculpe por não dar a plena citar - sinta-se livre para corrigir]

Outras dicas

Eu tenho ido sobre o RFC ( RFC2327 - SDP: Descrição Session Protocol ) e parece que você pode simplesmente concatenar os dois documentos SDP. O documento afirma explicitamente:

Quando SDP é transmitida pela SAP, apenas uma sessão descrição é permitido por pacote. Quando SDP é transmitida por outros meios, <> fortes muitas descrições de sessão SDP podem ser concatenados em conjunto (a `v =' linha que indica o início de uma sessão descrição termina a descrição anterior) .

Eu acho que depende do seu decodificador. Se ele suporta parâmetros de mudança dentro do fluxo, então se você pode dizer o codificador para colocar o cabeçalho correspondente ao alterar a resolução, o descodificador deve mudar automaticamente.

Qual é a sua pergunta exatamente? É:? Como posso alterar a resolução sem parar / reiniciar o fluxo

Eu não acho que você pode dizer com antecedência para um descodificador, aqui estão o potencial de resolução que você vai ver com alguma magia SDP. Ou o seu decodificador é capaz de entender H264 alteração de parâmetros, e então você está bem, ou você tem que parar de reiniciar a coisa toda, e depois SDP dinâmica é suficiente.

Eu sei que, por exemplo, o VLC é capaz de detectar a mudança de codificação MP4 (por exemplo, movendo-se de taxa de bits variável para taxa de bits constante), mas irá falhar se você alterar a resolução A única coisa que você pode fazer com SDP é combinar descrição diferente de mídia, por exemplo, com diferentes tipo de carga dinâmica e atributo de controle-id diferente.

Você pode fazer a mudança de carga dinâmica ou a alteração do parâmetro set in-stream, ou SIP re-CONVIDAM.

mudanças Carga tem um problema que, se você não controlar o codificador eo decodificador que você precisa para garantir que a outra extremidade aceita ambas as cargas úteis, e que eles vão mudar cargas corretamente (e rápido o suficiente para você - não há nenhuma exigência em isso).

mudanças

in-stream ter um problema se os pacotes de set-parâmetros são perdidos. Você pode usar um conjunto diferente de conjuntos de parâmetros (mudança de parâmetro-set 1-2 quando você muda) para evitar mis-decodificação - se os conjuntos são perdidos, você deve apenas obter uma imagem congelada ou em branco. Eu aconselho retransmitindo-os algumas vezes (não em sucessão demasiado rápida).

SIP re-CONVIDAM é out-of-band e handshaked, e, portanto, seguro, mas acrescenta demora a qualquer switch e pode pulso aleatório, dependendo do receptor, e poderia ser rejeitada.

(Nota: Eu sou um autor de RFC 3984bis, a atualização para RFC 3984)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top