You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用NIO下载视频文件损坏问题排查求助

问题根源与解决方案

你的代码核心问题是下载的不是视频文件本身,而是视频嵌入页面的HTML代码。你用的https://www.dailymotion.com/embed/video/x82n558是Dailymotion的视频嵌入页面URL,浏览器访问这个链接会返回包含播放器的HTML页面,而非视频的二进制数据流,所以保存的文件本质是网页内容,自然无法播放。

解决步骤

1. 获取真实视频资源URL

视频网站的真实媒体文件地址不会直接暴露在嵌入页面URL中,通常会通过页面内的JavaScript、API接口或meta数据加载。以你提供的Dailymotion视频为例:

  • 打开嵌入页面,查看页面源代码,搜索包含视频流的关键词(比如video、src、manifest)
  • 或者通过浏览器开发者工具的「网络」面板,筛选媒体类型(Media),找到真实的视频请求地址(通常是.mp4或分片流媒体地址)

2. 修正下载代码

使用真实视频URL替换原嵌入页面URL,同时注意以下细节:

  • 用try-with-resources自动关闭通道和流,避免资源泄漏导致文件不完整
  • 添加浏览器请求头(比如User-Agent),部分网站会拦截非浏览器发起的请求
  • 处理HTTP重定向(URL.openStream()默认会处理,但复杂场景建议用HttpClient)

修正后的代码示例

import java.io.FileOutputStream;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.FileChannel;
import java.net.HttpURLConnection;

public class VideoDownloader {
    public void downloadVideo() throws Exception {
        // 替换为真实的视频资源URL(需自行从页面解析获取)
        String videoUrl = "真实视频资源的URL";
        
        URL url = new URL(videoUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        // 添加浏览器请求头,模拟正常访问
        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36");
        
        try (ReadableByteChannel readChannel = Channels.newChannel(conn.getInputStream());
             FileOutputStream fileOS = new FileOutputStream("C:\\Users\\Tecman\\Desktop\\Knowladge\\video.mp4");
             FileChannel writeChannel = fileOS.getChannel()) {
            
            // 循环传输数据,确保完整写入
            long transferred = 0;
            long fileSize = conn.getContentLengthLong();
            while (transferred < fileSize) {
                transferred += writeChannel.transferFrom(readChannel, transferred, fileSize - transferred);
            }
        }
    }
}

3. 通用视频下载的注意事项

  • 不同网站的解析逻辑不同:比如YouTube、Dailymotion、B站的视频地址获取方式差异很大,需要针对目标网站编写页面解析逻辑(可使用Jsoup等HTML解析库)
  • 处理流媒体分片:部分网站采用HLS/DASH流媒体协议,需要下载分片后合并,或使用专门的流媒体处理库
  • 遵守网站规则:下载视频前需确认目标网站的服务条款,避免侵权行为

内容的提问来源于stack exchange,提问作者Anjula Samarasinghe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:15:29