我正在开发一个应用程序,用户可以在其中查看存储在SERVER上的所有视频信息和标题。我几乎完成了它,除了无论我如何编码它,我都无法从给定的URL获取视频持续时间。让我们从互联网上的某个地方获取这个演示视频:CLICK HERE FOR VIDEO PATH 我希望应用能够获得视频时长,而无需打开视频本身。
我正在尝试在Android上使用的代码是:
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource("https://12-lvl3-pdl.vimeocdn.com/01/1386/0/6932347/10573836.mp4?expires=1461047937&token=037972137fdfc4c2d9902");
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
long timeInmillisec = Long.parseLong( time );
long duration = timeInmillisec / 1000;
long hours = duration / 3600;
long minutes = (duration - hours * 3600) / 60;
long seconds = duration - (hours * 3600 + minutes * 60);
Toast.makeText(context,Long.toString(timeInmillisec),Toast.LENGTH_SHORT).show();
但我得到的结果是:java.lang.IllegalArgumentException 第2行是“retriever.setDataSource()”。 任何人都可以帮我找到我做错了什么,或者android提供了另一种获取所需信息的方法吗?
答案 0 :(得分:9)
也许您正在寻找FFmpegMediaMetadataRetriever
FFmpegMediaMetadataRetriever 类为输入媒体文件中的检索框架和元数据提供统一的界面。
通过使用 FFmpegMediaMetadataRetriever 的 METADATA_KEY_DURATION 常量,您可以获得视频的持续时间。它会将字符串返回给您,然后您可以将其转换为LONG以获得TIME。
以下是您应该使用的代码:
FFmpegMediaMetadataRetriever mFFmpegMediaMetadataRetriever = new MediaMetadataRetriever();
mFFmpegMediaMetadataRetriever .setDataSource("Your video url");
String mVideoDuration = mFFmpegMediaMetadataRetriever .extractMetadata(FFmpegMediaMetadataRetriever .METADATA_KEY_DURATION);
long mTimeInMilliseconds= Long.parseLong(mVideoDuration);
如果仍然无效,请使用
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
if (Build.VERSION.SDK_INT >= 14)
retriever.setDataSource("Your video url", new HashMap<String, String>());
else
retriever.setDataSource("Your video url");
来自您的代码。
希望它会对你有所帮助。祝你好运。
答案 1 :(得分:4)
这对我有用,
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource("YourVideofileUrl", new HashMap<String, String>());
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
long timeInMillisec = Long.parseLong(time);
retriever.release();
String duration=convertMillieToHMmSs(timeInMillisec); //use this duration
和
public static String convertMillieToHMmSs(long millie) {
long seconds = (millie / 1000);
long second = seconds % 60;
long minute = (seconds / 60) % 60;
long hour = (seconds / (60 * 60)) % 24;
String result = "";
if (hour > 0) {
return String.format("%02d:%02d:%02d", hour, minute, second);
}
else {
return String.format("%02d:%02d" , minute, second);
}
}