Skip to content
Advertisement

MediaMetaDataRetriever.setDataSource return null

I’m trying to develop an application (Radio Stream) app, I want to get the details of the song that is playing on the radio for that MediaMetadataRetriever API but when i set my URL i get this error :

java.lang.IllegalArgumentException at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:71) at maa.myapp.MainActivity$PlayerTask.onPostExecute(MainActivity.java:447) at maa.myapp.MainActivity$PlayerTask.onPostExecute(MainActivity.java:419)

this my code :

MediaPlayer mediaPlayer;
    String stream = "https://plaza.one/mp3";
    boolean prepared =false;
    boolean started =false ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mediaPlayer = new MediaPlayer();
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
            AudioAttributes attribs = new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_MEDIA).setContentType(AudioAttributes.CONTENT_TYPE_MUSIC).build();
            mediaPlayer.setAudioAttributes(attribs);

        } else {
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        }


        new PlayerTask().execute(stream);
}
    public class PlayerTask extends AsyncTask<String,Void,Boolean> {
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loadingRL.setVisibility(View.VISIBLE);
        }
        @Override
        protected Boolean doInBackground(String... strings) {
            try {
                mediaPlayer.reset();
                mediaPlayer.setDataSource(strings[0]);
                prepared=true;
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return prepared;
        }
        @Override
        protected void onPostExecute(Boolean aBoolean) {
            super.onPostExecute(aBoolean);

            /*get details : */
            MediaMetadataRetriever mMediaMetaDataRetriever = new MediaMetadataRetriever();
            mMediaMetaDataRetriever.setDataSource(stream,new HashMap<String, String>());
            String titleName = mMediaMetaDataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
            Toast.makeText(MainActivity.this, "Title : "+titleName, Toast.LENGTH_SHORT).show();
        }
    }
}

Advertisement

Answer

finally it work with ‘com.vodyasov:amr:0.5’ library

Uri uri = Uri.parse(stream);
            OnNewMetadataListener listener = new OnNewMetadataListener() {
                @Override
                public void onNewHeaders(String stringUri, List<String> name, List<String> desc, List<String> br, List<String> genre, List<String> info) {}
                @Override
                public void onNewStreamTitle(String stringUri, String streamTitle) {
                    songinfo.setText("Song Name : "+streamTitle);
                }
            };
            AudiostreamMetadataManager.getInstance()
                    .setUri(uri)
                    .setOnNewMetadataListener(listener)
                    .setUserAgent(UserAgent.WINDOWS_MEDIA_PLAYER)
                    .start();
Advertisement