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

链接源未在MediaPlayer或SoundPool中播放

傅峰
2023-03-14

我想用MediaPlayer或SoundPool播放URL中的短声音,但当我尝试播放时,什么都没有发生。

我有此MP3链接格式:“http://www.universal-soundbank.com/802a/805020000000000000000000000pkjn800000000000000000000000000000090/g/85055050505050505050505/k/986.mp3“”

我仔细检查了清单INTERNET、读、写存储中的权限。我读到这个错误:MediaPlayer﹕ 错误(1,-2147483648)和准备失败:状态=0x1。

这个消息来源似乎有问题。

15:03:42.259 17076-17076/com.soundbox E/libEGL﹕ call to OpenGL ES API with no current context (logged once per thread) 03-03 
15:08:15.966 18139-18139/com.soundbox E/libEGL﹕ call to OpenGL ES API with no current context (logged once per thread) 03-03 
15:08:31.111 18139-18151/com.soundbox E/MediaPlayer﹕ error (1, -2147483648)

当我启动播放器时,我得到了准备错误。

    public class MainActivity extends ActionBarActivity implements     AdapterView.OnItemClickListener, MediaPlayer.OnPreparedListener{

  private GridView mainGridview;
  private GridViewAdapter adapter;

  public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
  private ProgressDialog mProgressDialog;


  boolean plays = false, loaded = false;


  int counter;

  private MediaPlayer player;
  FileInputStream fis = null;


  private String[] soundArray;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mainGridview = (GridView) findViewById(R.id.mainGridView);
    adapter = new GridViewAdapter(this);

    mainGridview.setAdapter(adapter);
    mainGridview.setOnItemClickListener(this);

    soundArray =  getResources().getStringArray(R.array.animalsSoundsUrls);

}

  private void play(Uri uri)
  {
    try{
        player = new MediaPlayer();
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        player.setDataSource(this, uri);
        player.prepare(); // prepare async to not block main thread
        player.start();
    }catch (IOException e)
    {
        e.printStackTrace();
    }

  }
  private void play(String url)
  {
    try{
        player = new MediaPlayer();
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        player.setDataSource(url);
        player.prepare(); // prepare async to not block main thread
        player.start();
    }catch (IOException e)
    {
        e.printStackTrace();
    }

  }

  @Override
  public void onPrepared(MediaPlayer mp) {
    player.start();
  }

  private void killMediaPlayer() {
    if(player!=null) {
        try {
            player.release();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
   }

   @Override
  public void onItemClick(AdapterView<?> parent, View view, int position,   long id) {

    killMediaPlayer();
    play(soundArray[position].toString());

}

@Override
protected void onDestroy() {

    killMediaPlayer();
    super.onDestroy();
}
}

日志:

03-03 16:39:39.716    3612-3612/com.soundbox E/libEGL﹕ call to OpenGL ES API with no current context (logged once per thread)
03-03 16:41:44.408    3612-3624/com.soundbox E/MediaPlayer﹕ error (1, -2147483648)
03-03 16:41:52.205    4458-4458/com.soundbox E/libEGL﹕ call to OpenGL ES API with no current context (logged once per thread)
03-03 16:41:55.328    4458-4470/com.soundbox E/MediaPlayer﹕ error (1, -2147483648)
03-03 16:41:55.348    4458-4458/com.soundbox E/MediaPlayer﹕ start called in state 0
03-03 16:41:55.348    4458-4458/com.soundbox E/MediaPlayer﹕ error (-38, 0)
03-03 16:41:55.358    4458-4458/com.soundbox E/MediaPlayer﹕ Error (-38,0)
03-03 16:42:48.760    5241-5241/com.soundbox E/dalvikvm﹕ >>>>> Normal User
03-03 16:42:48.760    5241-5241/com.soundbox E/dalvikvm﹕ >>>>> com.soundbox [ userId:0 | appId:10205 ]
03-03 16:42:48.991    5241-5241/com.soundbox E/libEGL﹕ call to OpenGL ES API with no current context (logged once per thread)
03-03 16:42:54.536    5241-5253/com.soundbox E/MediaPlayer﹕ error (1, -2147483648)
03-03 16:42:54.536    5241-5241/com.soundbox E/MediaPlayer﹕ Error (1,-2147483648)
03-03 16:43:03.004    5241-5253/com.soundbox E/MediaPlayer﹕ error (1, -2147483648)
03-03 16:43:03.004    5241-5241/com.soundbox E/MediaPlayer﹕ Error (1,-2147483648)
03-03 16:43:03.915    5241-5253/com.soundbox E/MediaPlayer﹕ error (1, -2147483648)
03-03 16:43:03.915    5241-5241/com.soundbox E/MediaPlayer﹕ Error (1,-2147483648)

共有1个答案

吴宝
2023-03-14

这就是我过去从URL播放声音的方式。

public void playSound(String url) {
        MediaPlayer mp = new MediaPlayer();
        try {
            mp.setDataSource(url);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            mp.prepare();
        } catch (IllegalStateException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }
        mp.start();
    }

这将在下载过程中播放声音,就像youtube缓冲一样。

下载完成后,以下功能将播放声音。

public void playSoundAsync(String url) {
        MediaPlayer mp = new MediaPlayer();
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try {
            mp.setDataSource(url);
        } catch (IllegalArgumentException e) {

            e.printStackTrace();
        } catch (SecurityException e) {

            e.printStackTrace();
        } catch (IllegalStateException e) {

            e.printStackTrace();
        } catch (IOException e) {

            e.printStackTrace();
        }
        mp.prepareAsync();
        mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.start();
            }
        });

    }

告诉我是否有用。

 类似资料:
  • RTSP视频可以在Android MediaPlayer中播放吗?如果是,怎么做?我得到的服务器死亡错误(100,0)这是我的编码部分包com的错误。实例样本媒体; 这是我的Logcat结果,我得到的结果是07-09 12:17:05.484:E/MediaPlayer(3990):error(1,-2147483648)07-09 12:17:05.484:W/System。err(3990):

  • 你可以在Android上用MediaPlayer或SoundPool播放声音。当使用MediaPlayer时,我们的两个Android设备播放相同的声音要大得多。在第三个设备上,音量听起来相同。 代码:用MediaPlayer播放mp3声音 欢迎下载测试项目。

  • 在我的应用程序中,我使用下面的代码使用带有Stream_Notification的MediaPlayer播放一个简短的通知声音。问题是,当应用播放通知声音,同时音乐播放器应用在后台播放音乐时,通知声音会中断(暂停)音乐播放。如何才能让自己APP的通知声音与背景音乐播放同步播放?多谢了。

  • 今天,我制作了一个在Android中播放音乐的应用程序。 使用MediaPlayer播放音频文件时失败;它无法播放任何文件音频。此异常引发日志cat,如: E/MediaPlayer:错误(1,-2147483648) 带系统。错误:java。io。IOException:准备失败:状态=0x1 W/System.err:android.media.MediaPlayer.prepare(本机方法

  • 我有一个ImageViews数组,ImageViews将彼此缩放。现在我想在onAnimationStart动画循环播放短丁音(持续时间不到一分钟)。 下面是我如何定义soundPool和load声音的。 我该怎么做???还是有什么问题??? PS1:

  • 我正在尝试设置一个具有声音的媒体播放器,可以根据需要多次播放和重播。但我在第一次播放音频时出现了以下错误: 我调用该剧的代码是: playSong()函数是: 我的声音位于res/raw/a.mp3中 当我按下BTN播放按钮时,我会显示BTN停止按钮,但没有播放任何内容。 我希望让用户玩、停、玩等等。我怎样才能做到这一点? LogCat: