Sto lavorando a un'applicazione che deve trasferire un video con codifica H.264 in tempo reale su UDP (una sorta di videochiamata).Divisione NAL/slice codificata H.264
Recentemente siamo passati a un encoder hardware, che supporta solo un numero limitato di profili H.264. Come risultato, ogni frame video codificato ora consiste in un singolo NALu. Più precisamente, per i frame IDR (chiave) l'encoder produce SSP, PSP e una singola slice IDR, per gli altri - una singola slice non IDR.
Ora, il mio obiettivo è dividere lo slice NALu in molti più piccoli, perché in caso di perdita di pacchetti se il NALu non può essere completamente assemblato, è completamente perso. Al minimo ho bisogno di suddividere spazialmente la fetta, cioè di inserire intervalli di macroblocchi in NALus diversi. Se possibile, mi piacerebbe anche estrarre livelli di qualità, in modo che il livello di base possa essere protetto da più pacchetti ridondanti (FEC).
Nota: non sto parlando di transcodifica. Riguarda il reimballaggio e la riformattazione, l'individuazione dei blocchi di dati di definizione dei macroblocchi e il loro inserimento in un modo diverso.
Ora sto cercando di analizzare le intestazioni di dati appropriate: SPS, PPS e sezioni codificate, utilizzando sia le specifiche standard H.264 che alcuni codici di decodifica open source. Il compito sembra possibile, anche se un po 'complicato, con molti dettagli tecnici.
La mia domanda è: è un problema noto? C'è qualche API/libreria che fa esattamente questo?
Dovresti pubblicare il modello dell'encoder hardware, qualcuno potrebbe sapere come configurarlo per produrre NALu più piccolo di un valore (come MTU) .Per FEC puoi usare RTP.Puoi vedere [RFC 6184] (https: // tools .ietf.org/html/rfc6184 # section-6.1) per le regole di pacchettizzazione comuni e [RFC 5109] (https: //tools.i etf.org/html/rfc5109) per FEC. – aergistal
@aergistal - grazie, usiamo già FEC e trasmettiamo tramite RTP (usando ffmpeg). Comunque questa situazione è tutto-o-niente, o l'intero NALu è completamente recuperato o meno. Considerando che mi piacerebbe avere diversi NALus più piccoli per essere in grado di recuperare una parte del frame. – valdo
@valdo Cosa intendi con "è un problema noto?" – ARK