为什么这个Java Android SHOUTcast MediaPlayer应用程序代码不起作用?


    String url = "http://91.121.140.11:8000/";
    MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mediaPlayer.setDataSource(url);
    mediaPlayer.prepare();
    mediaPlayer.start();

我正在使用Android 4.0.3来测试这一点,并在物理设备和模拟器上进行了尝试。应用程序打开,但我听不到任何声音。我认为他们增加了对 SHOUTcast 流的支持。我做错了什么吗?

我遇到了同样的问题,所以我决定简单地在真实设备(4.0.4(上尝试一下。 成功了。 对我来说似乎是一个模拟器问题。

MediaPlayer mp;
@Override
public void onCreate(){
mp = new MediaPlayer();
mp.setOnPreparedListener(this);
}
public void prepareplayer(){
mp.setDataSource(Url);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
Log.d(TAG, "Preparing..");
mp.prepareAsync();
}
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
Log.d(TAG, "Prepared");
mp.play();
}

我建议你

  1. 使用其他网址进行测试
  2. 尝试删除第三行

我正在使用此代码进行喊叫投射流工作正常。只需使用 XML 中的表面视图添加控制器即可。

private String shoutcastsource = "Your http:\223.example.80.4003"
 surfaceView = (SurfaceView)findViewById(R.id.surface);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
surfaceView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(mediaController != null){
            mediaController.show();
        }
        return false;
    }
});
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
Toast.makeText(radiostation.this,
        "Media Controls active lets mash it up", Toast.LENGTH_LONG).show();
mediaPlayer = new MediaPlayer();
mediaPlayer.setDisplay(surfaceHolder);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setOnPreparedListener(this);
try {
    mediaPlayer.setDataSource(shoutcastsource);
    mediaPlayer.prepare();
    mediaController = new MediaController(this);
} catch (IOException e) {
    e.printStackTrace();
    Toast.makeText(radiostation.this,
            "Radio Station off Air or no internet connection!n" + e.toString(),
            Toast.LENGTH_LONG).show();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder,
                       int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer.start();
Toast.makeText(radiostation.this,
        "You are now connected to Ukn-Radio the home of the mash up", Toast.LENGTH_LONG).show();
mediaController.setMediaPlayer(this);
mediaController.setAnchorView(surfaceView);
handler.post(new Runnable() {
    public void run() {
        mediaController.setEnabled(true);
        mediaController.show();
    }
});
}
@Override
public void start() {
mediaPlayer.start();
}
@Override
public void pause() {
mediaPlayer.pause();
}
@Override
public int getDuration() {
return mediaPlayer.getDuration();
}
@Override
public int getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}
@Override
public void seekTo(int pos) {
mediaPlayer.seekTo(pos);
}
@Override
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}
@Override
public int getBufferPercentage() {
return 0;
}
@Override
  public boolean canPause() {
return true;
}
  @Override
public boolean canSeekBackward() {
return false;
}
@Override
public boolean canSeekForward() {
return false;
}
@Override
public int getAudioSessionId() {
return mediaPlayer.getAudioSessionId();
}
@Override
public void onBackPressed() {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer=null;
finish();
}
}

编辑

此外,请确保您允许在 Android 清单中访问互联网:

  <uses-permission android:name="android.permission.INTERNET" />

相关内容

  • 没有找到相关文章

最新更新