import java.io.File; import java.io.IOException; import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.EncoderException; import it.sauronsoftware.jave.InputFormatException; import it.sauronsoftware.jave.MultimediaInfo; /** * 视频文件工具类 */ public class VideoFileUtils { /** * 获取网络文件,暂存为临时文件 * @param url * @return * @throws IOException */ public static File getFileByUrl(String url) throws IOException { File tmpFile = File.createTempFile("temp", ".tmp");//创建临时文件 Image2Binary.toBDFile(url, tmpFile.getCanonicalPath()); return tmpFile; } /** * 获取时长(单位:秒) * * @param url * @return * @throws EncoderException * @throws InputFormatException */ public static long getDuration(File file) throws InputFormatException, EncoderException { MultimediaInfo m = new Encoder().getInfo(file); return m.getDuration() / 1000; } public static void main(String[] args) throws Exception { File file = getFileByUrl("http://gslb.miaopai.com/stream/t~gB32Ha~0TyT3~Uju8bqQ__.mp4"); System.out.println("视频大小:" + file.length() / 1024 / 1024 + "MB"); System.out.println("视频时长:" + getDuration(file) / 1000 + "S"); } }
所需工具类如下:把网络文件转换为本地文件
import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.UnknownHostException; import org.apache.commons.codec.digest.DigestUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Image2Binary { private static Logger log = LoggerFactory.getLogger(Image2Binary.class); public 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(); } /** * 网络文件转换为byte二进制 * @Title: toByteArray * @Description: TODO(这里用一句话描述这个方法的作用) * @param @param url * @param @return * @param @throws IOException 设定文件 * @return byte[] 返回类型 * @throws */ public static byte[] toByteArray(String urlStr) throws IOException { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); DataInputStream in = new DataInputStream(conn.getInputStream()); 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(); } /** * @throws IOException * @throws MalformedURLException * 网络文件转换为本地文件 * @Title: toByteArray * @Description: TODO(这里用一句话描述这个方法的作用) * @param @param url * @param @return * @param @throws IOException 设定文件 * @return byte[] 返回类型 * @throws */ 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(); } /** * 直接获取网络文件的md5值 * @param urlStr * @return */ public static String getMd5ByUrl(String urlStr){ String md5 = null; try { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); DataInputStream in = new DataInputStream(conn.getInputStream()); md5 = DigestUtils.md5Hex(in); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return md5; } /** * 获取网络文件的输入流 * @param urlStr * @return */ public static InputStream getInputStreamByUrl(String urlStr){ DataInputStream in = null; try { URL url = new URL(urlStr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); in = new DataInputStream(conn.getInputStream()); } catch (IOException e) { log.error("url转换输入流失败,错误信息{}",e.getMessage()); } return in; } public static void main(String[] args) { try { toBDFile("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1496324940814&di=1d70e0de447be6547c372718b9b30ff6&imgtype=0&src=http%3A%2F%2Fimage.tianjimedia.com%2FuploadImages%2F2015%2F204%2F22%2FYMG9CAUWUM15.jpg","E://a.jpg"); } catch (IOException e) { e.printStackTrace(); } // String a = getMd5ByUrl("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1496324940814&di=1d70e0de447be6547c372718b9b30ff6&imgtype=0&src=http%3A%2F%2Fimage.tianjimedia.com%2FuploadImages%2F2015%2F204%2F22%2FYMG9CAUWUM15.jpg"); // System.out.println(a); } }
所需jar:jave-1.0.2.jar 下载附件即可
相关推荐
总的来说,获取视频时长需要对Java的文件I/O、网络请求以及多媒体处理有一定的了解。使用合适的库可以简化这个过程,提高效率。在实际应用中,确保处理的健壮性和效率是非常重要的,例如处理网络延迟、错误重试等。
在Java编程语言中,获取文件的基本信息,如分辨率、大小等,是常见的文件操作任务,尤其是在处理多媒体文件,如视频时。本示例Demo提供了两种方法来实现这一目标,使用了两个不同的库:xuggle-xuggler-5.4.jar 和 ...
// 获取视频时长 String time = getScriptVarByName("time", content); ``` 这里使用了一个自定义的`getScriptVarByName`方法来提取JavaScript脚本中的变量值。 ##### 4. 自定义方法解析脚本变量 为了更准确地提取...
### Java 获取视频的相关知识点 #### 一、概述 在当今互联网时代,许多网站为了提高用户体验,都具备了从第三方视频平台(如土豆网)抓取视频数据的功能。这些功能不仅能够帮助用户快速预览视频内容,还能够在一定...
6. 元数据获取:获取媒体文件的元信息,如标题、艺术家、时长等。 7. 错误处理:捕获并处理可能出现的错误,如文件不存在、网络连接问题等。 使用VLC内核的优点包括: - 广泛的格式支持:VLC支持众多音视频格式和...
总的来说,基于Java的WebSocket实现涉及到网络编程、协议解析、多线程以及可能的并发控制等多个方面。理解WebSocket的工作原理和Java API的使用是实现WebSocket服务的关键。在实际开发中,还需要根据具体需求进行...
- **元数据处理**:对于视频文件,可能需要解析或设置元数据,如编码、分辨率、时长等,这可能需要第三方库如JCodec或JavaFX的Media类。 - **进度显示**:在处理大文件时,提供下载进度更新的接口或回调,可以提高...
视频教程“Java基础第21天-05.URL-多线程下载-断点续传-Properties.avi”很可能会详细讲解这些概念,并通过实例演示如何在Java中实现这些功能,帮助学习者更好地理解和掌握Java的网络编程和文件操作。
在IT领域,开发一个“Java 视频播放器”是一个涉及多媒体处理、用户界面设计以及系统集成的重要项目。下面将详细解析这个项目的关键知识点。 首先,我们要了解Java平台的多媒体库。Java Media Framework (JMF) 和 ...
这些API包括了播放、暂停、停止、快进、快退、调整音量等控制,以及获取媒体信息(如播放时长、帧率等)的功能。 2. **多媒体处理**:QuickTime支持多种音频和视频格式,通过这个开发包,开发者可以处理各种格式的...
java的声音处理,介绍java中如何处理声音,包括实现响铃,播放wav,au等音频文件,以及控制声音的大小和音量,Beep.java; 媒体播放器,JMFMediaPlayer.java; 12反射 是java程序开发的特征之一,允许java程序对自身...
为了显示视频进度,你可以使用`playerView.getCurrentPosition()`和`playerView.getDuration()`获取当前播放位置和总时长,然后更新UI。例如,使用`SeekBar`来显示进度: ```java SeekBar seekBar = findViewById(R...
\n\n接下来,我们将重点讲解如何使用SAX解析XML来获取视频的真实地址。以下是一个简化的Java代码示例,展示如何使用SAX解析器来处理这个过程:\n\n```java package hdu.fang.parser; import hdu.fang.model.Video; ...
【饺子播放器】是一款在Android平台上广泛使用的第三方视频播放器,以其强大的功能和灵活的定制性受到开发者们的青睐。本文将深入探讨如何使用Java代码和布局文件来集成和操作饺子播放器。 首先,我们来看看核心类`...
- `getDuration()`和`getCurrentPosition()`分别返回媒体文件的总时长和当前播放位置,可用于进度条的更新。 10. **同步与异步操作**: - `MediaPlayer`的操作通常是异步的,如加载媒体、准备播放等。开发者需要...
例如,YouTube Data API允许开发者通过视频ID来获取视频的详细信息,包括标题、描述、时长、缩略图URL等。 其次,如果视频网站没有提供API或者API限制较多,我们可能需要通过网页抓取(Web Scraping)的方式获取...
Java注解是Java编程语言中的一个重要特性,它们提供了一种元数据的方式,让开发者能够向编译器或运行时环境传递额外的信息。这些信息可以用来验证代码、自动生成代码、配置框架或者在运行时进行一些处理。注解的使用...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 ...
第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个...