首页 文章

在ICS上流式传输音频问题

提问于
浏览
4

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

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

这适用于早期的OS版本,但在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

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

    希望这也适合你 .

相关问题