为什么新创建的Android Camera2 MP4文件在某些​​播放器上无法播放,而在其他播放器上却无法播放

时间:2019-05-06 15:22:13

标签: android android-camera2 android-file

我遇到一个问题,在使用外部库(link)并编写新的MP4文件时,导致它在多个播放器上无法播放,而在其他播放器上则完全可以播放。

从理论上讲,应该立即在所有这些游戏上播放,但事实并非如此。我正在创建视频文件,如下所示:

        String timeStamp = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss",
                    Locale.getDefault()).format(new Date());
        String imageFileName = "MyApp_" + timeStamp + "";            
        File video;
        File storageDir = getExternalFilesDir(Environment.DIRECTORY_MOVIES);
        try {
            if(this.saveVideoToGallery){
                storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);
                if(!storageDir.exists()){
                    boolean createdFolder = false;
                    try {
                        createdFolder = storageDir.mkdir();
                    } catch (Exception e){
                        e.printStackTrace();
                    }
                    if(!createdFolder){
                        storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
                    }
                }
                video = new File(storageDir, imageFileName + ".mp4");
            } else {
                if(!storageDir.exists()) {
                    try {
                        storageDir.mkdir();
                    } catch (Exception e) {}
                }
                video = File.createTempFile(
                        imageFileName,  /* prefix */
                        ".mp4",         /* suffix */
                        storageDir      /* directory */
                );
            }
        } catch (IOException ioe){
            ioe.printStackTrace();
            video = new File(storageDir + imageFileName + ".mp4");
        }

请注意,布尔值

saveVideoToGallery

只是一个可配置的全局变量,它允许写入外部目录。

1 个答案:

答案 0 :(得分:1)

事实证明,问题与命名架构/文件名逻辑有关。我本来就是这样写我的名字的:

String timeStamp = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss",
                        Locale.getDefault()).format(new Date());

但是当我删除冒号(':')并改用下划线(“ _”)时,

String timeStamp = new SimpleDateFormat("yyyy-MM-dd-HH_mm_ss",
                        Locale.getDefault()).format(new Date());

它解决了该问题。