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

SDK 33下Android视频复制到内部存储方法及无音频问题解决

问题解答

可行性确认

完全可行。你可以将用户选中的视频复制到应用的内部存储目录,修改后保存在那里——内部存储默认是应用私有空间,非root用户无法直接访问,完全符合你不想让用户接触修改后视频的需求。

当前复制代码的音频丢失问题修复

你的复制逻辑存在关键bug,导致文件可能未完全复制,进而丢失音频轨道:
在复制循环中,你使用了while ((length = fileInputStream.read(buffer2)) > 0),但InputStream.read()返回0是合法状态(表示当前无字节可读但流未关闭),这会导致循环提前终止,文件复制不完整。

修正后的循环条件应检查返回值不等于-1:

while ((length = fileInputStream.read(buffer2)) != -1) {
    outputStreamInternal.write(buffer2, 0, length);
}

同时建议补充完整的异常堆栈日志,方便后续排查问题:

catch (Exception e) {
    Log.e("file_log", "复制文件失败", e);
}

安全存储选项推荐

  • 持久化存储:优先使用getFilesDir(),属于应用私有目录,文件不会被系统自动删除,仅在应用卸载时清除;或getExternalFilesDir(null),外部存储中的应用私有目录,无需额外存储权限,适合大文件存储,同样只有你的应用能访问。
  • 临时存储:若修改后的视频无需长期保存,可使用getCacheDir(),应用私有缓存目录,系统可能在空间不足时自动清理。

完整修正后的复制代码

public static boolean copyFileToInternalStorage(Context context, Uri uriSrc, String destPath) {
    InputStream fileInputStream = null;
    FileOutputStream outputStreamInternal = null;
    try {
        fileInputStream = context.getContentResolver().openInputStream(uriSrc);
        File destFile = new File(destPath);
        // 确保目标父目录存在
        destFile.getParentFile().mkdirs();
        outputStreamInternal = new FileOutputStream(destFile);
        
        byte[] buffer = new byte[8192]; // 增大缓冲区提升复制效率
        int length;
        while ((length = fileInputStream.read(buffer)) != -1) {
            outputStreamInternal.write(buffer, 0, length);
        }
        // 验证文件是否有效复制
        return destFile.exists() && destFile.length() > 0;
    } catch (Exception e) {
        Log.e("file_log", "复制文件失败", e);
        return false;
    } finally {
        // 确保流资源被正确关闭
        try {
            if (fileInputStream != null) fileInputStream.close();
            if (outputStreamInternal != null) outputStreamInternal.close();
        } catch (IOException e) {
            Log.e("file_log", "关闭流失败", e);
        }
    }
}

后续视频修改说明

文件复制完成后,你可以使用FFmpeg、MediaCodec API等视频处理工具对内部存储中的视频进行修改,修改后的文件仍保存在上述私有目录中,用户无法直接访问。

内容的提问来源于stack exchange,提问作者Maor Cohen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:02:44