使用录制文件 .3gp 时,MediaPlayer 准备失败错误(1,-17)

2023-11-29

我正在尝试从 AudioRecorder 进行录制,然后尝试使用媒体播放器进行相同的播放,但它给出的 mediaplayer.prepare() 无法准备。谁能告诉我什么是合适的理由。 下面是我正在使用的代码

        public void onClick(View v) {

            recorder = new MediaRecorder();
            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            if(case_value==0)
                recorder.setOutputFile(deviceMIC_path);
            else if(case_value==1)
                recorder.setOutputFile(deviceMIC_Handset_path);
            else if(case_value==2)
                recorder.setOutputFile(headsetMIC_path);

            recorder.setOnErrorListener(errorListener);
            recorder.setOnInfoListener(infoListener);

            try {
                recorder.prepare();
                recorder.start();
                if (ENABLE_LOGS)
                    Log.e(LOG_TAG, resources
                            .getString(R.string.record_started));
                Toast.makeText(context,
                        resources.getString(R.string.record_started),
                        Toast.LENGTH_LONG).show();
                recording = true;


            } catch (IllegalStateException e) {
                Log.e("","ILLEAGAL EXCEPTION...");e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
                Log.e("","IO EXCEPTION...");
            }
            catch(Exception e){
                e.printStackTrace();
                Log.e("","UNKNOWN EXCEPTION...");
            }

        }
    });

    stopButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if (recording) {
                if (ENABLE_LOGS)
                    Log.e(LOG_TAG, "Record is going to be stoped...");
                recorder.stop();
                if (ENABLE_LOGS)
                    Log.e(LOG_TAG, "Record STOPPED....");
                Toast
                        .makeText(context, "Record STOPPED",
                                Toast.LENGTH_LONG).show();

                recorder.release();
                recorder=null;
            }
        }
    });

    playButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            MediaPlayer mediaplayer = new MediaPlayer();

            try {
                if(case_value==0)
                        mediaplayer.setDataSource(deviceMIC_path);
                else if(case_value==1)
                    mediaplayer.setDataSource(deviceMIC_Handset_path);
                else if(case_value==2)
                    mediaplayer.setDataSource(headsetMIC_path);


            } catch (IllegalArgumentException e) {

                e.printStackTrace();
            } catch (IllegalStateException e) {

                e.printStackTrace();
            } catch (IOException e) {

                e.printStackTrace();
            }
            try {
                mediaplayer.prepare();
            } catch (IllegalStateException e) {

                e.printStackTrace();
            } catch (IOException e) {

                e.printStackTrace();
            }
            catch(Exception e){
                e.printStackTrace();
            }
            // mAudioManager.setSpeakerphoneOn(false);
            if (ENABLE_LOGS)
                Log.e(LOG_TAG, "CASE VALUE : " + case_value);
            if (case_value == 0) {

                if (MainActivity.headsetState == 0) {

                    if (!mediaplayer.isPlaying()) {
                        mediaplayer.start();
                        if (ENABLE_LOGS)
                            Log.e(LOG_TAG, "PLAY started...");
                        Toast.makeText(context, "PLAY started...",
                                Toast.LENGTH_LONG).show();
                    } else {
                        mediaplayer.stop();
                    }

以下是我收到的错误

12-12 12:00:01.186: E/com.brcm.factorymode.audioloop.AudioLoopFtmTestActivity(1860): Record started
12-12 12:00:04.467: E/com.brcm.factorymode.audioloop.AudioLoopFtmTestActivity(1860): Record is going to be stoped...
12-12 12:00:04.592: E/com.brcm.factorymode.audioloop.AudioLoopFtmTestActivity(1860): Record STOPPED....
12-12 12:00:06.710: W/MediaPlayer(1860): info/warning (1, 26)
12-12 12:00:06.725: E/MediaPlayer(1860): error (1, -17)
12-12 12:00:06.725: W/System.err(1860): java.io.IOException: Prepare failed.: status=0x1
12-12 12:00:06.725: W/System.err(1860):     at android.media.MediaPlayer.prepare(Native Method)
12-12 12:00:06.725: W/System.err(1860):     at com.brcm.factorymode.audioloop.AudioLoopFtmTestActivity$3.onClick(AudioLoopFtmTestActivity.java:155)
12-12 12:00:06.725: W/System.err(1860):     at android.view.View.performClick(View.java:2364)
12-12 12:00:06.725: W/System.err(1860):     at android.view.View.onTouchEvent(View.java:4179)
12-12 12:00:06.725: W/System.err(1860):     at android.widget.TextView.onTouchEvent(TextView.java:6534)
12-12 12:00:06.725: W/System.err(1860):     at android.view.View.dispatchTouchEvent(View.java:3709)
12-12 12:00:06.725: W/System.err(1860):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
12-12 12:00:06.725: W/System.err(1860):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
12-12 12:00:06.725: W/System.err(1860):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
12-12 12:00:06.725: W/System.err(1860):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
12-12 12:00:06.725: W/System.err(1860):     at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:883)
12-12 12:00:06.725: W/System.err(1860):     at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
12-12 12:00:06.725: W/System.err(1860):     at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
12-12 12:00:06.725: W/System.err(1860):     at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
12-12 12:00:06.725: W/System.err(1860):     at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
12-12 12:00:06.725: W/System.err(1860):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
12-12 12:00:06.725: W/System.err(1860):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-12 12:00:06.725: W/System.err(1860):     at android.os.Looper.loop(Looper.java:123)
12-12 12:00:06.733: W/System.err(1860):     at android.app.ActivityThread.main(ActivityThread.java:4338)
12-12 12:00:06.741: W/System.err(1860):     at java.lang.reflect.Method.invokeNative(Native Method)
12-12 12:00:06.741: W/System.err(1860):     at java.lang.reflect.Method.invoke(Method.java:521)
12-12 12:00:06.741: W/System.err(1860):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
12-12 12:00:06.741: W/System.err(1860):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
12-12 12:00:06.741: W/System.err(1860):     at dalvik.system.NativeStart.main(Native Method)
12-12 12:00:06.741: E/com.brcm.factorymode.audioloop.AudioLoopFtmTestActivity(1860): CASE VALUE : 0
12-12 12:00:06.749: E/MediaPlayer(1860): start called in state 0
12-12 12:00:06.749: E/MediaPlayer(1860): error (-38, 0)
12-12 12:00:06.749: E/com.brcm.factorymode.audioloop.AudioLoopFtmTestActivity(1860): PLAY started...
12-12 12:00:06.756: I/MediaPlayer(1860): Info (1,26)
12-12 12:00:06.756: E/MediaPlayer(1860): Error (-38,0)

谁能告诉我解决这个问题的方法。


实现 OnCompletionListener 并将其注册到您的 MediaPlayer 实例。

媒体播放完后会调用此回调方法 onCompletion

void onCompletion(MediaPlayer mp){
   //Here you stop it.
   mp.stop();
   //Reset the data source path to the new file
   mp.setDataSource(<uri>);
   mp.prepare(); // or mp.prepareAsync();
   // start the mediaplayer after the prepare has completed.
}

播放完所有文件后释放媒体播放器实例。

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

使用录制文件 .3gp 时,MediaPlayer 准备失败错误(1,-17) 的相关文章

随机推荐

  • 自动化 Team Foundation Build 配置

    我目前正在寻找一种无需使用配置向导即可配置 Team Foundation Build 服务 一个构建代理的方法 有没有办法做到这一点 无论是通过命令行 我还没有找到 TFS Build 的任何命令行安装选项 还是通过 API Thanks
  • 如何使用WebRTC将视频流传输到RTMP?

    我正在尝试构建一项服务 将您的屏幕从浏览器流式传输到客户端 例如抽搐 我所完成的是我用 rtmp 构建了一个工作的 nginx 服务器 我使用 OBS 对其进行了测试 这效果很好 我的问题是如何使用 WebRTC 将屏幕从浏览器 不是来自
  • 将向量的每个元素与第二个向量的每个元素相加

    我有两个向量 我想要一个矩阵 其元素是向量 1 的每个元素和向量 2 的每个元素的总和 例如 该矩阵第一行的第一个元素是向量1的第一个元素和向量2的第一个元素的和 第一行的第二个元素是向量 1 的第一个元素与向量 2 的第二个元素之和 依此
  • 查看同一个表中的另一条记录时将 SQL 子查询转换为联接 Access 2010

    我读过联接比子查询更有效 我有一个查询非常慢并且使用大量子查询 因此我想改进它但不知道如何改进 我有以下表格 People this table stores lists of individual people with the foll
  • adb devices 命令和 eclipse 无法识别我的索尼爱立信 xperia x10

    我使用的是Windows XP adb devices 命令不显示我的 xperia x10 和 eclipse 无法识别我的 xperia x10 我有 htc magic 效果很好 我从以下位置下载了驱动程序 http develope
  • Google Chart vAxis 值未显示

    我正在处理各种图表 并在单个页面中显示多个图表 不知何故 vAxis 值没有显示在某些图表上 但它显示在一些独立的图表中 我们可以说它在不同的部分并手动触发 我已经尝试了我能尝试的一切 var data google visualizati
  • 错误:ORA-01704:字符串文字太长

    当我尝试在具有数据类型的字段上设置超过 4000 个字符的值时CLOB 它给了我这个错误 ORA 01704 字符串文字太长 任何建议 如果我必须设置无限字符的值 哪种数据类型将适用于我 尽管对于我的情况来说 它恰好是关于15000 cha
  • IE8中的settimeout问题

    我在 IE8 中使用 javascript setTimeout 函数时遇到一个奇怪的问题 我想像这样使用 setTimeout 函数 setTimeout timeout 2000 name saarthak function timeo
  • Domino 中的身份验证和 Web 服务?

    有没有办法允许在 Domino Web 服务中进行身份验证 如果是这样 我该怎么做 IBM 有一个例子here 有other options
  • 自定义类中没有实体管理器和 ContextErrorException

    我正在尝试在 Sonata Admin 中创建自定义表单 我想将数据从数据库获取到选择框 当我尝试通过 getEntityManager 获取数据时出现错误 No entity manager defined for class Admin
  • “a”在 JVM 指令(如“a load”或“a return”)中意味着什么?

    a 在 JVM 指令 如 a load 或 a return 中意味着什么 我知道它们对引用进行操作 但为什么它们被命名为 aload astore 等而不是 reload restore 等 我相信历史上 a 代表 地址 因为对象引用只是
  • 设置作为参数传递的 TypeScript 对象的默认值

    function sayName params firstName string lastName string params lastName params lastName smith lt lt any better alternat
  • .Net Core 将连接字符串传递给 DBContext 类

    刚刚开始使用 Net Core 并面临将连接字符串信息传递到 Context 控制台项目 我有 4 个项目 都是使用 Net Core 创建的 MVC 服务层 领域层 数据层 在 MVC 项目中 我有 Startup cs 文件 我正在其中
  • Rdf 重复三元组

    我有一个关于 RDF 和重复三元组 的问题 通过仔细阅读互联网 似乎重复的三元组在某种程度上是 不好的 或违反了某些规则 但从表面上看 重复的三元组在我看来是有意义的 假设我想表达这样一个事实 Susy 主语 提到 谓语 Bob 宾语 假设
  • 游戏中心好友列表

    All 我为 Apple iOS 制作了一款游戏 现在我想在苹果游戏中心显示我的好友列表 如何在 iPhone 上显示登录玩家的 Game Center 好友列表 可能使用 UIViewController 管理 ViewControlle
  • 如何在堆叠栏中显示每个日期范围的多个堆叠列

    本质上 目的是比较团队中每个成员每周执行的任务类别 我想在轴下方添加周数而不是 1 0 2 0 和 3 0 我得到了错误的结果 因为它仅显示 1 表示优秀 并且所有周 1 周 2 周 3 周 4 我选择开始日期为 1 12 2014 结束日
  • 获取传单中图层中的标记数

    我有一个 Leaflet 地图 其中有一个名为 flickrpics 的图层 该图层根据当前地图视图的 bbox 在 geojson 中动态加载 我想获得该图层中标记数量的简单计数 以便可以将其显示在图层控件中的图层标签旁边 我尝试过像 f
  • 语法错误,意外的“ ” (T_STRING)

    为什么我的 PHP 邮件代码总是给出 语法错误 第 4 行 C xampp htdocs GSP members php 中出现意外的 T STRING
  • 具有 2 个 y 轴的 Seaborn 箱线图

    如何创建具有 2 个 y 轴的 seaborn 箱线图 由于规模不同 我需要这个 我当前的代码将覆盖箱线图中的第一个框 例如 它由第一个轴的第一个数据项和第二个轴的第一个数据项填充 import pandas as pd import nu
  • 使用录制文件 .3gp 时,MediaPlayer 准备失败错误(1,-17)

    我正在尝试从 AudioRecorder 进行录制 然后尝试使用媒体播放器进行相同的播放 但它给出的 mediaplayer prepare 无法准备 谁能告诉我什么是合适的理由 下面是我正在使用的代码 public void onClic