2016-07-05 13 views
0

私はこの問題にこだわっている:私はAndroidのに非常に新しいですAndroidのオーディオストリーミングサービス:MediaPlayerのエラー-1004

と私は現在、URLデータソースからのオーディオストリーミングするシンプルなサービスを開発しようとしています、ウェブラジオ私は、テストのURLを使用し、より具体的http://icecast.omroep.nl/radio1-bb-mp3、すべてがうまく働い初め

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(); 
} 


このサービスは、私が今までに見つけたのMediaPlayerの最も簡単な実装の一つ、のようなものを持っています。
今日私は最終的なURL:http://eu3.radioboss.fm:8037/liveを受け取り、MediaPlayerは私にMEDIA_ERROR_IO(-1004)を与え始めました。

これは、サポートされていないメディアフォーマットが原因である可能性があるとお伝えしましたが、ストリームのエンコーディングを取得する方法がわかりません。
本当の問題は、私が決定的なURLを全く制御していないことです。

誰かが私にどのように決定的なオーディオソースの作業をさせることができますか?

答えて

1

最後に、最も簡単な解決策はExoPlayerを使用することでした。

Developer Guideによると、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); 
} 

はこれが誰かを助けることを願っています。