java在线播放视频

img

通过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视频文件如图片文件一样的思路即可

img

这个挺简单的,就是实现 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();
  }
}