4

如何使用 MediaPlayer 流式传输在线 URL?

4

5 回答 5

6

基本上,如果您使用的是 Android MediaPlayer 类,则需要执行以下操作:

MediaPlayer mediaPlayer = new MediaPlayer();

mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
    public boolean onError(MediaPlayer mp, int what, int extra) {
        mp.reset();
        return false;
    }
});

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    public void onPrepared(MediaPlayer mp) {
        mp.start();
    }
});

try {
    mediaPlayer.setDataSource("http://someurl");
    mediaPlayer.prepareAsync();
} catch (IllegalArgumentException e) {
} catch (IllegalStateException e) {
} catch (IOException e) {
}

请记住,Android MediaPlayer 类只会播放支持的格式:http: //developer.android.com/guide/appendix/media-formats.html

于 2012-12-03T04:47:21.103 回答
3

在 API 28 中为我工作

   MediaPlayer mediaPlayer = new MediaPlayer();
            mediaPlayer.setDataSource("http://209.188.21.202:8016/stream");
            mediaPlayer.prepare();
            mediaPlayer.start();

如果使用 INTERNET,请记住向清单添加权限

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

还要小心使用明文交通

从 Android 9.0(API 级别 28)开始,默认情况下禁用明文支持。

就我而言,我在清单中添加 --> android:usesCleartextTraffic="true"

参考 -->

Android 8:不允许明文 HTTP 流量

于 2018-12-21T17:37:05.880 回答
1

你可以使用这个:

    MediaPlayer mediaPlayer = MediaPlayer.create(this, Uri.parse("YOUR URL HERE"));
    mediaPlayer.start();
于 2011-11-18T06:59:54.577 回答
1
public class MainActivity extends ActionBarActivity {
    String vidAddress ="your http link";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        VideoView vidView = (VideoView)findViewById(R.id.myVideo);
        Uri vidUri = Uri.parse(vidAddress);
        vidView.setVideoURI(vidUri);
        MediaController vidControl = new MediaController(this);
        vidControl.setAnchorView(vidView);
        vidView.setMediaController(vidControl);
        vidView.start();


    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
于 2015-07-14T10:25:05.593 回答
0

如果您从远程 URL 流式传输音频,则 MediaPlayer 是错误的。它有时有效,但主要用于远程挂起。

试过下面挂起

   mediaPlayer = MediaPlayer.create(this, Uri.parse("YOUR URL HERE"));
        mediaPlayer.start();

还尝试了 mediaPlayer.prepareAsync(); 并实现onprepared listener。不起作用..使用的设备是三星galaxy mini

一直在尝试手动读取 URL 内容并使用缓冲内容更新 MediaPlayer 数据源。工作得很好,但还没有弄清楚如何切换 URL 等。

这里的示例适用于 VideoPlayer,但对于音频播放器也应该是相同的概念

http://davanum.wordpress.com/2007/12/29/android-videomusic-player-sample-from-local-disk-as-well-as-remote-urls/

编辑

啊刚刚发现这个http://launch-code.blogspot.co.uk/2012/01/android-play-audio-asyncplayer.html
似乎很好地包装了对 MediaPlayer 的调用:http: //www.netmite.com/ android/mydroid/frameworks/base/media/java/android/media/AsyncPlayer.java

于 2012-11-29T13:34:56.347 回答