java获取视频时长
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
很多朋友都想知道java怎么获取视频时长?下面就一起来了解一下吧~
可以通过视频的url地址或者是上传视频 文件有类型为(MultipartFile)的来获取视频的时长。
通过MultipartFile 的文件类型获取视频时长:
这个方式的获取比较好办;直接上码:类名=》VideoUtil.java
/** * 通过MultipartFile 的文件类型获取视频时长 * @param file * @return */ public Integer ReadVideoTimeMs(MultipartFile file) { Encoder encoder = new Encoder(); long ms = 0; try { // 获取文件类型 String fileName = file.getContentType(); // 获取文件后缀 String pref = fileName.indexOf("/") != -1 ? fileName.substring(fileName.lastIndexOf("/") + 1, fileName.length()) : null; String prefix = "." + pref; // 用uuid作为文件名,防止生成的临时文件重复 final File excelFile = File.createTempFile(UUID.randomUUID().toString().replace("-", ""), prefix); // MultipartFile to File file.transferTo(excelFile); MultimediaInfo m = encoder.getInfo(excelFile); ms = m.getDuration(); //程序结束时,删除临时文件 VideoUtil.deleteFile(excelFile); } catch (Exception e) { e.printStackTrace(); } int ss = 1000; int mi = ss * 60; int hh = mi * 60; int dd = hh * 24; long day = ms / dd; long hour = (ms - day * dd) / hh; long minute = (ms - day * dd - hour * hh) / mi; long second = (ms - day * dd - hour * hh - minute * mi) / ss; Integer timeMS = Math.toIntExact(hour * 3600 + minute * 60 + second); return timeMS; } /** * 通过url地址获取视频时长 * @param fileName * @return */ public Integer FileVideoTimeMs(String fileName){ Encoder encoder = new Encoder(); long ms = 0; try { File file = getFileByUrl(fileName); MultimediaInfo m = encoder.getInfo(file); ms = m.getDuration(); VideoUtil.deleteFile(file); }catch (Exception e){ e.printStackTrace(); } int ss = 1000; int mi = ss * 60; int hh = mi * 60; int dd = hh * 24; long day = ms / dd; long hour = (ms - day * dd) / hh; long minute = (ms - day * dd - hour * hh) / mi; long second = (ms - day * dd - hour * hh - minute * mi) / ss; Integer timeMS = Math.toIntExact(hour * 3600 + minute * 60 + second); return timeMS; }
通过url地址获取视频时长
url地址来获取的时长需要做一定的转换,要先获取文件
主要的方法代码:类名 =》VideoUtil.java
/** * 通过url地址获取视频时长 * @param fileName * @return */ public Integer FileVideoTimeMs(String fileName){ Encoder encoder = new Encoder(); long ms = 0; try { File file = getFileByUrl(fileName); MultimediaInfo m = encoder.getInfo(file); ms = m.getDuration(); VideoUtil.deleteFile(file); }catch (Exception e){ e.printStackTrace(); } int ss = 1000; int mi = ss * 60; int hh = mi * 60; int dd = hh * 24; long day = ms / dd; long hour = (ms - day * dd) / hh; long minute = (ms - day * dd - hour * hh) / mi; long second = (ms - day * dd - hour * hh - minute * mi) / ss; Integer timeMS = Math.toIntExact(hour * 3600 + minute * 60 + second); return timeMS; }
getFileByUrl()方法 :类名 =》VideoUtil.java
public static File getFileByUrl(String url) throws IOException { File tmpFile = File.createTempFile("temp", ".tmp");//创建临时文件 VideoUrl.toBDFile(url, tmpFile.getCanonicalPath()); return tmpFile; }
toBDFile() 方法:类名 =》VideoUrl.java
public static void toBDFile(String urlStr, String bdUrl) throws IOException, UnknownHostException { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); DataInputStream in = new DataInputStream(conn.getInputStream()); byte[] data = toByteArray(in); in.close(); FileOutputStream out = new FileOutputStream(bdUrl); out.write(data); out.close(); }toByteArray()方法:类名 =》VideoUrl.javapublic static byte[] toByteArray(InputStream in) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buffer = new byte[1024 * 4]; int n = 0; while ((n = in.read(buffer)) != -1) { out.write(buffer, 0, n); } return out.toByteArray(); }
不要忘记删除自己生成的临时文件:类名 =》VideoUtil.java
/** * 删除临时文件 * @param files */ private static void deleteFile(File... files) { for (File file : files) { if (file.exists()) { file.delete(); } } }
总结
两个方法的获取视频的时长,最后读取的数据单位都是s(秒)。
-
学习机什么牌子好
1、步步高学习机;“步步高点读机!哪里不会点哪里!”。这句广告可以说是现象级的了。步步高不只是口号喊的响亮,作为老牌大厂,步步高的学习机确实很优异。步步高学习机是寓教于乐的教学方式。通过兴趣,来进行教育。学习知识,获得金币。金币可以饲养学习机中的电子宠物...
-
微博怎么显示手机型号,微博如何显示手机型号
微博怎么显示手机型号:1、首先需要点击手机桌面中的微博。2、然后再点击屏幕右下方的我的。3、然后再点击屏幕上方的设置图标。4、然后再点击会员专属设置。5、然后再点击微博来源。6、最后选择想要显示的手机型号就可以了。...
-
微博如何移动好友分组
1、进入个人微博,点击主页里的“关注”。或者从首页里边的“关注”进入也是可以的。2、进入关注列表后自动显示为查看其他分组,这个时候你可以看到“批量管理”和“排序”两个选项,你可以进行初步排序管理。3、单击“查看其他分组”,里面有你微博里所有的分组,我们...
-
微博怎么取消超话关注
1、打开微博,依次点击发现、超话、超话排行,然后进入超话社区。2、点击右下角“我的”,进入到个人中心,再点击关注界面。3、选择想要取消关注的超话,接着点击进入。4、点击左下角的已关注,再点击确定,即可取消超话的关注。...