通过url 在浏览器直接播放mp4文件,发现不能拖动进度条,而且播放结束以后,再次播放需要从新去下载视频文件。
这个是视频链接
http://8.133.182.37:8232/file/16077
通过nginx 代理的链接
https://imgbed.link/file/16077
则是直接下载。如何解决呢
Date uploadTime = imgbedFile.getUploadTime();
response.setDateHeader("Last-Modified", uploadTime==null?new Date().getTime():uploadTime.getTime());
response.setDateHeader("Expires", instance.getTimeInMillis());
response.setHeader("Cache-Control", "public");
response.setHeader("Pragma", "Pragma");
response.setContentLengthLong(imgbedFile.getSize());
if ("mp4".equals(imgbedFile.getFileType())) {
response.setContentType("video/mp4");
}
copyStream(response, imgbedFile);
以下答案引用自GPT-3大模型,请合理使用:这也是需要在nginx上面配置mime和type的。
该回答引用chatGPT
你可以使用Java的MediaPlayer类来播放视频,它可以支持拖动进度条,并且可以在播放结束后自动重新播放。你可以参考以下代码示例:
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(url);
mediaPlayer.prepare();
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.start();
}
});
原则上来说这个与java的关系不大,java端即时按照楼上说的放下来处理其实也是也解决不了的,要想实现边看边下载,这个需要流媒体服务器来解决的。当然如果你是mp4格式,这个就更简单了,使用HTML5 播放标签直接加载mp4文件地址路径即可,就当mp4视频文件如图片文件一样的思路即可
这个挺简单的,就是实现 mp4 视频二进制流下载。
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.HttpURLConnection;
public class VideoDownloader {
public static void main(String[] args) throws Exception {
URL url = new URL("https://example.com/video.mp4");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.connect();
InputStream is = conn.getInputStream();
FileOutputStream fos = new FileOutputStream("video.mp4");
byte[] buffer = new byte[4096];
int length;
while ((length = is.read(buffer)) != -1) {
fos.write(buffer, 0, length);
}
fos.close();
is.close();
}
}