繁体   English   中英

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

[英]Why does a newly created Android Camera2 MP4 File fail to play on some players, but not others

我遇到一个问题,即在使用外部库( 链接 )并编写新的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

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

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

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());

它解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM