从 URL 流式传输和下载音频

Posted

技术标签:

【中文标题】从 URL 流式传输和下载音频【英文标题】:Stream and download audio from URL 【发布时间】:2013-09-21 06:04:45 【问题描述】:

我正在开发搜索歌曲并能够播放和下载音乐/歌曲的应用程序。我使用了这个网址 http://tinysong.com/Phdj ,这是重定向到音乐网页并在那里播放歌曲。我用下面的代码来播放歌曲。

    //play music
    MediaPlayer mMediaPlayer = new MediaPlayer();
    mMediaPlayer.setAudiostreamType(AudioManager.STREAM_MUSIC);
    try
         mMediaPlayer.setDataSource("http://tinysong.com/Phdj");
            mMediaPlayer.prepareAsync();
                catch(IOException e)
        e.printStackTrace();
        
        catch (IllegalArgumentException e)
                e.printStackTrace();    
                catch (IllegalStateException e)
                e.printStackTrace();
            mMediaPlayer.setOnPreparedListener(new   MediaPlayer.OnPreparedListener() 
                            

                                @Override
                                public void onPrepared(MediaPlayer mp) 
                                
                                    mp.start();
                                
                            );

错误: 09-21 11:26:49.674: I/MediaPlayer(6735): setLPAflag() in 09-21 11:26:49.674: I/MediaPlayer(6735): mContext 为空,无法获取MirrorDisplayStatus!!! 09-21 11:26:49.674: I/MediaPlayer(6735): setLPAflag() out 09-21 11:26:58.693: E/MediaPlayer(6735): 错误 (1, -2147483648) 09-21 11:26:58.693: E/MediaPlayer(6735): 错误 (1,-2147483648)

androidMedia Library 是否只能播放 .mp3 格式?我可以从上面的 Url 播放音乐吗?我该怎么做?

【问题讨论】:

【参考方案1】:

你还没有通过setDataSource()中的上下文

试试这个

String path="http://tinysong.com/Phdj";

    Uri myUri = Uri.parse(path);

            MediaPlayer mp = new MediaPlayer();
            try 

                mp.setDataSource(this, myUri);
                mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mp.setOnPreparedListener(new OnPreparedListener() 

                    @Override
                    public void onPrepared(MediaPlayer mp) 

                        mp.start();
                        // TODO Auto-generated method stub

                    
                );
                mp.prepareAsync();
             catch (IllegalArgumentException e) 
                // TODO Auto-generated catch block
                e.printStackTrace();
             catch (SecurityException e) 
                // TODO Auto-generated catch block
                e.printStackTrace();
             catch (IllegalStateException e) 
                // TODO Auto-generated catch block
                e.printStackTrace();
             catch (IOException e) 
                // TODO Auto-generated catch block
                e.printStackTrace();
            

【讨论】:

收到此错误:09-21 17:35:50.315: E/MediaPlayer(30342): java.io.FileNotFoundException: 没有内容提供者: tinysong.com/Phdj 09-21 17:35:58.293: E/MediaPlayer(30342): 错误 (1, -2147483648) 09-21 17:35:58.333: E/MediaPlayer(30342): 错误 (1,-2147483648) 您是否创建了对 MediaPlayer 的引用? 抱歉,我是媒体播放器的新手...媒体播放器的引用是什么? 09-21 17:35:50.315: E/MediaPlayer(30342): java.io.FileNotFoundException: 没有内容提供者: tinysong.com/Phdj 09-21 17:35:58.293: E/ MediaPlayer(30342): 错误 (1, -2147483648) 09-21 17:35:58.333: E/MediaPlayer(30342): 错误 (1,-2147483648) 媒体播放器是否只支持.mp3文件?你能检查那个网址并确认我这个网址适合媒体播放器吗?

以上是关于从 URL 流式传输和下载音频的主要内容,如果未能解决你的问题,请参考以下文章

使用url从python流传输youtube音频而无需下载python

从 URL 实时流式传输音频的 RadioKit 替代方案

从 Java Swing App 中的 URL 流式传输音频

如何在具有单独位置 url 和资源 url 的 swift 中从服务器实时流式传输音频?

您可以从 discord.js 资源中的 URL 流式传输音频吗

从 Google App Engine 流式传输音频