在内部存储上播放文件时 MediaPlayer 错误-2147483648

2024-02-22

我正在使用android.com 上的音频捕获示例 http://developer.android.com/guide/topics/media/index.html在实际设备上录制和播放音频。 (摩托罗拉触摸板和三星 Galaxy S)。

当我将音频文件路径定义为

mFile = Environment.getExternalStorageDirectory().getAbsolutePath();

录制和播放作品。

但是如果我将音频文件设置为

mFile = getFilesDir().getAbsolutePath();

OR https://stackoverflow.com/questions/5017292/android-create-file-on-internal-storage/5018107#5018107

mFile = getDir("media", Context.MODE_PRIVATE).getAbsolutePath();

OR

mFile = getDir("media", Context.MODE_WORLD_READABLE).getAbsolutePath();

录音似乎可以工作,但播放失败

错误/MediaPlayer(4559):错误(1,-2147483648)

什么函数会返回正确的内部存储器保存播放音频文件的目录仅在我的应用程序内?

有问题的代码在我的onCreate功能。 (在示例中,他们将其放在构造函数中,但我将其移至 onCreate,因为否则 getFilesDir() 和 getDir() 没有上下文可以工作。)

public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

//  mFile = Environment.getExternalStorageDirectory().getAbsolutePath();     // OK
//  mFile = getFilesDir().getAbsolutePath();                                 // BAD
//  mFile = getDir("media", Context.MODE_PRIVATE).getAbsolutePath();         // BAD
    mFile = getDir("media", Context.MODE_WORLD_READABLE).getAbsolutePath();  // BAD
    mFile += "/audiorecordtest.3gp";
    Log.e(LOG_TAG,mFile);
//  ...
}

当我录制到外部存储(并且播放正常)时,日志如下所示:

06-17 10:07:30.890: DEBUG/AudioHardwareTegra(85): getInputBufferSize: returns 320 for rate 8000
06-17 10:07:30.900: INFO/MPEG4Writer(85): limits: 2147483647/0 bytes/us, bit rate: 12200 bps and the estimated moov size 3072 bytes
06-17 10:07:30.960: DEBUG/AudioHardwareTegra(85): setDriver_l: Analog mic? yes. Bluetooth? no.
06-17 10:07:31.100: WARN/AudioFlinger(85): RecordThread: buffer overflow
06-17 10:07:31.100: INFO/MPEG4Writer(85): setStartTimestampUs: 86380
06-17 10:07:31.100: INFO/MPEG4Writer(85): Earliest track starting time: 86380
06-17 10:07:34.350: DEBUG/MPEG4Writer(85): Stopping Audio track
06-17 10:07:34.450: INFO/MPEG4Writer(85): Received total/0-length (167/0) buffers and encoded 167 frames. - audio
06-17 10:07:34.450: INFO/MPEG4Writer(85): Audio track drift time: -20309 us
06-17 10:07:34.450: DEBUG/MPEG4Writer(85): Stopping Audio track source
06-17 10:07:34.470: DEBUG/MPEG4Writer(85): Audio track stopped
06-17 10:07:34.470: DEBUG/MPEG4Writer(85): Stopping writer thread
06-17 10:07:34.470: DEBUG/MPEG4Writer(85): 0 chunks are written in the last batch
06-17 10:07:34.470: DEBUG/MPEG4Writer(85): Writer thread stopped
06-17 10:07:34.470: DEBUG/MPEG4Writer(85): Stopping Audio track
06-17 10:07:34.470: WARN/MediaRecorder(4472): mediarecorder went away with unhandled events
06-17 10:07:40.310: INFO/StagefrightPlayer(85): setDataSource('/mnt/sdcard/audiorecordtest.3gp')
06-17 10:07:46.590: DEBUG/AudioHardwareTegra(85): AudioStreamOutTegra::flush()
06-17 10:07:46.670: DEBUG/AudioHardwareTegra(85): AudioStreamOutTegra::flush() returns

当我记录到内部存储(并且失败)时,日志如下所示:

06-17 10:08:28.380: DEBUG/AudioHardwareTegra(85): getInputBufferSize: returns 320 for rate 8000
06-17 10:08:28.380: INFO/MPEG4Writer(85): limits: 2147483647/0 bytes/us, bit rate: 12200 bps and the estimated moov size 3072 bytes
06-17 10:08:28.440: DEBUG/AudioHardwareTegra(85): setDriver_l: Analog mic? yes. Bluetooth? no.
06-17 10:08:28.970: WARN/AudioFlinger(85): RecordThread: buffer overflow
06-17 10:08:28.970: INFO/MPEG4Writer(85): setStartTimestampUs: 83095
06-17 10:08:28.970: INFO/MPEG4Writer(85): Earliest track starting time: 83095
06-17 10:08:34.020: DEBUG/MPEG4Writer(85): Stopping Audio track
06-17 10:08:34.080: WARN/AudioFlinger(85): RecordThread: buffer overflow
06-17 10:08:34.090: INFO/MPEG4Writer(85): Received total/0-length (257/0) buffers and encoded 257 frames. - audio
06-17 10:08:34.090: INFO/MPEG4Writer(85): Audio track drift time: -385311 us
06-17 10:08:34.090: DEBUG/MPEG4Writer(85): Stopping Audio track source
06-17 10:08:34.090: DEBUG/MPEG4Writer(85): Audio track stopped
06-17 10:08:34.090: DEBUG/MPEG4Writer(85): Stopping writer thread
06-17 10:08:34.090: DEBUG/MPEG4Writer(85): 0 chunks are written in the last batch
06-17 10:08:34.090: DEBUG/MPEG4Writer(85): Writer thread stopped
06-17 10:08:34.090: DEBUG/MPEG4Writer(85): Stopping Audio track
06-17 10:08:34.100: WARN/MediaRecorder(4559): mediarecorder went away with unhandled events
06-17 10:08:40.740: INFO/StagefrightPlayer(85): setDataSource('/data/data/my.record.test/files/audiorecordtest.3gp')
06-17 10:08:40.740: ERROR/MediaPlayer(4559): error (1, -2147483648)
06-17 10:08:40.740: ERROR/AudioRecordTest(4559): prepare() failed

日志的录音部分对我来说基本上是相同的,所以我认为它是录音,但我不知道除了播放之外如何以任何方式检查文件。 ;-)

当我使用 getDir() 时,错误日志类似。


感谢 gtkandroid https://stackoverflow.com/questions/3038474/can-a-videoview-play-a-video-stored-on-internal-storage/5475436#5475436:

代替mPlayer.setDataSource(mFile);我这样做了:

FileInputStream fileInputStream = new FileInputStream(mFile);
mPlayer.setDataSource(fileInputStream.getFD());         
fileInputStream.close();
mPlayer.prepare();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在内部存储上播放文件时 MediaPlayer 错误-2147483648 的相关文章

随机推荐

  • 获取当前语言 next-i18next

    我将 NextJS 与 next i18next 一起使用 这是我的主页 import withTranslation from config next i18next const Home function Home return div
  • 尝试在 google chrome 中使用 HTML5 文件 api 时出现 FileError

    我试图使用 chrome 中的文件系统 API 创建一个文件 最初我尝试了如下持久存储 window requestFileSystem window requestFileSystem window webkitRequestFileSy
  • 使用 distplot 绘制直方图时 y 轴的单位是什么?

    使用 distplot 绘制直方图时 y 轴的单位是什么 我用正常拟合绘制了不同的直方图 我发现在一种情况下 它的范围是 0 到 0 9 而在另一种情况下 它的范围是 0 到 4 5 From help sns distplot norm
  • 为什么函数调用称为“函数调用”?

    我知道什么是函数调用 我知道它的作用 我已经调试了很多了 我有some凭直觉理解为什么使用术语 函数调用 是有意义的 但归根结底 我无法像使用 函数调用 那样正确解释这一点return陈述 例如 用return陈述答案是 叫做 回归 因为你
  • 如何通过“合并前需要拉取请求审查”来保护分支

    我已将其发布在 github community 上 但尚未得出任何解决方案 我试图保护主分支免受单人直接推送的影响 每个更改都必须通过 功能 分支进行 然后通过拉取请求得到另一个 或特定 开发人员的批准 在存储库的设置中 此功能似乎可以执
  • tf.data.Iterator.get_next():如何在tf.while_loop中前进?

    目前 我尝试在 Tensorflow while 循环中实现所有训练 但我在使用 Tensorflow 数据集 API 的迭代器时遇到了问题 通常 当调用 sess run 时 Iterator get next 前进到下一个元素 但是 我
  • 使用 Dozer 的自定义转换器将对象列表映射到另一个列表

    我想做的是使用 Dozer 将实体列表映射到它们的字符串 ID 列表 或多或少 显然 它意味着自定义转换器 我的第一个想法是创建一个从 MyEntity 到 String 的转换器 然后对 Dozer 说 使用此转换器映射此集合的每个对象
  • 获取 foreach 中先前的数组值

    我的数组 arr array jan feb mar apr mei jun jul agu sep okt nov des 然后我做了一个 foreach foreach arr as ar echo ar 这会将 jan 输出到 des
  • Oracle 中的并发更新:锁定与否?

    我很困惑 我正在阅读有关 Oracle 中的 MVCC 的内容 我以为MVCC意味着没有锁 但是 我在其他地方读到这一切UPDATE无论隔离级别如何 都会执行自动锁定 有人可以解释一下 Oracle 更新期间会发生什么吗 当多个已提交读事务
  • Mfc CComboBoxEx - 如何更改背景颜色

    我有一个派生自 CComboBoxEx 的类 我正在尝试更改背景颜色 我认为它会像 ComboBox 一样工作 使用 SetBkColor 函数 但它不会改变背景颜色 这是我尝试过的 BEGIN MESSAGE MAP CMyComboBo
  • svn:转储格式文档?

    svnadmin dump 格式是否记录在某处 我想记录一个包含 svn 存储库所有元数据的数据结构 除了文件内容本身之外 它基本上与 转储 文件中的内容相同 似乎 svnkit 库会有它 或者有办法以编程方式获取此元数据 但我在过去的一个
  • 单击引导按钮显示默认颜色

    我正在尝试使用下面的代码设置按钮颜色的样式 颜色在我单击按钮之前一直有效 按钮显示默认颜色 如何指定按钮 onclick 的颜色 btn success color ffffff background color 161617 border
  • 当目标是对象时,JSON.net 将 json 数组序列化为 JArray。我怎样才能改变这一点?

    我有一个单级 json 我想将其反序列化为Dictionary
  • C++ - 类函数内数组的长度[重复]

    这个问题在这里已经有答案了 我知道有几个线程问类似的问题 但我找不到解决方案 而且我对 C 有点陌生 我想计算 DWORD 数组的长度 所以它只是一个无符号长整型 DWORD offsets 0x378 0x14 0x0 这是我的函数的标头
  • 获取 SDWebImage 缓存图像

    我想问一下SDWebImageManager下载后如何获取下载的图像 我只有通过 URL 下载它的代码 这就是我得到的 let manager SDWebImageManager SDWebImageManager sharedManage
  • 如果浏览器选项卡处于非活动状态,则 SignalR 连接超时

    如果我保持浏览器选项卡处于活动状态 至少每 5 6 分钟打开一次 我的 WebSocket 连接会通过 ping 请求保持活动状态 请参阅随附的屏幕截图 但是 如果我放弃该选项卡 10 分钟左右 ping 请求就会停止发生 WebSocke
  • 存储和编辑 Java EE 应用程序的配置

    UPDATE 请参阅我关于此主题的博客文章大约一年后撰写 http blog ringerc id au 2012 07 java ee 7 needs improvements in app html http blog ringerc
  • 如何在 Django 中的 URL 中传递 kwargs

    在 django 文档中 url 函数是这样的 url regex view kwargs None name None prefix 我有这个 url r download template P
  • Hibernate 数据库加密对应用程序完全透明

    我正在开发一个 Grails 1 0 4 项目 该项目将在不到 2 周的时间内发布 客户刚刚提出了一个要求 即数据库中的所有数据都应该加密 由于对应用程序本身中的每个数据库访问进行加密可能会花费大量时间并且容易出错 因此我寻求的解决方案是某
  • 在内部存储上播放文件时 MediaPlayer 错误-2147483648

    我正在使用android com 上的音频捕获示例 http developer android com guide topics media index html在实际设备上录制和播放音频 摩托罗拉触摸板和三星 Galaxy S 当我将音