Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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 MP4视频最后一帧_Android_Mediametadataretriever - Fatal编程技术网

Android MP4视频最后一帧

Android MP4视频最后一帧,android,mediametadataretriever,Android,Mediametadataretriever,我尝试使用MediaMetadataRetriever获取mp4视频的最后一帧,但对于短视频(如3s长视频),它总是返回第一帧,对于长视频,它工作正常。FFmpegMediaMetadataRetriever也给出了相同的结果 MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(video); String time = retriev

我尝试使用MediaMetadataRetriever获取mp4视频的最后一帧,但对于短视频(如3s长视频),它总是返回第一帧,对于长视频,它工作正常。FFmpegMediaMetadataRetriever也给出了相同的结果

      MediaMetadataRetriever retriever = new MediaMetadataRetriever();
      retriever.setDataSource(video);
      String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
      Bitmap frameAtTime = retriever.getFrameAtTime(Long.parseLong(time)*1000, MediaMetadataRetriever.OPTION_CLOSEST);
      mImage.setImageBitmap(frameAtTime);

如果您有任何建议,我们将不胜感激。

根据getFrameAtTime函数的描述,如果无法满足约束,它将返回0。您能否尝试使用
int frame=retriever.extractMetadata(MediaMetadataRetriever.METADATA\u KEY\u VIDEO\u frame\u COUNT)
检索视频的最后一帧,然后使用
retriever.getFrameAtIndex(frame-1)
获取帧?还应始终检查extractMetadata是否未返回null。getFrameAtIndex:调用需要API级别28(当前最小值为21)。我知道getFrameAtTime需要微秒,而不是毫秒,这就是为什么我需要1000倍。我错了,我读到转换为ms。你能验证元数据返回的视频长度是否正确吗,但是这是获得持续时间的另一种方法A时间很好,正如我所说的,它对长视频工作正常短视频的问题尝试了所有这些..根据getFrameAtTime函数的描述,如果不能满足约束,它将返回0。您能否尝试使用
int frame=retriever.extractMetadata(MediaMetadataRetriever.METADATA\u KEY\u VIDEO\u frame\u COUNT)
检索视频的最后一帧,然后使用
retriever.getFrameAtIndex(frame-1)
获取帧?还应始终检查extractMetadata是否未返回null。getFrameAtIndex:调用需要API级别28(当前最小值为21)。我知道getFrameAtTime需要微秒,而不是毫秒,这就是为什么我需要1000倍。我错了,我读到转换为ms。你能验证元数据返回的视频长度是否正确吗,但是这是获得持续时间的另一种方法。时间很好,正如我所说的,长视频效果很好。短视频的问题尝试了所有的方法。。