RuntimeException caused by MediaMetadataRetriever.setDataSource(),how to solve it?

0
path = "/mnt/media_rw/336C-7725/test.mp3"

mmr.setDataSource(path);

it's an USB path,I have system uid,when I try to run

I got this error!

I am sure there is no problem with this mp3 file.

it's randomly,it was OK some times,but now setDataSource failed: status = 0x80000000

I tried almost all action that I found on SO,but useless.


My code

public static ArrayList<MusicInfo> mediaItemListToMusicInfo(List<MediaItem> mediaItemList) {
        ArrayList<MusicInfo> musicInfoList = new ArrayList<>();
        int i = 10000;
        MediaMetadataRetriever mmr = new MediaMetadataRetriever();
        for (MediaItem mediaItem : mediaItemList) {
            //todo:空文件的异常处理
            String musicPath = mediaItem.getUrl();
            Log.d("usb mediaItemListToMusicInfo", musicPath);
            MusicInfo musicInfo = new MusicInfo();
            musicInfo.songId = i++;
            musicInfo.size = Long.valueOf(mediaItem.getLength());
            musicInfo.data = musicPath;
            musicInfo.musicName = mediaItem.getName().substring(0, mediaItem.getName().lastIndexOf("."));
            try {
                mmr.setDataSource(musicPath);
                musicInfo.musicName = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE) == null ?
                        mediaItem.getName().substring(0, mediaItem.getName().lastIndexOf("."))
                        : mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
                musicInfo.artist = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST) == null ?
                        "未知" : mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
                musicInfo.albumName = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM) == null ?
                        "未知" : mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);

                musicInfo.duration = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION) == null ?
                        0 : Integer.valueOf(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION));
            } catch (RuntimeException e) {
                e.printStackTrace();
                Log.e("usb mediaItemListToMusicInfo", "解析音频出错!");
            }

            Log.d("usb musicInfo", musicInfo.toString());

            musicInfoList.add(musicInfo);

        }
        mmr.release();
        return musicInfoList;
    }

I saw below log: 11-13 17:56:58.162 11327 11327 D usb mediaItemListToVideo: /mnt/media_rw/C013-AF73/测试用视频/SampleVideo_1280x720_10mb.mkv 11-13 17:56:58.162 11327 11327 E usb mediaItemListToMusicInfo: 解析视频出错! 11-13 17:56:58.163 1749 1749 E MetadataRetrieverClient: retriever is not initialized 11-13 17:56:58.164 1749 1749 E MetadataRetrieverClient: retriever is not initialized

java
android
asked on Stack Overflow Sep 24, 2019 by Rickon Gao • edited Nov 14, 2019 by Rickon Gao

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0