android - 使用 IJKPlayer 播放时去隔行视频

标签 android 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。然而,当与选项 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。

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

    导出 COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-avfilter"

    导出 COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-filters"

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

//FIXME:合并过滤器相关代码并启用它 //删除这些行以启用 avfilter #ifdef CONFIG_AVFILTER #undef CONFIG_AVFILTER #万一 #define CONFIG_AVFILTER 0

  • 按照 README.md 中的说明构建播放器。

播放器现在通过设置支持去隔行:

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

这必须在 mediaPlayer.start() 之前完成。

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

关于android - 使用 IJKPlayer 播放时去隔行视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44653926/

相关文章:

Android lib ijkplayer 加载 https url

android - 以编程方式延迟添加 View

javascript - 在Android WebView中注入(inject)外部JS文件并调用

android - MonoDroid : About Bitmap. Recycle() 和 Bitmap.Dispose()

ios - 创建存档时出错

Android 11 IjkMediaPlayer 和 GiraffePlayer2 问题

java - Android 布局崩溃

android - BroadcastReceiver 在重启后延迟接收事件

Android token - 清除应用程序缓存中的数据丢失

iOS多视频显示