2017-06-20 12 views
1

Il existe quatre entrées exactes lors de la recherche google sur la lecture deinterlaced avec IJKPlayer. Le meilleur semble être this. Cependant, la solution mentionnée en ajoutantdésentrelacer la vidéo lors de la lecture avec IJKPlayer

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "vf0", "yadif") 

au code ne semble pas fonctionner. Bien sûr, lorsque vous utilisez ffplay (ou ffmpeg), il s'agit de filtres inclus ou non. Donc, existe-t-il une solution de travail disponible, qui désentrelace avec IJKPlayer et indique quels filtres utiliser (pendant le compiletime et l'exécution), idiot-proof?

EDIT:

J'ai trouvé, que le joueur a été compilé avec --disable-avfilter. J'ai vérifié la dernière version de git et l'ai compilé avec --enable-avfilter. Maintenant, le répertoire android/contrib/build/ffmpeg-armv7a/output/lib contient libavfilter.a, aussi. libijkffmpeg.so est plus grand en taille et en cours d'exécution

nm -D --defined-only libijkffmpeg.so 

affiche le symbole vf_yadif. Cependant, IJKPlayer ne désinstalle toujours pas lors de l'utilisation avec l'option vf0/yadif.

I ajouté info version pour avfilter aussi:

I/IJKMEDIA: ===== versions ===== 
I/IJKMEDIA: ijkplayer : k0.8.0 
I/IJKMEDIA: FFmpeg  : ff3.3--ijk0.8.0--20170518--001 
I/IJKMEDIA: libavutil : 55.58.100 
I/IJKMEDIA: SDL_RunThread: [32440] ff_msg_loop 
I/IJKMEDIA: libavcodec : 57.89.100 
I/IJKMEDIA: libavformat : 57.71.100 
I/IJKMEDIA: libavfilter : 6.82.100 
I/IJKMEDIA: libswscale : 4.6.100 
I/IJKMEDIA: libswresample: 2.7.100 
+0

Je trouve les fichiers suivants dans les sources IJKPlayer: ./android/contrib/ffmpeg-armv7a/libavfilter/vf_yadif.c ./android/contrib/ffmpeg-armv7a/libavfilter/yadif.h Je me demande, comment yadif peut être activé. –

Répondre

1

Enfin, j'ai trouvé la solution pour elle:

Voici comment utiliser désentrelacement avec IJKPlayer sur android:

  • Obtenir la dernière version de IJKPlayer de GIT avec

    git clone https://github.com/Bilibili/ijkplayer.git

  • Dans le répertoire nouvellement créé, accédez à config.

  • Ouvrez le module fichier * .sh vous aimez et activer le filtrage:

    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-avfilter"

    export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-filters"

  • Maintenant, allez à ijkplayer/ijkmedia et config.h ouvert. Dans config.h supprimer les lignes suivantes:

// FIXME: merge filter related code and enable it // remove these lines to enable avfilter #ifdef CONFIG_AVFILTER #undef CONFIG_AVFILTER #endif #define CONFIG_AVFILTER 0

  • Construire le joueur comme décrit dans README.md.

Le joueur prend désormais en charge désentrelacement en définissant:

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "vf0", "yadif"); 

Cela doit être fait avant mediaPlayer.start(). Comme le désentrelacement est un travail qui prend beaucoup de temps, j'ai dû jouer avec les options yadif, pour le faire fonctionner sur mon appareil, joliment. Je l'utilise avec "yadif=2". Voir la documentation officielle de FFmpeg pour plus de détails sur yadif.