Sto lavorando a un'implementazione di uno degli Android Test Cases riguardante la registrazione PreviewTexture con le nuove API MediaCodec e MediaMuxer di Android 4.3.Anteprima fotocamera muxing stream elementare codificato h264 con MediaMuxer
Sono riuscito a registrare il flusso di anteprima con un framerate di circa 30 fps impostando la voce di registrazione sui misuratori della fotocamera.
Tuttavia, ho riscontrato un problema di ritardo/ritardo e non so davvero come risolverlo. Quando si registra l'anteprima della fotocamera con impostazioni di qualità abbastanza standard (1280x720, bitrate di ~ 8.000.000) l'anteprima e il materiale codificato soffre di ritardi occasionali. Per essere più specifici: questo ritardo si verifica ogni 2-3 secondi e impiega circa 300-600 ms.
Tracciando il ritardo sono riuscito a capire il ritardo deriva dalla seguente riga di codice nel metodo "drainEncoder":
mMuxer.writeSampleData(mTrackIndex, encodedData, mBufferInfo);
Questa linea è chiamata in un ciclo se l'encoder ha dati disponibili per il muxing. Attualmente non registro l'audio, quindi solo i flussi h264 vengono convertiti in un formato mp4 da MediaMuxer.
Non so se questo ha qualcosa a che fare con questo ritardo, ma si verifica sempre quando il ciclo ha bisogno di due iterazioni per annullare l'accodamento tutti i dati disponibili del codificatore (per essere ancora più specifico che si verifica sempre nella prima delle queste due iterazioni). Nella maggior parte dei casi è sufficiente un'iterazione per annullare l'eliminazione dell'encoder.
Poiché non ci sono molte informazioni online su queste nuove API, qualsiasi aiuto è molto apprezzato!
Grazie mille per la risposta: - I ritardi si verificano abbastanza regolarmente ogni 5 secondi. Ma la frequenza non cambia quando cambio l'intervallo I-Frame. La migliore ipotesi è che l'intervallo I-Frame personalizzato venga ignorato dal mio codificatore (Nexus 4)? - Ho già iniziato a provare a separare il muxing in un thread separato ieri e questo sembra funzionare ... quindi andrò da quella parte, grazie per aver confermato! - Systrace il ritardo non appena ho abbastanza tempo – mAx