Онлайн потоковое приложение для Android - PullRequest
37 голосов
/ 08 июня 2011

Я создаю приложение для Android, которое будет транслировать несколько радиостанций из Латинской страны, есть примерно 10 станций, которые, как я знаю, можно воспроизводить в Android, я получил от них URL-адреса и фактически заставил их работать с помощью этого урока (ссылка удалена, потому что она мертва), но у меня проблема в том, что она воспроизводится несколько секунд, а затем останавливает, продолжает загружать, но не возобновляет потоковую передачу, мои вопросы:

  • Если кто-то работал сэтот урок может объяснить мне, как сделать так, чтобы он постоянно транслировался без остановки.этот учебник кажется старым, есть ли новый учебник или более новый пример кода для изучения или использования?
  • Может кто-нибудь прислать мне правильный путь?

Ответы [ 3 ]

61 голосов
/ 11 июня 2011

Итак, я нашел этот образец, и он работает для меня, вот, если у вас есть такая же проблема:

в 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>

и манифест андроида:

<?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>

4 голосов
/ 13 апреля 2013

Ну, если вы ожидаете индикатор выполнения, вы разочаровываетесь, это поток, который по умолчанию не имеет времени до конца, бесконечен. Что касается URL, вы можете использовать точку монтирования в shoutcast2 / icecast server и / в shoutcast1.

1 голос
/ 05 октября 2016

В 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>
...