java - 如何使用 Java 从 url 流式传输音乐 - Android

标签 java android ios audio stream

我对 Android 开发和一般 Android 设备完全陌生,所以我不知道这里的情况如何。

我想制作一个应用程序,可以从我的网址流式传输音乐,并在最小化应用程序后仍然播放歌曲。

我搜索了我的问题,但很多答案都是针对 mp3 歌曲或其他类型的,但我的网址来自现场广播,所以它不仅仅是一首歌。

我找到的对我的问题有好处的答案之一是 this并使用此代码:

Uri myUri = Uri.parse("your url here");
Intent intent = new Intent(android.content.Intent.ACTION_VIEW); 
intent.setDataAndType(myUri, "audio/*"); 
startActivity(intent);

这提示我选择音乐播放器。

有什么办法只需按下“播放”按钮即可听到音乐吗?

在我的 iOS 应用程序中,我使用此代码,无需外部播放器即可随时启动和停止流媒体音乐:

func prepareToPlay() {
        
        let url = URL(string: "myUrl")
        
        playerItem = AVPlayerItem(url: url!)
        
        player = AVPlayer(playerItem: playerItem)
          
        player?.play()
}

提前致谢

编辑

在评论和回答中建议后,我尝试用 MPlayer 播放它,我创建了一个函数,当我点击按钮时调用它,如下所示:

public void playM() {
    String url = "http://android.programmerguru.com/wp-content/uploads/2013/04/hosannatelugu.mp3";

    mPlayer = new MediaPlayer();
    mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    try {
        mPlayer.setDataSource(url);
    } catch (IllegalArgumentException e) {
        Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
    } catch (SecurityException e) {
        Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
    } catch (IllegalStateException e) {
        Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
    } catch (IOException e) {
        e.printStackTrace();
    }
    try {
        mPlayer.prepare();
    } catch (IllegalStateException e) {
        Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
    } catch (IOException e) {
        Toast.makeText(getApplicationContext(), "You might not set the URI correctly!", Toast.LENGTH_LONG).show();
    }
    mPlayer.start();
}

但是我收到错误(第四条消息),并且我在日志中看到了以下内容:

Unable to create media player

prepareAsync called in state 1, mPlayer(0x0)

start called in state 1, mPlayer(0x0)

error (-38, 0)

最佳答案

大多数情况下,带有 ACTION 标志的 Intent 旨在打开另一个应用程序。因为你不需要它。您想要自己的定制播放器。所以Android有一个Media Player类专门针对这种场景。

创建它的实例并传递您的流 URL。现在,设置数据源并调用prepare(),然后在onBtnClickListener()中通过调用mp.start()

启动音乐
Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();


P.S: 捕获所有异常并确保 list 文件中的权限

关于java - 如何使用 Java 从 url 流式传输音乐 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46777649/

相关文章:

java - 使用 httpUrlConnection 向服务器发送数据

java - 运行时的 json 解析错误

java - 从 JSON 或 XML 提要导入数据并在 Android 中创建列表

ios - 为什么 SKStoreReviewController 不允许我提交评论?

ios - map 上 2 个给定点之间的 MKDirections 请求

java - 加密程序更改字符串索引

java - 上传图片时出现未知错误 :class anonymous class derived from asynchttpResponsehandler must either be declared abstract

java - 如何使用 Apache POI 在 Word 文档中定义窄边距?

安卓 : Stack Overflow Like Tag Input

ios - 如何一次在屏幕上显示多个 UITableViewController?我的 table 只是显示为空白