gpt4 book ai didi

android - 如何将使用 MediaRecorder 录制的视频长度读取到通过 context.getFilesDir() 构建的私有(private)应用程序存储目录中?

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:52:37 25 4
gpt4 key购买 nike

我在读取使用 MediaRecorder 使用设备相机录制的视频文件的长度/持续时间时遇到了一个奇怪的问题。该文件被记录到应用程序的私有(private)存储目录​​中,该目录是这样设置的:

mMediaRecorder.setOutputFile(context.getFilesDir() + "/recordings/webcam.3gpp");

录制完成后,我尝试用这些方法读取视频的长度:

方法一:

MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(context.getFilesDir() + "/recordings/webcam.3gpp");
String time = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
return Long.parseLong(time);

方法二:

MediaPlayer mp = MediaPlayer.create(context, Uri.parse(context.getFilesDir() + "/recordings/webcam.3gpp"));
long duration = mp.getDuration();
mp.release();
return duration;

这些方法都行不通。 mediaMetadataRetriever.extractMetadata 返回 null,MediaPlayer.create 失败并出现 IOException。我已验证该文件存在。

重要说明:如果我将录音保存到“/sdcard/recordings/webcam.3gpp”,则不会发生此问题。出于某种原因,当文件位于属于应用程序的私有(private)文件目录中时,我无法读取持续时间。此外,此问题仅发生在我运行 Android 2.3 的 Samsung Droid Charge 上。它不会发生在运行 Android 4.2 的三星 Galaxy S4 和运行 Android 4.3 的华硕 Nexus 7 上。

编辑:

如果我将同一个文件复制到 SD 卡,然后读取它的长度,一切正常。给了什么?

copy(new File(context.getFilesDir() + "/recordings/webcam.3gpp"), new File("/sdcard/wtfisthiscrap.3gpp"));
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource("/sdcard/wtfisthiscrap.3gpp");
String time = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
return Long.parseLong(time); // works!

我该怎么做才能解决这个问题?

最佳答案

我能够通过将 FileInputStream 设置为 MediaPlayer 的数据源来解决我的问题。

MediaPlayer mp = new MediaPlayer();
FileInputStream stream = new FileInputStream(context.getFilesDir() + "/recordings/webcam.3gpp");
mp.setDataSource(stream.getFD());
stream.close();
mp.prepare();
long duration = mp.getDuration();
mp.release();
return duration;

我的回答来源来自https://stackoverflow.com/a/6383655/379245

关于android - 如何将使用 MediaRecorder 录制的视频长度读取到通过 context.getFilesDir() 构建的私有(private)应用程序存储目录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19689553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com