【问题标题】:Why won't this Java Android SHOUTcast MediaPlayer app code work?为什么这个 Java Android SHOUTcast MediaPlayer 应用程序代码不起作用?
【发布时间】:2012-03-03 09:25:23
【问题描述】:
    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 流的支持。我是不是做错了什么?

【问题讨论】:

标签: java android stream media shoutcast


【解决方案1】:

我建议你

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

【讨论】:

    【解决方案2】:
    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();
    }
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我正在将此代码用于喊话演员流工作正常。只需要使用 XML 中的 surfaceview 添加一个控制器。

        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" />
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-18
          • 2011-08-07
          • 2019-12-31
          • 2018-11-05
          • 2012-02-22
          • 2023-03-03
          • 2017-10-02
          • 2016-07-10
          相关资源
          最近更新 更多