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、長截圖辦法一iOS13上新之後自帶的長截圖方法,是在我們瀏覽網頁的時候使用的。操作方法:上音量鍵+開關鍵一起按下,然後點開截好的圖片,選擇“整頁”截圖即可。2、長截圖方法二利用QQ實現長截圖。操作方法:首先就是需要我們打開QQ,然後試着上音量鍵+開關鍵一起按下...
-
省內移動數據流量是指什麼
省內移動數據流量是指你的SIM卡所屬省份的可用GPRS流量,如果出了你的卡所屬的省份,去別的省,那省內移動數據流量就不可以使用,只能使用全國通用流量。移動數據流量有省內流量和全國通用流量,國內流量和省內流量是有所區別的。首先優先度不同:正常情況下,如果用户在自...
-
關於底噪的意思介紹
1、底噪亦稱背景噪聲,基本所有的好耳機都有底噪,耳機底噪一般都是因為前端的問題,耳機的靈敏度越高對於底噪就越敏感,一些高靈敏度和低阻抗的耳機會把底噪放大,如果加大音量的情況下,底噪會更加的明顯。2、檢測MP3底噪,一般方法是在夜晚等比較安靜的環境中戴上耳機,播...
-
黑色背景拍照竅門詳解
1、調整拍攝角度,尋找背景:既然是拍攝黑背景,在拍攝前我們儘量選擇深色的背景,這樣也就更加容易達到效果。不過深色不一定要是純黑色,只要顏色較為深沉,偏向暗色調的均可。拍攝前多多觀察,尋找不同的拍攝角度,以找到有反差的深色作為背景。要多嘗試不同的角度,直至主體...