web-dev-qa-db-fra.com

Application de streaming de radio en ligne pour Android

Je construis une application Android qui diffusera plusieurs stations de radio d'un pays latin. Il y a environ 10 stations qui, je le sais, peuvent être lues sur Android. parce qu’il est mort) mais le problème que j’ai, c’est que la lecture dure plusieurs secondes, puis elle s’arrête de continuer à se charger mais ne redémarre pas la lecture en continu.

  • Si quelqu'un a travaillé avec ce tutoriel, il peut m'expliquer comment le diffuser en continu sans interruption.
  • Existe-t-il un moyen plus simple de diffuser de l'audio radio? ce didacticiel semble un peu ancien, existe-t-il un didacticiel plus récent ou un exemple de code plus récent à étudier ou à utiliser?
  • Quelqu'un peut-il m'envoyer le bon chemin?
35
zvzej

J'ai donc trouvé cet échantillon et ça marche pour moi, le voici si vous avez le même problème:

dans myMain.Java

import Android.app.Activity;
import Android.os.Bundle;

import Java.io.IOException;

import Android.media.MediaPlayer;
import Android.media.MediaPlayer.OnBufferingUpdateListener;
import Android.media.MediaPlayer.OnPreparedListener;
import Android.util.Log;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.widget.Button;
import Android.widget.ProgressBar;

public class myMain extends Activity implements OnClickListener {

    private ProgressBar playSeekBar;

    private Button buttonPlay;

    private Button buttonStopPlay;

    private MediaPlayer player;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        initializeUIElements();

        initializeMediaPlayer();
    }

    private void initializeUIElements() {

        playSeekBar = (ProgressBar) findViewById(R.id.progressBar1);
        playSeekBar.setMax(100);
        playSeekBar.setVisibility(View.INVISIBLE);

        buttonPlay = (Button) findViewById(R.id.buttonPlay);
        buttonPlay.setOnClickListener(this);

        buttonStopPlay = (Button) findViewById(R.id.buttonStopPlay);
        buttonStopPlay.setEnabled(false);
        buttonStopPlay.setOnClickListener(this);

    }

    public void onClick(View v) {
        if (v == buttonPlay) {
            startPlaying();
        } else if (v == buttonStopPlay) {
            stopPlaying();
        }
    }

    private void startPlaying() {
        buttonStopPlay.setEnabled(true);
        buttonPlay.setEnabled(false);

        playSeekBar.setVisibility(View.VISIBLE);

        player.prepareAsync();

        player.setOnPreparedListener(new OnPreparedListener() {

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

    }

    private void stopPlaying() {
        if (player.isPlaying()) {
            player.stop();
            player.release();
            initializeMediaPlayer();
        }

        buttonPlay.setEnabled(true);
        buttonStopPlay.setEnabled(false);
        playSeekBar.setVisibility(View.INVISIBLE);
    }

    private void initializeMediaPlayer() {
        player = new MediaPlayer();
        try {
            player.setDataSource("http://usa8-vn.mixstream.net:8138");
        } 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);
            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (player.isPlaying()) {
            player.stop();
        }
    }
}

dans le code XML (main.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical" Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<TextView Android:layout_width="fill_parent"
        Android:layout_height="wrap_content" Android:text="Source: (Radio La Chevere)"
        Android:layout_marginTop="10dip" Android:gravity="center" />
<ProgressBar Android:id="@+id/progressBar1"
        Android:indeterminateOnly="false" Android:progressDrawable="@Android:drawable/progress_horizontal"
        Android:indeterminateDrawable="@Android:drawable/progress_indeterminate_horizontal"
        Android:minHeight="20dip" Android:maxHeight="20dip"
        Android:layout_width="fill_parent" Android:layout_height="wrap_content"
        Android:layout_marginLeft="20dip" Android:layout_marginRight="20dip"
        Android:layout_marginTop="10dip"></ProgressBar>
<LinearLayout Android:id="@+id/linearLayout1"
        Android:layout_height="wrap_content" Android:layout_width="match_parent"
        Android:layout_marginTop="20dip" Android:gravity="center">
        <Button Android:text="Play" Android:id="@+id/buttonPlay"
                Android:layout_width="wrap_content" Android:layout_height="wrap_content"></Button>
        <Button Android:text="Stop" Android:id="@+id/buttonStopPlay"
                Android:layout_width="wrap_content" Android:layout_height="wrap_content"></Button>
</LinearLayout>
</LinearLayout>

et le manifeste Android:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
  package="package.your.RadioStream"
  Android:versionCode="1"
  Android:versionName="1.0">
<uses-sdk Android:minSdkVersion="8" />
<uses-permission Android:name="Android.permission.INTERNET"></uses-permission>

<application Android:icon="@drawable/icon" Android:label="@string/app_name">
    <activity Android:name=".myMain"
              Android:label="@string/app_name">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

</application>

60
zvzej

Eh bien, si vous vous attendez à une barre de progression, vous êtes déçus, c'est un flux qui, par défaut, n'a pas le temps de se terminer est sans fin. À propos de l'URL, vous pouvez utiliser le point de montage dans le serveur shoutcast2/icecast et le/dans le shoutcast1. 

3
César Araújo

Dans onResume ou WRVR vous voulez! Collez ce code.

    String url = "http://server2.crearradio.com:8371"; // your URL here
    final MediaPlayer mediaPlayer = new MediaPlayer();
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {
        mediaPlayer.setDataSource(url);
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        mediaPlayer.prepare(); // might take long! (for buffering, etc)
    } catch (IOException e) {
        e.printStackTrace();
    }
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {

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

Dans le fichier manifest.xml, ajoutez l'autorisation Internet.

<uses-permission Android:name="Android.permission.INTERNET"></uses-permission>
0
Mario Alzate