使用IJKPlayer进行去隔行视频

时间:2017-06-20 13:06:42

标签: android video options ijkplayer

在使用IJKPlayer搜索谷歌关于去隔行播放时,确实有四个条目。最好的似乎是this。但是,通过添加

提到的解决方案
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

1 个答案:

答案 0 :(得分:1)

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

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

  • 使用

    从GIT获取IJKPlayer的lates源

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

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

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

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

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

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

// 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

  • 按照README.md。
  • 中的描述构建播放器

播放器现在通过设置:

支持逐行扫描
mediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "vf0", "yadif");

这必须在mediaPlayer.start()。

之前完成

由于去隔行是一项耗时的工作,我不得不使用yadif选项,让它在我的设备上运行,很好。我将其与"yadif=2"一起使用。有关yadif的详细信息,请参阅官方FFmpeg文档。