FFmpeg decodare H264 (Programare, Iphone, Ffmpeg, H.264)

Steve McFarlin a intrebat.
a intrebat.

Sunt decodarea unui flux H264 folosind FFmpeg pe iPhone. Știu că fluxul H264 este valid și că SPS/PPS sunt corecte, deoarece VLC, Quicktime, Flash decodifică fluxul în mod corespunzător. Problema pe care o am pe iPhone este cel mai bine ilustrată de această imagine.

Este ca și cum vectorii de mișcare ar fi fost desenați. Această fotografie a fost făcută în timp ce în imagine era multă mișcare. Dacă scena este statică, atunci apar puncte în colțuri. Acest lucru se întâmplă întotdeauna cu cadre predictive. Culorile blocate sunt, de asemenea, o problemă.

Am încercat diverse setări de construcție pentru FFmpeg, cum ar fi dezactivarea optimizărilor, asm, neon și multe alte combinații. Nimic nu pare să modifice comportamentul decodorului. Am încercat, de asemenea, versiunile Works with HTML, Love and Peace, precum și cele mai recente surse GIT. Există poate o setare care îmi lipsește sau poate că am activat din greșeală o setare de depanare în decodor.

Editați

Folosesc sws_scale pentru a converti imaginea în RGBA. Am încercat diverse formate de pixeli diferite, cu aceleași rezultate.

sws_scale(convertCtx, (const uint8_t**)srcFrame->data, srcFrame->linesize, 0, codecCtx->height, dstFrame->data, dstFrame->linesize);

Folosesc PIX_FMT_YUV420P ca format sursă atunci când îmi configurez contextul codecului.

Comentarii

  • începeți decodarea de la cadrele cheie? –  > Por alex-i.
  • Aceasta este o întrebare bună. Cred că da, dar voi verifica de două ori. Știu că dacă configurez encoderul să genereze doar cadre cheie, atunci tot ce obțin este o imagine blocată. Fără săgeți, așa cum mă așteptam. –  > Por Steve McFarlin.
  • Am confirmat că fluxul începe cu un cadru cheie. M-am gândit că poate asamblatorul meu de pachete RTP FU-A ar fi putut fi defect, dar tocmai am verificat din nou și este corect. –  > Por Steve McFarlin.
1 răspunsuri
duskwuff -inactiv-

Ceea ce te uiți este vizualizarea vectorului de mișcare a lui ffmpeg. Asigură-te că niciunul dintre următorii indicatori de depanare nu este setat:

avctx->debug & FF_DEBUG_VIS_QP
avctx->debug & FF_DEBUG_VIS_MB_TYPE
avctx->debug_mv

De asemenea, țineți cont de faptul că decodarea video H264 folosind CPU va fi MULT mai lentă și mai puțin eficientă din punct de vedere energetic pe iOS decât folosind decodorul hardware.

Comentarii

  • Vă mulțumim. Voi verifica acest lucru. Aș folosi decodorul hardware dacă aș putea să o fac în timp real. NALU provin din pachetele RTP. Latența dintre trimiterea și primirea acestora trebuie să fie redusă la minimum. –  > Por Steve McFarlin.
  • Asta a fost tot. Nu-mi vine să cred că mai aveam acel cod încă acolo în codul meu de init FFmpeg. Mulțumesc pentru că ai subliniat acest lucru. S-ar putea să fi stat aici toată ziua până când am citit și am văzut asta. Din nou, mulțumesc mult. –  > Por Steve McFarlin.
  • Când încerc să redau înregistrarea video h264, aceasta este prea rapidă. Cum pot rezolva acest lucru? –  > Por Vineesh TP.