java - Android MediaMetadataRetriever OPTION_CLOSET 不适用于某些视频

标签 java android video mediametadataretriever

我刚刚开始 android 开发。

我一直在尝试从我手机上的视频文件中提取帧,如下所示:

MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(getApplicationContext(),linkToVideo); // linkToVideo is Uri
ImageView frameView = (ImageView) findViewById(R.id.video_frame);
frameView.setImageBitmap(retriever.getFrameAtTime(frameTime,MediaMetadataRetriever.OPTION_CLOSEST)); // frameTime in microseconds

这适用于 640x480 .mp4 视频,但不适用于我的相机录制的 1280x720 .3gp 文件。它只需要很长时间,最终应用程序停止响应。当我使用 OPTION_CLOSEST_SYNC 时,一切运行顺利,但我感兴趣的不仅仅是同步帧。

关于如何解决这个问题的任何想法?我试图避免视频编码,但如果没有其他选择,我会求助于它。

在此先感谢您抽出时间来帮助我。

最佳答案

尝试 FFmpegMediaMetadataRetriever :

import wseemann.media.FFmpegMediaMetadataRetriever;

...

FFmpegMediaMetadataRetriever retriever = new FFmpegMediaMetadataRetriever();
retriever.setDataSource(getApplicationContext(),linkToVideo); // linkToVideo is  Uri
ImageView frameView = (ImageView) findViewById(R.id.video_frame);
frameView.setImageBitmap(retriever.getFrameAtTime(frameTime,MediaMetadataRetriever.OPTION_CLOSEST)); // frameTime in microseconds

关于java - Android MediaMetadataRetriever OPTION_CLOSET 不适用于某些视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26429442/

相关文章:

java - Spring Security - 显示特定于登录用户的内容

android - AppBarLayout 与 ConstraintLayout 重叠

java - 更改批处理文件的内容

java - 新的 SimpleDateFormat ("Pattern")与 applyPattern ("Pattern")差异和性能优势(如果有)?

android - 导入示例 Libgdx 游戏

android - 如何在 Android Studio 中复制一行代码?

android - 如何在android代码中包含FFMPEG函数

Android - 如何使用 OkHTTP 分块上传视频?

video - jQuery 绑定(bind) : run function before media ends

java - 从命令行运行 Eclipse 项目