web-dev-qa-db-ja.com

Androidのオンラインラジオストリーミングアプリ

私はAndroidラテン国から複数のラジオ局をストリーミングするアプリを作成しています。Androidで再生できることがわかっている10局があり、それらからURLを取得して実際に作成しました彼らはこのチュートリアルを使用して動作します(リンクは削除されていますが、死んでいるため)

  • 誰かがこのチュートリアルで作業したことがあれば、停止せずに絶えずストリーミングする方法を説明できます。
  • ラジオオーディオをストリーミングする簡単な方法はありますか?このチュートリアルはやや古いように見えますが、新しいチュートリアルや、学習または使用する新しいコードサンプルはありますか?
  • 誰かが私に正しい方法を送ることができますか?
37
zvzej

だから私はこのサンプルを見つけましたが、それは私にとってはうまくいきます、あなたが同じ問題を抱えているなら、ここにあります:

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();
        }
    }
}

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>

および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>
61
zvzej

さて、プログレスバーが表示されると期待はずれになります。これはストリームであり、デフォルトでは終了する時間がありません。 URLについては、shoutcast2/icecastサーバーのマウントポイントとshoutcast1の/を使用できます。

4
César Araújo

OnResumeまたはwrvrであなたが欲しい!このコードを貼り付けます。

    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();
        }
    });

Manifest.xmlで、インターネットアクセス許可を追加します。

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