如何解决计算视频时长需要太多时间
从我的数组列表中尝试仅在显示名称时没有显示name,and duration
中的视频文件Recycler view
,但是没有延迟,但是当我尝试显示name,duration
时会花费一些时间。 / p>
延迟只有15到20个文件。
那我如何更快地计算视频文件的持续时间。
这是我的工作。
String folderName = bundle.getString("folderName");
setTitle(folderName);
for (int i = 0; i < Constant.allMediaList.size(); i++) {
if (folderName.equals(new File(String.valueOf(Constant.allMediaList.get(i))).getParentFile().getName())) {
String fileName = FilenameUtils.getBaseName(Constant.allMediaList.get(i).getAbsolutePath());
String duration = getDuration(Constant.allMediaList.get(i).getAbsolutePath(),context);
String path = Constant.allMediaList.get(i).getAbsolutePath();
videosPath.add(new VideoModel(fileName,duration,path));
}
}
public static String getDuration(String absolutePathThumb,Context context) {
try{
FFmpegMediaMetadataRetriever retriever = new FFmpegMediaMetadataRetriever();
retriever.setDataSource(context,Uri.parse(absolutePathThumb));
String time = retriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION);
long timeInMillisec = Long.parseLong(time);
return convertMillieToHMmSs(timeInMillisec);
}catch(Exception e){
e.printStackTrace();
return null;
}
}
以上是试图获取文件持续时间和名称的原因。我在做什么错了?
而我的ArrayList
只是文件路径,没有任何索引。
解决方法
您可以尝试不为每个文件创建FFmpegMediaMetadataRetriever的新元素,并将其作为函数中的参数传递。在for循环之外创建它:
public static String getDuration(String absolutePathThumb,Context context,FFmpegMediaMetadataRetriever retriever) {
try{
retriever.setDataSource(context,Uri.parse(absolutePathThumb));
String time = retriever.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION);
long timeInMillisec = Long.parseLong(time);
return convertMillieToHMmSs(timeInMillisec);
}catch(Exception e){
e.printStackTrace();
return null;
}
}
我不确定,但认为可以帮忙。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。