当前位置: 首页 > 知识库问答 >
问题:

ICS上的流式音频问题

闻人河
2023-03-14

我使用音频流在设备上播放MP3文件,在ICS问世之前没有任何问题。然后我认为这可能是一个格式支持问题,因此我尝试使用以下代码创建OGG文件:

MediaPlayer mmp= MediaPlayer.create(context,
                      Uri.parse("http://vorbis.com/music/Epoq-Lepidoptera.ogg"));
mmp.start();

这在早期的操作系统版本上有效,但在集成电路上失败。我还尝试过使用onPreparesListener atc使用setDataSource(这个uri)创建媒体播放器,但仍然出现相同的错误:

04-08 09:52:12.459: D/MediaPlayer(541): Couldn't open file on client side, trying server side
04-08 09:52:12.489: E/MediaPlayer(541): Unable to to create media player
04-08 09:52:12.529: D/MediaPlayer(541): create failed:
04-08 09:52:12.529: D/MediaPlayer(541): java.io.IOException: setDataSource failed.: status=0x80000000
04-08 09:52:12.529: D/MediaPlayer(541):     at android.media.MediaPlayer._setDataSource(Native Method)
04-08 09:52:12.529: D/MediaPlayer(541):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:844)
04-08 09:52:12.529: D/MediaPlayer(541):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:806)
04-08 09:52:12.529: D/MediaPlayer(541):     at android.media.MediaPlayer.setDataSource(MediaPlayer.java:761)
04-08 09:52:12.529: D/MediaPlayer(541):     at android.media.MediaPlayer.create(MediaPlayer.java:695)
04-08 09:52:12.529: D/MediaPlayer(541):     at android.media.MediaPlayer.create(MediaPlayer.java:676)

所以我的问题是如何在ICS上使用MediaPlayer流式传输音频文件?是否有人有工作代码,或者可能有一些特定的文件格式和编码?但是新的操作系统版本不能向后兼容,这太糟糕了。。。

共有1个答案

徐高懿
2023-03-14

我也有同样的问题,所以我换了档,改成这样做,这对我来说很好。但是,您必须将声音文件保存在res/assets文件夹中。

        try {
            AssetFileDescriptor afd = getAssets().openFd("mysound.mp3");
            mPlayer = new MediaPlayer();
            mPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
            mPlayer.prepare();
            mPlayer.start();
        } 
        catch (IllegalStateException e) {
            Log.d(TAG, "IllegalStateException: " + e.getMessage());
        }
        catch (IOException e) {
            Log.d(TAG, "IOException: " + e.getMessage());
        }
        catch (IllegalArgumentException e) {
            Log.d(TAG, "IllegalArgumentException: " + e.getMessage());
        }
        catch (SecurityException e) {
            Log.d(TAG, "SecurityException: " + e.getMessage());
        }  

然后,您将以通常的方式释放资源:

        if(mPlayer != null) {
            if(mPlayer.isPlaying()) mPlayer.stop();
            mPlayer.release();
            mPlayer = null;
        }

希望这对你也有用。

 类似资料:
  • 我一直在做一个项目,它将极大地受益于调用流修改。这已经被反复地说/假设是无法实现的,因为大多数人认为呼叫内音频的硬件环路与设备的主MCU完全断开。 像电话音频流这样的问题,Android已经收到了回答,称无法访问音频。我同意这在Android API中是绝对不可能的,但硬件是否真的完全断开是完全不清楚的。 stackoverflow用户“Artsylar”表示,他们能够修改Android OS的“

  • 我已经搜索了Google的所有可用文档,但我找不到Python音频流上的流式语音识别示例。 目前,我正在Django中使用Python语音识别从用户那里获取音频,然后收听音频。然后,我可以保存文件并运行google语音识别,或者直接从创建的音频实例中运行。 有人能指导我如何对音频流执行流式语音识别吗?

  • 我想做一个网站,将作为一个VoIP录音机应用程序。它将从麦克风获取音频,仅将音频传输到服务器和服务器,然后服务器将处理音频重新分配到其连接的客户端。 以下是我已经尝试过的: WebRTC(据我所知,它只是点对点的) 我设置的堆栈是带有Express的NodeJS,但我对任何有帮助的包都非常开放。 就可能性而言,我知道这是可能的,因为不和谐在他们自己的博客中写道,他们明确不发送点对点数据包,因为他们

  • 这里我有记录音频流文件的代码。问题是我想保存这个文件与正确的文件扩展名(主要是. mp3和. aac)。我该如何实现这一点?

  • 需要您的帮助,我检查音频流是否当您按下按钮或当程序启动的时刻,当您按下按钮,音频流是不可用的,然后没有发生,音乐没有播放,没有任何响应从程序没有我想让您认识到如何这样的响应尽可能做吗?

  • 我正在使用核心音频(与swift包装)播放一些音频样本(一个简短的刺激,其中记录一个冲动)。我坚持使用核心音频,而不是更新的AVFoundation,因为我需要一些严格的定时和多设备输入,更新的框架还没有涵盖(我通过苹果代码请求他们告诉我必须使用核心音频)。 我现在创建了一个非常简单的正弦波,使用: 如果我把它写到一个wav文件并回放,音调就会按预期的方式创建。 然而,我实际上想在应用程序中触发这