10. Esempi di implementazione
Questo documento impone solo i comportamenti di mittente e ricevente necessari per l'interoperabilità. Inoltre, certi algoritmi, come il controllo di bitrate o la gestione del buffer mirati a ambienti specifici, possono migliorare l'efficienza della ritrasmissione.
Questa sezione fornisce una panoramica delle diverse opzioni di implementazione consentite da questa specifica.
Il primo esempio descrive un'implementazione minima del ricevente. Con questa implementazione, è possibile ritrasmettere i pacchetti RTP persi, rilevare in modo efficiente la perdita delle ritrasmissioni ed eseguire ritrasmissioni multiple, se necessario. La maggior parte dell'elaborazione necessaria avviene sul server.
Il secondo esempio mostra come le ritrasmissioni possono essere usate in (piccoli) gruppi multicast insieme alla codifica stratificata. Illustra che ritrasmissioni e codifica stratificata possono essere tecniche complementari.
10.1. Esempio minimo di implementazione del ricevente
Questa sezione fornisce un esempio di implementazione che supporta ritrasmissioni multiple. Il mittente trasmette i dati originali in pacchetti RTP usando il formato di payload RTP video MPEG-4. Si assume che siano usati messaggi di feedback NACK, come da [1]. Di seguito un esempio di descrizione SDP con SSRC-multiplexing:
v=0
o=mascha 2980675221 2980675778 IN IP4 host.example.net
c=IN IP4 192.0.2.0
m=video 49170 RTP/AVPF 96 97
a=rtpmap:96 MP4V-ES/90000
a=rtcp-fb:96 nack
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96;rtx-time=3000
Il parametro specifico del formato "rtx-time" indica che il server manterrà in buffer i pacchetti inviati in un buffer di ritrasmissione per 3,0 secondi, dopodiché i pacchetti sono eliminati dal buffer di ritrasmissione e non verranno mai più inviati.
In questo esempio di implementazione, l'elaborazione RTP richiesta al ricevente per gestire la ritrasmissione è ridotta al minimo. Il ricevente rileva la perdita di pacchetti dai salti osservati nei numeri di sequenza ricevuti. Segnala i pacchetti persi al mittente tramite NACK come definito nel profilo AVPF [1]. Il ricevente dovrebbe tenere conto della lunghezza del buffer di ritrasmissione del mittente segnalata per dimensionare il proprio buffer di ricezione. Dovrebbe anche dedurre dalla lunghezza del buffer il numero massimo di volte che può essere richiesta la ritrasmissione di un pacchetto.
Il mittente dovrebbe ritrasmettere i pacchetti in modo selettivo; cioè, dovrebbe scegliere se ritrasmettere un pacchetto richiesto in base all'importanza del pacchetto, al Quality of Service (QoS) osservato e allo stato di congestione della connessione di rete verso il ricevente. Ovviamente, l'elaborazione del mittente aumenta con il numero di riceventi poiché informazioni di stato e carico di elaborazione devono essere allocati a ciascun ricevente.
10.2. Ritrasmissione di media codificato in modo stratificato in multicast
Questa sezione mostra come combinare ritrasmissioni con codifica stratificata in sessioni multicast. Si noti che il framework di ritrasmissione è offerto solo per piccole applicazioni multicast. Si rimanda all'RFC 2887 [10] per una discussione dei problemi dell'NACK implosion, congestione grave causata dal traffico di feedback, nelle applicazioni di multicast affidabile per grandi gruppi.
Pacchetti di importanza diversa sono inviati in sessioni RTP diverse. I flussi di ritrasmissione corrispondenti ai diversi layer possono essere visti a loro volta come diversi layer di ritrasmissione. L'importanza relativa dei diversi flussi di ritrasmissione dovrebbe riflettere l'importanza relativa dei diversi flussi originali.
In multicast, lo SSRC-multiplexing dei flussi originali e di ritrasmissione non è consentito come da sezione 5.3 di questo documento. Per questo motivo, i flussi di ritrasmissione MUST essere inviati in sessioni RTP distinte usando session-multiplexing.
Di seguito un esempio di descrizione SDP di ritrasmissioni multicast per media codificato in modo stratificato:
m=video 8000 RTP/AVPF 98
c=IN IP4 224.2.1.0/127/3
a=rtpmap:98 MP4V-ES/90000
a=rtcp-fb:98 nack
m=video 8000 RTP/AVPF 99
c=IN IP4 224.2.1.3/127/3
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98;rtx-time=3000
Il server e il ricevente possono implementare i metodi di ritrasmissione illustrati negli esempi precedenti. Inoltre, possono scegliere di richiedere e ritrasmettere un pacchetto perso a seconda del layer a cui appartiene.