当前位置: 首页 > 面试题库 >

适用于Android的在线广播流媒体应用

暨宸
2023-03-14
问题内容

我正在构建一个Android应用,该应用将流传输来自拉丁美洲国家的几个广播电台,我知道可以在android中播放10个广播电台,我从中获得了网址,并使用本教程实际使它们工作(链接已删除,因为它已经死了),但是我遇到的问题是它播放了几秒钟,然后停止播放并继续加载,但没有重新启动流式传输,我的问题是:

  • 如果有人使用过本教程,则可以向我解释如何使它持续不断地播放而不会停止。
  • 有没有更简单的方法来播放广播音频?本教程似乎有点陈旧,是否有新的教程或新的代码示例可供研究或使用?
  • 有人可以给我正确的方式吗?

问题答案:

所以我找到了这个样本,它对我有用,这是如果您有相同的问题:

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


 类似资料:
  • 收听电台广播的流媒体直播,还可以录制广播。 作者说:有问题欢迎和我QQ信箱交流:10040142@qq.com [Code4App.com]

  • 我需要创建一个android应用程序来显示实时电视源。据网关供应商介绍,该应用程序应该可以播放来自DVB网关多播的实时视频流,它可以流式输出UDP或RTP。我在我的电脑上设置了vlc来输出UDP和RTP,并试图让android播放器显示它们,结果手指断了。过了一会儿,我发现android只支持HTTP/S和RTSP实时流。我尝试了所有的FFMPEG解决方案和不同的媒体播放器,但都没有成功。我不是视

  • 我通过spark streaming应用了一个实时异常检测系统。在每个流媒体时间间隔内,如果数据点异常,AWS SNS会发送电子邮件订阅帐户。但是AWS SNS java sdk不喜欢在spark流媒体中工作。下面是错误消息 ERROR StreamingContext:启动上下文时出错,将其标记为停止的java。伊奥。NotSerializableException:已启用数据流检查点,但数据流

  • 我在服务器中创建了一个XML文件。它包含和标记。我获取标记并将它们作为链接显示在中。当用户点击链接时,我想播放电台应用程序中的文件。 下面是我的XML文件: 我不知道下一个活动中的链接怎么玩。 :

  • 我目前正在使用MediaPlayer播放来自web的实时流。问题是MediaPlayer缓冲区很大,它坚持在播放前缓冲10秒左右。Android-ICS 4.0中的MediaPlayer缓冲区大小 所以我的问题是,有没有另外一种不用MediaPlayer播放媒体流(mp3)的方法?也许使用InputStream或甚至第三方媒体播放器不会有相同的缓冲问题?

  • 本文向大家介绍Android多媒体应用使用MediaPlayer播放音频,包括了Android多媒体应用使用MediaPlayer播放音频的使用技巧和注意事项,需要的朋友参考一下 Android提供了对常用音频和视频格式的支持,它所支持的音频格式有MP3(.mp3)、3GPP(.3gp)、Ogg(.ogg)和WAVE(.ave)等,支持的视频格式有3GPP(.3gp)和MPEG-4(.mp4)等。