在ICS上流式传输音频问题

时间:2012-04-08 09:59:27

标签: android audio streaming media-player android-4.0-ice-cream-sandwich

我正在使用音频流在设备上播放MP3文件,并且在ICS问世之前没有问题。然后我认为它可能是一个格式支持问题,所以我尝试使用以下代码的OGG文件:

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

这适用于早期的操作系统版本,但在ICS上失败。我还尝试使用onPreparesListener atc创建setDataSource(this, 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 个答案:

答案 0 :(得分:0)

我同样也遇到了同样的问题,所以我改变了方向并做了这件事,这对我来说很好。但是,您必须将声音文件保存在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;
        }

希望这也适合你。

相关问题