媒体播放器准备失败

2023-12-25

过去 8 个小时我一直在尝试开发一个简单的录音/播放应用程序。我希望能够以 3GP 格式录制音频,然后将其自动加载到MediaPlayer这样我就可以播放它。我 80% 确定它正在录制并保存到代码中指定的位置,但是当我尝试将其加载到我的媒体播放器中时,我总是收到此错误。我已经尝试加载toto_africa.mp3文件也以确保这不是录制文件的问题,但它仍然给我这个错误。任何有关此错误的帮助将不胜感激,因为我已经到处寻找答案。我想一个更具体的问题是:我如何正确地获得我的MediaPlayer and MediaRecorder沟通和运作正常吗?


LogCat

03-14 00:32:18.708: E/appPath:(4443): /data/data/com.jordan.tester/files
03-14 00:32:18.708: E/(1) Length of de file mon'?(4443): 0
03-14 00:32:24.408: E/Are ya dead maan?(4443): Kiss the Lucky egg
03-14 00:32:24.688: E/IS da file alive?(4443): true
03-14 00:32:24.688: E/IS da file a file?(4443): true
03-14 00:32:24.688: E/(2) Length of de file mon'?(4443): 4515
03-14 00:32:28.362: V/MediaPlayer(4443): constructor
03-14 00:32:28.362: V/MediaPlayer(4443): setListener
03-14 00:32:28.368: V/MediaPlayer(4443):setDataSource(/data/data/com.jordan.tester/files/temp.3gp)
03-14 00:32:28.368: V/MediaPlayer(4443): prepare
03-14 00:32:28.368: V/MediaPlayer(4443): message received msg=100, ext1=1, ext2=-2147483648
03-14 00:32:28.368: E/MediaPlayer(4443): error (1, -2147483648)
03-14 00:32:28.368: V/MediaPlayer(4443): signal application thread
03-14 00:32:28.368: V/MediaPlayer(4443): prepare complete - status=1
03-14 00:32:28.378: D/MediaPlayer(4443): create failed:
03-14 00:32:28.378: D/MediaPlayer(4443): java.io.IOException: Prepare failed.: status=0x1
03-14 00:32:28.378: D/MediaPlayer(4443):    at android.media.MediaPlayer.prepare(Native Method)
03-14 00:32:28.378: D/MediaPlayer(4443):    at android.media.MediaPlayer.create(MediaPlayer.java:638)
03-14 00:32:28.378: D/MediaPlayer(4443):    at android.media.MediaPlayer.create(MediaPlayer.java:615)
03-14 00:32:28.378: D/MediaPlayer(4443):    at com.jordan.tester.Main.startPlaying(Main.java:120)
03-14 00:32:28.378: D/MediaPlayer(4443):    at com.jordan.tester.Main.onClick(Main.java:89)
03-14 00:32:28.378: D/MediaPlayer(4443):    at android.view.View.performClick(View.java:2419)
03-14 00:32:28.378: D/MediaPlayer(4443):    at android.view.View$PerformClick.run(View.java:8865)
03-14 00:32:28.378: D/MediaPlayer(4443):    at android.os.Handler.handleCallback(Handler.java:587)
03-14 00:32:28.378: D/MediaPlayer(4443):    at android.os.Handler.dispatchMessage(Handler.java:92)
03-14 00:32:28.378: D/MediaPlayer(4443):    at android.os.Looper.loop(Looper.java:143)
03-14 00:32:28.378: D/MediaPlayer(4443):    at android.app.ActivityThread.main(ActivityThread.java:5061)
03-14 00:32:28.378: D/MediaPlayer(4443):    at java.lang.reflect.Method.invokeNative(Native Method)
03-14 00:32:28.378: D/MediaPlayer(4443):    at java.lang.reflect.Method.invoke(Method.java:521)
03-14 00:32:28.378: D/MediaPlayer(4443):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-14 00:32:28.378: D/MediaPlayer(4443):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-14 00:32:28.378: D/MediaPlayer(4443):    at dalvik.system.NativeStart.main(Native Method)
03-14 00:32:28.378: E/TESTER(4443): java.lang.NullPointerException

My Code

package com.jordan.tester;

import java.io.File;
import java.io.IOException;

import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Main extends Activity implements OnClickListener {

    private Button beginRecord, beginPlay, stopRecord, stopPlay;
    private MediaPlayer player;
    private MediaRecorder recorder;
    private String TESTER_TAG = "TESTER";

    private File file;
    private String tempPath = "R.raw.toto_africa";
    private String fn = "temp.3gp";
    private File appPath;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        beginRecord = (Button) findViewById(R.id.beginRecord);
        beginPlay = (Button) findViewById(R.id.beginPlay);
        stopRecord = (Button) findViewById(R.id.stopRecord);
        stopPlay = (Button) findViewById(R.id.stopPlay);

        beginRecord.setOnClickListener(this);
        beginPlay.setOnClickListener(this);
        stopRecord.setOnClickListener(this);
        stopPlay.setOnClickListener(this);

        file = new File(this.getFilesDir(), fn);
        file.delete();

        appPath = this.getFilesDir();
        Log.e("appPath:", appPath.toString());
        file = new File(this.getFilesDir(), fn);
        tempPath = file.getAbsolutePath();
        Log.e("tempPath:", tempPath);

        Log.e("(1) Length of de file mon'?", String.valueOf(file.length()));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {

        case R.id.beginRecord:
            try {
                startRecording();

            } catch (Exception e) {
                Log.e(TESTER_TAG, e.toString());
            }
            break;
        // ////////////////////////////////////////////////////////////
        case R.id.beginPlay:
            try {
                startPlaying();
            } catch (Exception e) {
                Log.e(TESTER_TAG, e.toString());
            }
            break;
        // ///////////////////////////////////////////////////////////
        case R.id.stopRecord:
            try {
                stopRecording();
            } catch (Exception e) {
                Log.e(TESTER_TAG, e.toString());
            }
            break;
        // /////////////////////////////////////////////////////////////
        case R.id.stopPlay:
            try {
                stopPlaying();
            } catch (Exception e) {
                Log.e(TESTER_TAG, e.toString());
            }
            break;
        }
    }

    private void startPlaying() {
        ditchMediaPlayer();

        try {
            player = MediaPlayer.create(getBaseContext(), Uri.parse(tempPath));
            player.start();
        } catch (IllegalStateException e) {
            Log.e(TESTER_TAG, e.toString());
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        }
    }

    private void stopPlaying() {
        // /
    }

    private void stopRecording() {
        if (recorder != null) {
            Log.e("Are ya dead maan?", "Kiss the Lucky egg");
            recorder.stop();
            recorder.release();
            Log.e("IS da file alive?", String.valueOf(file.exists()));
            Log.e("IS da file a file?", String.valueOf(file.isFile()));
            Log.e("(2) Length of de file mon'?", String.valueOf(file.length()));
        }
    }

    private void startRecording() {
        ditchMediaRecorder();
        // File outFile = new File(OUTPUT_FILE);
        recorder = new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setOutputFile(tempPath);

        try {
            recorder.prepare();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        recorder.start();
    }

    private void ditchMediaRecorder() {
        if (recorder != null) {
            recorder.release();
        }
    }

    private void ditchMediaPlayer() {
        if (player != null) {

            try {
                player.release();
            } catch (Exception e) {
                Log.e(TESTER_TAG, e.toString());
            }
        }
    }
}

从你的 logcat 日志中,我发现setDataSource你的一部分Create正在失败。从你的日志来看,

03-14 00:32:28.368: V/MediaPlayer(4443):setDataSource(/data/data/com.jordan.tester/files/temp.3gp)
03-14 00:32:28.368: V/MediaPlayer(4443): prepare
03-14 00:32:28.368: V/MediaPlayer(4443): message received msg=100, ext1=1, ext2=-2147483648 
03-14 00:32:28.368: E/MediaPlayer(4443): error (1, -2147483648)

作为prepare,播放器引擎实现等待finishSetDataSource。如果底层播放器引擎无法设置DataSource,它将返回一个UNKNOWN_ERROR这对应于0x80000000 or -2147483648.

我相信问题源于传递给的字符串setDataSource。从上面复制的日志来看,该字符串是/data/data/com.jordan.tester/files/temp.3gp,我觉得这与文件或流媒体源的任何已知实现方法都不匹配。

为了解决您的问题,我建议您附加一个file://到您的输入字符串,即传递给创建的字符串可以是file:///data/data/com.jordan.tester/files/temp.3gp或者用 Java 本身打开文件并将文件描述符传递给create.

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

媒体播放器准备失败 的相关文章

  • ActionScript Workers 可以用于在单独的线程中播放/生成声音吗?

    我很新ActionScript 工作者 但我想知道这是否可能 从我读到的来看 ActionScript 工作者 ASW 就像单独的线程 可以执行更多 CPU 密集型计算 而无需中断主线程 正在执行主 SWF 文件 我真正看到的唯一一个例子是
  • 整个应用程序中的全局“搜索功能”

    在我的整个应用程序中 我希望搜索按钮执行单独的操作Activity 即 当我按下搜索按钮时 从应用程序中的任何位置调用一个单独的活动 有什么方法可以代替定义onSearchRequested 在每项活动中 我只是在一个地方配置它 例如Man
  • 如何从 WifiP2pDeviceList 获取 wifi direct 设备名称

    我想在执行请求对等点时获取 wi fi direct 名称 这是我的代码 if WifiP2pManager WIFI P2P PEERS CHANGED ACTION equals action Log d tag success dis
  • 使用 Android WebViewClient 启用特定 SSL 协议

    我的应用程序使用WebViewClient与服务器建立 SSL 连接 服务器配置为仅接受 TLSv1 1 及以上协议 使用 Android 时 如何检查哪些 SSL 协议是 a 支持的和 b 默认启用的WebViewClient在设备上 如
  • 在 VB2010 Windows 窗体开始时播放 .wav/.mp3 文件?

    制作 VB2010 已经大约一年了 最近开始突破我可以将哪种媒体合并到我的表单中的界限 但我无法播放 wav 或 mp3 文件 我尝试按照微软和其他编码网站上的教程进行操作 但没有成功 任何帮助 将不胜感激 要播放波形文件 您可以简单地使用
  • 如何以编程方式在 Android 中查找平板电脑或手机?

    我的情况是 手机和平板电脑的逻辑是相同的 但布局上略有不同 我尝试使用以下代码 public static boolean findoutDeviceType Context context return context getResour
  • Kotlin - 即使有 init() 函数,属性也必须初始化或者是抽象的

    我已使用 Android Studio 3 0 将此代码从 Java 转换为 Kotlin internal var background Drawable internal var xMark Drawable private fun i
  • AdMob 插页式广告仅显示一次

    当广告在一个会话内第二次或第三次打开时 LogCat 会显示错误消息 尝试使用不同的广告管理器启动新的 AdActivity 我通过应用程序主屏幕的 on resume 方法中的意图启动插页式广告 Override public void
  • 屏幕滚动时 GridView 内的项目会重复

    我使用 GridView 来显示一组用户可以选择的类别 网格的每个项目都由一个 ImageView 和一个 TextView 组成 两者都是从服务器检索的 当触摸一个项目时 另一个活动就会启动 我以为一切都很顺利 直到我注意到当我滚动屏幕时
  • Flutter - 选择 TextFormField 时键盘不显示

    我目前遇到一个问题 当我选择任何一个时 键盘不会出现TextFormFielda 内的小部件Form小部件 这是表单的代码 位于我的内部CreateAccountForm有状态的小部件 import package flutter mate
  • Android repo 脚本创建的 .repo/projects/ 中的裸 git 存储库的用途是什么?

    The 安卓源码 http android git kernel org 由以下人员管理repo http source android com source version control html 使用 repo 同步时 一个名为 re
  • 单击输入字段会触发窗口调整大小

    我有一个带有徽标 菜单和搜索的标题 当我在桌面上时 我会按该顺序显示所有元素 但如果我的窗口宽度小于 980 像素 菜单会隐藏 有一个切换按钮 并且徽标会与nav并附在徽标之后 如果宽度更大 则徽标将再次分离并附加到 DOM 中的旧位置 w
  • 检查应用程序是否首次运行[重复]

    这个问题在这里已经有答案了 我是 Android 开发新手 我想根据应用程序安装后首次运行来设置一些应用程序的属性 有什么方法可以发现应用程序是第一次运行 然后设置其首次运行属性吗 下面是一个使用的例子SharedPreferences实现
  • 开始使用 Honeycomb 进行 Android 开发 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • android中如何布局支持各种屏幕?

    我正在使用gridview开发图库视图 在小屏幕中我的布局设计修复得很好 但大屏幕没有我的设计 在大屏幕中有一些空格 加载更多图片 按钮参考图2 我该如何解决这个问题 我的清单文件添加了这一行以支持各种屏幕 请给我一些示例代码
  • Android - 主页按钮发出什么意图?

    我想知道设备的主页按钮到底执行什么操作 即 当您单击主页按钮时会发出什么意图 意图类别和操作 回到空白的主屏幕 我想知道在单击我自己的自定义按钮时实现此操作涉及什么 谢谢 PS我知道这不是标准的 但我的设备也不是 如果您想显示主屏幕 可以通
  • 如何使用云打印打印Android活动显示

    我正在尝试将 Google 云打印实现到应用程序中 遵循集成指南 https developers google com cloud print docs android 我试图通过打印 google com 来保持基本 单击我创建的打印按
  • 如何使用百分比进行android布局?

    我们如何使用百分比android视图元素的值 像这样的东西
  • 无法通过usb调试安装android应用程序

    我知道这是一个老问题 但我第一次尝试在 Redmi note 4 上安装我的应用程序 每当我尝试安装时 它都会显示一个对话框 安装失败 并显示消息无法建立会话 通过卸载现有版本的 apk 如果存在 然后重新安装 可能可以解决此问题 警告 卸
  • Fragment 的 onSaveInstanceState() 永远不会被调用

    我试图将数据保存在片段的 onSaveInstanceState 中 但该方法从未被调用 有人可以帮忙吗 public class MyFragment extends Fragment Override public View onCre

随机推荐