如何在安卓手机上播放在线广播。

15

我正在开发一款Android应用程序,其中我需要实现在线广播流媒体播放。我已经查阅了MediaPlayer类的文档,但我认为它并没有提供任何在线广播流媒体播放的方法。如果有人知道如何实现,请帮忙指导一下。

谢谢。 Vikram

3个回答

7

Vikram,

您应该能够使用MediaPlayer来实现这一点;然而,根据您的格式,可能会比较困难。例如,如果您试图播放使用.pls或.m3u的在线广播流,则必须解析该文件并提取要使用的真实URL。

除此之外,您应该能够使用MediaPlayer的create方法和URL开始流媒体播放。请记住,如果流的URL重定向(很可能会发生),则可能需要解析URL。一个简单的方法是使用HttpURLConnection打开连接,然后connect(),然后getURL()。您可能需要一个字符串url,因此在从getURL()的结果中调用toExternalForm()。

此外,如果通过URL使用MediaPlayer无法正常工作,则可能需要想出自己的缓冲机制以从服务器获取数据。在这种情况下,您可以尝试使用此教程:http://blog.pocketjourney.com/2008/04/04/tutorial-custom-media-streaming-for-androids-mediaplayer/


1
@brack,您提供的链接无法使用,能否请提供其他链接?谢谢。 - user5515672
回答中的blog.pocketjourney.com链接已失效。 - Pang
请尝试此链接:https://pocketjourney.wordpress.com/2008/04/04/tutorial-custom-media-streaming-for-androids-mediaplayer/ - Nusatad

5

根据我所了解的,您只需要这样做:

MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(streamingURL);
mediaPlayer.prepare();
mediaPlayer.start();

我认为这可以获得基本功能,但我自己还没有测试过。


1
使用内置的MediaPlayer是在安卓设备上播放无线电频道最简单的方法。不过,当数据源来自于网络时,prepare() 方法执行起来需要很长时间,应该使用 prepareAsync() 来避免阻塞用户界面。
    player = new MediaPlayer();
    player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {
                player.start();
            }
        }
    });

    try {
        player.setDataSource(currentChannelUrl);
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
    } catch (IOException e) {
        Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
        e.printStackTrace();
        return;
    }
    player.prepareAsync();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接