2016-11-06 6 views
3

У меня есть этот тип потока: http://radiohoryzont.jgora.pl:8050. Проблема заключается в том, что, когда я пытаюсь воспроизвести ее с помощью ExoPlayer, вызывается следующее исключение.ExoPlayer не работает для некоторых потоков

E/ExoPlayerImplInternal: Внутренняя ошибка рендеринга дорожки. com.google.android.exoplayer.ExoPlaybackException: com.google.android.exoplayer.upstream.HttpDataSource $ HttpDataSourceException: Невозможно подключиться к http://radiohoryzont.jgora.pl:8050

Странное дело в том, что на другой мобильный телефон, кажется, (он работает на Android 6, но не на Android 4). Может ли кто-нибудь помочь мне в этом?

Я использую EMAudioPlayer.

mediaPlayer = new EMAudioPlayer(getApplicationContext()); 
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mediaPlayer.setDataSource(getApplicationContext(), myURI); 

Заранее за вашу помощь.

+0

Попробуйте заменить 'Http: //' 'с ледяным: //' в вашей ссылке. Это происходит на странице IssoPlayer Issue на странице [** Github **] (https://github.com/google/ExoPlayer/issues/1003). В любом случае ваша радиосвязь дает MP3-аудио (44.1khz, 128k, stereo и т. Д.), Поэтому нет никаких оснований для того, чтобы устройства Android 4 НЕ могли воспроизводить аудио-часть. –

+0

Также стоит сделать снимок (непроверенный) ... Сделайте базовый код воспроизведения MP3, но вместо некоторого хранилища MP3 URI используйте 'http: //radiohoryzont.jgora.pl: 8050 /;' (обратите внимание, что двоеточие добавлено при завершении URL) , Также попробуйте это с обычным Android SDK (например: 'MediaPlayer' API), который используется для обычного воспроизведения MP3 ... Удачи. –

+0

@ VC. Одна замена на ледяной: // не работает. – Tom11

ответ

4

Я недавно решал ту же проблему и нашел решение.

URL-адрес, который не подходит для вас, это ShoutCast, и они плохо работают с HttpDataSource на Android 4. Однако если вам удастся заменить его OkHttpDataSource, данные будут восстановлены правильно.

Вы используете EMAudioPlayer, в котором используется потоковая музыка (для уровня API 16+) ExoPlayer. Вы можете легко заменить HttpDataSource с OkHttpDataSource:

 

    TrackSelector trackSelector = new DefaultTrackSelector(
     new Handler(), 
     new AdaptiveVideoTrackSelection.Factory(
      new DefaultBandwidthMeter() 
     ) 
    ); 
    mediaPlayer = ExoPlayerFactory.newSimpleInstance(
     getApplicationContext(), 
     trackSelector, 
     new DefaultLoadControl() 
    ); 
    MediaSource source = new ExtractorMediaSource(
     myURI, 
     new OkHttpDataSourceFactory(
      new OkHttpClient(), 
      userAgent, 
      null 
     ), 
     new DefaultExtractorsFactory(), 
     null, 
     null 
    ); 
    mediaPlayer.prepare(source); 
    mediaPlayer.setPlayWhenReady(true); 

+0

Отлично работает, спасибо! – Tom11