#java #android #eclipse #audio #media-player
#java #Android #eclipse #Аудио #Медиаплеер
Вопрос:
Я создаю приложение для Android, которое будет транслировать несколько радиостанций из латинской страны, есть около 10 станций, которые, как я знаю, можно воспроизводить на Android, я получил от них URL-адреса и фактически заставил их работать с помощью этого руководства (ссылка удалена, потому что она мертва), но проблема у меня в том, что она воспроизводится в течение нескольких секунд, а затем останавливается, она продолжает загружаться, но не перезапускает потоковую передачу, мои вопросы:
- Если кто-то работал с этим руководством, может объяснить мне, как заставить его транслироваться постоянно без остановки.
- Есть ли более простой способ транслировать аудио радио? это руководство кажется довольно старым, есть ли более новое руководство или более новый пример кода для изучения или использования?
- Кто-нибудь может подсказать мне правильный путь?
Комментарии:
1. проверьте эту ссылку: github.com/abdullahfarwees/Android-Online-Radio-app
Ответ №1:
Итак, я нашел этот пример, и он работает для меня, вот он, если у вас такая же проблема:
в 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>
Комментарии:
1. индикатор выполнения не работает, но он транслируется, не могли бы вы, пожалуйста, взглянуть, в чем может быть проблема? и спасибо за это руководство по потоковой передаче, оно работает у меня.
2. @zvzej: не могли бы вы, пожалуйста, сказать мне, как мы можем транслировать, когда источник данных неизвестен?? я имею в виду, когда у нас нет URL для указания в этой строке
player.setDataSource("http://usa8-vn.mixstream.net:8138");
, так что в этом случае, как v может транслировать радио .. если вы знаете, что такое nething, пожалуйста, поделитесь..3. @Shruti, ну, ты мог бы запрашивать это каждый раз, когда открываешь приложение со своего веб-сайта.
4. @Coder вместо этого вам следует использовать сервис (Player Service), это даст вам больше возможностей, например, приостановить трансляцию, а не останавливать ее, затем вы можете использовать resume посмотрите по этой ссылке developer.android.com/guide/topics/media/mediaplayer.html это поможет вам лучше понять это.
5. @zvzej Спасибо. я сделал это, и ваше предложение мне помогло.
Ответ №2:
Что ж, если вы ожидаете появления индикатора выполнения, вы получите разочарование, это поток, который по умолчанию не имеет времени для завершения, бесконечен. Что касается URL-адреса, вы можете использовать точку монтирования на сервере shoutcast2 / icecast и / в сервере shoutcast1.
Ответ №3:
В 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>