Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用IJKPlayer播放时取消交错显示视频_Android_Video_Options_Ijkplayer - Fatal编程技术网

Android 使用IJKPlayer播放时取消交错显示视频

Android 使用IJKPlayer播放时取消交错显示视频,android,video,options,ijkplayer,Android,Video,Options,Ijkplayer,在谷歌搜索IJKPlayer的解交错播放时,共有四个条目。最好的似乎是。然而,上述解决方案通过添加 mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "vf0", "yadif") 对代码的修改似乎不起作用。当然,当使用ffplay(或ffmpeg)时,所有的问题都在于是否包含过滤器。那么,是否有可用的工作解决方案,可以与IJKPlayer分离并告诉(在编译时和运行时)使用哪些过滤器,以防白痴 编辑: 我发现,这个播放器是用--

在谷歌搜索IJKPlayer的解交错播放时,共有四个条目。最好的似乎是。然而,上述解决方案通过添加

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "vf0", "yadif")
对代码的修改似乎不起作用。当然,当使用ffplay(或ffmpeg)时,所有的问题都在于是否包含过滤器。那么,是否有可用的工作解决方案,可以与IJKPlayer分离并告诉(在编译时和运行时)使用哪些过滤器,以防白痴

编辑:

我发现,这个播放器是用--disable-avfilter编译的。我从git签出了最新版本,并用--enable-avfilter编译了它。现在,目录android/contrib/build/ffmpeg-armv7a/output/lib也包含libavfilter.a。libijkffmpeg.so在大小和运行方面都更大

nm -D --defined-only libijkffmpeg.so
显示符号vf_yadif。但是,当与选项vf0/yadif一起使用时,IJKPlayer仍然不会解交错

我还为avfilter添加了版本信息:

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

最后,我找到了解决方案:

这是如何在android上使用IJKPlayer的逐行扫描:

  • 使用从GIT获取IJKPlayer的最新源

    git克隆https://github.com/Bilibili/ijkplayer.git

  • 在新创建的目录中,转到config

  • 打开您喜欢的模块*.sh文件并启用筛选:

    export COMMON\u FF\u CFG\u FLAGS=“$COMMON\u FF\u CFG\u FLAGS--enable avfilter”

    export COMMON\u FF\u CFG\u FLAGS=“$COMMON\u FF\u CFG\u FLAGS——启用过滤器”

  • 现在,转到ijkplayer/ijkmedia并打开config.h。在config.h中删除以下行:


//FIXME:合并与筛选器相关的代码并启用它
//卸下这些线路以启用avfilter
#ifdef CONFIG_AVFILTER
#未定义配置\u AVFILTER
#恩迪夫
#定义配置过滤器0

  • 按照README.md中的描述构建播放器
播放机现在通过以下设置支持逐行扫描:

mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "vf0", "yadif");
这必须在mediaPlayer.start()之前完成


由于逐行扫描是一项耗时的工作,我不得不使用yadif选项,以便在我的设备上很好地运行它。我将它与
“yadif=2”
一起使用。有关yadif的更多详细信息,请参阅官方FFmpeg文档。

我在IJKPlayer源代码中找到了以下文件:./android/contrib/FFmpeg-armv7a/libavfilter/vf_yadif.c./android/contrib/FFmpeg-armv7a/libavfilter/yadif.h我想知道yadif是如何激活的。