如何获得低于 3.0 版本的 Android 设备的实时流媒体音频?

Posted

技术标签:

【中文标题】如何获得低于 3.0 版本的 Android 设备的实时流媒体音频?【英文标题】:How can I get live streaming audio which Android device below version 3.0? 【发布时间】:2013-02-04 08:41:16 【问题描述】:

我用过:

player = new MediaPlayer();
    try 
        player.setDataSource(str_stream_url);
        // player.setDataSource("http://cdn.concreteloop.com/wp-content/uploads/2011/01/Jennifer-Lopez-feat.-Pitbull-On-the-Floor.mp3");
     catch (IllegalArgumentException e) 
        e.printStackTrace();
     catch (IllegalStateException e) 
        e.printStackTrace();
     catch (IOException e) 
        e.printStackTrace();
    

    player.setOnBufferingUpdateListener(new OnBufferingUpdateListener() 

        public void onBufferingUpdate(MediaPlayer mp, int percent) 
            playSeekBar.setSecondaryProgress(percent);
            Log.i("Buffering", "" + percent);
        
    );

它在 android v4.0 中工作,但在 Android 2.3.3 中不工作..

我能做什么??

谢谢。

【问题讨论】:

“不工作”以什么方式?您在 logcat 输出中是否收到任何异常或其他相关错误? 我在 Logcat 中看到的以下错误:02-06 13:08:29.440: E/MediaPlayer(2448): start call in state 4 02-06 13:08:29.440: E/MediaPlayer( 2448): 错误 (-38, 0) 02-06 13:08:29.460: E/MediaPlayer(2448): 错误 (-38,0) start called in state 4 表示您在prepareAsync 完成之前调用了start。当准备完成时,您应该使用onPreparedListener 接收回调,并且在此之前不要调用start player.setDataSource(this, myUri); player.setAudiostreamType(AudioManager.STREAM_MUSIC); player.prepareAsync(); player.setOnPreparedListener(this); player.setOnBufferingUpdateListener(this); player.setOnErrorListener(this);好吗? 【参考方案1】:

我也在 Android 2.3.3 中尝试过这段代码,但没有成功。最后你可以看到错误。

Uri myUri = Uri
            .parse("http://46.137.18.79:8000/;stream.nsv&type=mp3&autostart=true");

    player = new MediaPlayer();
    try 
        if (player == null) 
            this.player = new MediaPlayer();
         else 
            player.stop();
            player.reset();
        
        player.setDataSource(this, myUri); // Go to Initialized state
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        player.setOnPreparedListener(this);
        player.setOnBufferingUpdateListener(this);

        player.setOnErrorListener(this);
        player.prepareAsync();

        Log.d(TAG, "LoadClip Done");
     catch (Throwable t) 
        Log.d(TAG, t.toString());
    

02-06 13:49:03.730: E/MediaPlayer(2718): stop 在状态 1 中调用

02-06 13:49:03.730: E/MediaPlayer(2718): 错误 (-38, 0)

02-06 13:49:03.730: D/MediaPlayer(2718): 无法在客户端打开文件,正在尝试服务器端

02-06 13:49:03.870:D/MyMain(2718):加载剪辑完成

谢谢。

【讨论】:

我在 Android 4.0.3 中尝试过,它可以工作。但是在 Android 2.3.3 或 2.1 或 2.2 等中。它没有工作..

以上是关于如何获得低于 3.0 版本的 Android 设备的实时流媒体音频?的主要内容,如果未能解决你的问题,请参考以下文章

蓝牙低能耗清单

从 Android Studio 3.0 构建时如何克服应用未安装错误?

Android各种屏幕适配原理

迁移到 Android Gradle Plugin 3.0 | 中文教学视频

模块音频蓝牙(iOS和Android)

如何获取手机的android版本号