使用 IJKPlayer 播放时去隔行视频
deinterlace video when playing with IJKPlayer
在搜索 google 关于使用 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。但是,IJKPlayer 在与选项 vf0/yadif.
一起使用时仍然不会去隔行扫描
我也为 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 clone https://github.com/Bilibili/ijkplayer.git
在新建的目录中,进入config.
打开你喜欢的module*.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 文档。
在搜索 google 关于使用 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。但是,IJKPlayer 在与选项 vf0/yadif.
一起使用时仍然不会去隔行扫描我也为 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 clone https://github.com/Bilibili/ijkplayer.git
在新建的目录中,进入config.
打开你喜欢的module*.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 文档。