【问题标题】:Online radio streaming app for Android适用于 Android 的在线广播流媒体应用
【发布时间】:2011-09-11 03:10:05
【问题描述】:

我正在构建一个 Android 应用程序,它将从一个拉丁国家流式传输多个广播电台,我知道大约有 10 个电台可以在 android 中播放,我从他们那里得到了 URL,并使用本教程让它们实际工作(链接已删除,因为它已死)但我遇到的问题是它播放了几秒钟然后停止它继续加载但不重新启动流媒体,我的问题:

  • 如果有人使用过本教程,可以向我解释如何让它不间断地持续播放。
  • 有没有更简单的方法来传输无线电音频?这个教程似乎有点老了,有没有更新的教程或者更新的代码示例可以学习或使用?
  • 谁能以正确的方式发送给我?

【问题讨论】:

标签: java android eclipse audio media-player


【解决方案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>

【讨论】:

  • 进度条不工作,但它正在流式传输,请您看看可能是什么问题?并感谢这个流媒体教程对我有用。
  • @zvzej : 你能告诉我当数据源未知时我们如何流式传输?我的意思是当我们没有在此行上指定 url player.setDataSource("http://usa8-vn.mixstream.net:8138"); 时,所以在这种情况下如何 v 流广播..如果你知道 nething 那么请分享..
  • @Shruti,您可以在每次从您的网站打开应用程序时询问它。
  • @Coder 您应该改用服务(播放器服务),这将为您提供更多选项,例如暂停流而不停止它,然后您可以使用恢复查看此链接developer.android.com/guide/topics/media/mediaplayer.html 它会帮助您更好地理解它。
  • @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 中添加 Internet 权限。

    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      相关资源
      最近更新 更多