2016-07-05 86 views
0

我卡在這個問題:Android的音頻流服務:MediaPlayer的錯誤-1004

我是很新的Android和我目前正試圖開發一個簡單的服務,以流從URL數據源音頻,一個網絡電臺。
這項服務,我曾經發現一個MediaPlayer的最簡單的實現方式的一個,是這樣的:

MediaPlayer mediaPlayer = new MediaPlayer(); 
try { 
    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    mediaPlayer.setDataSource(url); 
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
     } 
    }); 
    mediaPlayer.prepareAsync(); 
} 
catch (Exception ex) { 
    ex.printStackTrace(); 
} 

在我使用的測試網址,更具體http://icecast.omroep.nl/radio1-bb-mp3,一切運行良好的開端。
今天我給出了權威URL:http://eu3.radioboss.fm:8037/live,MediaPlayer開始給我MEDIA_ERROR_IO(-1004)。

我讀過這可能是由不受支持的媒體格式引起的,但我不知道如何獲得流的編碼。
真正的問題是我完全無法控制最終的URL。

有人可以建議我如何使明確的音頻源工作?

回答

1

最後,事實證明,最簡單的解決方案是使用ExoPlayer

正如開發者指南所說,MediaCodecVideoTrackRenderer和MediaCodecAudioTrackRenderer「可以處理給定Android設備支持的所有音頻和視頻格式」。

這就是我如何使用ExoPlayer初始化我的網絡電臺:

private static final int BUFFER_SEGMENT_SIZE = 64 * 1024; 
private static final int BUFFER_SEGMENT_COUNT = 256; 

private void initMediaPlayer() { 
    // We create an ExoPlayer with argument 1 because 
    // we are going to use exclusively an audio renderer 
    ExoPlayer player = ExoPlayer.Factory.newInstance(1); 
    // String with the url of the radio we want to play 
    String url = "http://eu3.radioboss.fm:8037/live"; 
    Uri radioUri = Uri.parse(url); 
    // Settings for our ExoPlayer 
    Allocator allocator = new DefaultAllocator(BUFFER_SEGMENT_SIZE); 
    String userAgent = Util.getUserAgent(this, "AudioStreamService"); 
    DataSource dataSource = new DefaultUriDataSource(this, null, userAgent); 
    ExtractorSampleSource sampleSource = new ExtractorSampleSource(
     radioUri, 
     dataSource, 
     allocator, 
     BUFFER_SEGMENT_SIZE * BUFFER_SEGMENT_COUNT 
    ); 
    this.audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource, MediaCodecSelector.DEFAULT); 
    // Prepare ExoPlayer 
    player.prepare(this.audioRenderer); 
} 

希望這會幫助別人。