MediaMetaDataRetriever.setDataSource return null



>我正在尝试开发一个应用程序(广播流(应用程序,我想获取该媒体元数据检索器 API 的广播中播放的歌曲的详细信息,但是当我设置 URL 时,我收到此错误:

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

这是我的代码:

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

最后它适用于'com.vodyasov:amr:0.5'

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

试试这个:

@Override
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
        MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
        if (Build.VERSION.SDK_INT >= 14){
          mmr.setDataSource(stream, new HashMap<String, String>()); 
        }else {
          mmr.setDataSource(stream); 
        }
        String titleName = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE));
        Toast.makeText(MainActivity.this, "Title : "+titleName, Toast.LENGTH_SHORT).show();
    }

如果这不起作用,那么您应该确保您使用的链接实际上返回了一个文件。

尝试在 onCreate 中执行上述操作,问题可能与您的 AsyncTask 有关。

相关内容

  • 没有找到相关文章

最新更新