2017-05-18 7 views
0

android 용 RadioPlayerService 라이브러리 사용. .m3u8 링크를 재생할 수 없습니다. 예 : http://airlive.nic.in/hls-live/livepkgr/definst/airmalayalam.m3u8안드로이드가 .m3u8 링크를 재생하지 않는 RadioPlayerService 라이브러리.

+0

스택 오버플로 프로그래밍 질문입니다 :

나는 내 자신의 RadioService이 같은 것을했다. 귀하의 질문은 무엇인가? 귀하의 질문이 "왜 효과가 없습니까?"라고 질문하는 경우 라이브러리 개발자에게 문의하십시오. – CommonsWare

답변

0

언제나 자신의 글을 쓸 수 있습니다. 너무 어렵지 않습니다. 샘플이 오래되었지만 최신 안드로이드 버전을 타겟으로해서는 안됩니다.

import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.media.AudioManager; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnErrorListener; 
import android.media.MediaPlayer.OnInfoListener; 
import android.media.MediaPlayer.OnPreparedListener; 
import android.os.AsyncTask; 
import android.os.Binder; 
import android.os.Handler; 
import android.os.IBinder; 
import android.preference.PreferenceManager; 
import android.support.v4.content.LocalBroadcastManager; 
import android.telephony.PhoneStateListener; 
import android.telephony.TelephonyManager; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.params.HttpConnectionParams; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.IOException; 
import java.util.ArrayList; 

import radioapp.pxl.be.radioapp.model.Track; 
import radioapp.pxl.be.radioapp.playlist.PlaylistDbHelper; 

public class RadioService extends Service implements OnInfoListener, OnErrorListener { 
    public static final String PLAYER_ERROR = "radioapp.pxl.be.radioapp.PLAYER_ERROR"; 
    private final IBinder mBinder = new RadioBinder(); 
    public MediaPlayer mMediaPlayer; 
    private Intent mIntent; 

    private Handler timerHandler = new Handler(); 
    private Runnable timerRunnable = new Runnable() { 
     @Override 
     public void run() { 
      PlaylistUpdaterTask task = new PlaylistUpdaterTask(); 
      task.execute(); 
      timerHandler.postDelayed(this, 60000); 
     } 
    }; 

    private void handleError() { 
     Intent intent = new Intent(PLAYER_ERROR); 
     LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent); 
     stop(); 
    } 

    synchronized public boolean play() { 
     mMediaPlayer = new MediaPlayer(); 
     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     mMediaPlayer.setOnErrorListener(this); 
     mMediaPlayer.setOnInfoListener(this); 
     mMediaPlayer.setOnPreparedListener(new OnPreparedListener() { 
      public void onPrepared(MediaPlayer mp) { 
       mMediaPlayer.start(); 

      } 
     }); 
     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
     String s = preferences.getString("servers", "http://stream.intronic.nl/rgrfm"); 
     try { 
      mMediaPlayer.setDataSource(s); 
     } catch (IllegalArgumentException e) { 
      handleError(); 
     } catch (SecurityException e) { 
      handleError(); 
     } catch (IllegalStateException e) { 
      handleError(); 
     } catch (IOException e) { 
      handleError(); 
     } 
     try { 
      mMediaPlayer.prepareAsync(); 
     } catch (IllegalStateException e) { 
      handleError(); 
     } 
     timerHandler.postDelayed(timerRunnable, 0); 
     return true; 
    } 

    synchronized public void stop() { 
     if (mMediaPlayer != null) { 
      try { 
       mMediaPlayer.stop(); 
      } catch (IllegalStateException ex) { 
       ex.printStackTrace(); 
      } 
      mMediaPlayer.release(); 
      mMediaPlayer = null; 
     } 
     stopForeground(true); 
     timerHandler.removeCallbacks(timerRunnable); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     stopForeground(true); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent arg0) { 
     return mBinder; 
    } 

    @Override 
    public void onCreate() { 
     TelephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); 
     PhoneStateListener mPhoneStateListener = new PhoneStateListener() { 
      public void onCallStateChanged(int state, String incomingNumber) { 
       switch (state) { 
        case TelephonyManager.CALL_STATE_RINGING: 
         if (mMediaPlayer != null) { 
          try { 
           if (mMediaPlayer.isPlaying()) { 
            stop(); 
           } 
          } catch (IllegalStateException e) { 
           stop(); 
          } 
         } 
         break; 
        case TelephonyManager.CALL_STATE_OFFHOOK: 
         break; 
        case TelephonyManager.CALL_STATE_IDLE: 
         break; 
        default: 
         break; 
       } 


      } 
     }; 
     mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 
     mIntent = new Intent(getApplicationContext(), MainActivity.class); 
     mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    } 

    @Override 
    public boolean onError(MediaPlayer arg0, int arg1, int arg2) { 
     handleError(); 
     return true; 
    } 

    @Override 
    public boolean onInfo(MediaPlayer player, int arg1, int arg2) { 
     if (arg1 == 703 && arg2 == 0) { 
      if (mMediaPlayer == null) { 
       play(); 
      } else { 
       if (!mMediaPlayer.isPlaying()) { 
        play(); 
       } else { 
        handleError(); 
       } 
      } 
      return true; 
     } 
     return false; 
    } 

    public class RadioBinder extends Binder { 
     RadioService getService() { 
      return RadioService.this; 
     } 
    } 

    public class PlaylistUpdaterTask extends AsyncTask<Void, ArrayList<Track>, ArrayList<Track>> { 

     @Override 
     protected ArrayList<Track> doInBackground(Void... voids) { 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpGet httpGet = new HttpGet("http://www.rgrfm.be/rgrsite/maxradio/android_json.php"); 
      String jsonResult = null; 
      try { 
       HttpConnectionParams.setConnectionTimeout(httpclient.getParams(), 5000); 
       HttpResponse response = httpclient.execute(httpGet); 
       jsonResult = Conversion.inputStreamToString(response.getEntity().getContent()).toString(); 
      } catch (ClientProtocolException e) { 
       return new ArrayList<Track>(); 
      } catch (IOException e) { 
       return new ArrayList<Track>(); 
      } 
      ArrayList<Track> items = new ArrayList<Track>(); 
      try { 
       JSONObject jsonResponse; 
       if (jsonResult != null) { 
        jsonResponse = new JSONObject(jsonResult); 
        JSONArray jsonMainNode = jsonResponse.optJSONArray("playlist"); 
        for (int i = 0; i < jsonMainNode.length(); i++) { 
         JSONObject jsonChildNode = jsonMainNode.getJSONObject(i); 
         Track item = new Track(); 
         item.setArtist(jsonChildNode.optString("artist")); 
         item.setTitle(jsonChildNode.optString("title")); 
         item.setTime(jsonChildNode.optString("time")); 
         items.add(item); 
        } 
       } else { 
        return new ArrayList<Track>(); 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return items; 
     } 

     @Override 
     protected void onPostExecute(ArrayList<Track> tracks) { 
      if (tracks.size() == 3) { 
       PlaylistDbHelper helper = new PlaylistDbHelper(getApplicationContext()); 
       helper.addPlaylistItem(tracks.get(0)); 
       helper.addPlaylistItem(tracks.get(1)); 
       helper.addPlaylistItem(tracks.get(2)); 
       helper.cleanPlaylist(); 
      } 
     } 
    } 
} 
+0

감사합니다. Jonas. 나는 결과를 시도하고 업데이트 할 것이다. – Thamarai