2013-03-20 32 views
5

Tôi đang gặp khó khăn khi hiển thị bản nhạc hiện tại phát từ nguồn phát trực tuyến. Sử dụng lớp MediaMetaDataRetriever trả về một NULL, có nghĩa là nó không thành công. Tôi đã viết một phương pháp đơn giản nhưng bây giờ tôi đang nghĩ đến điều này chỉ hoạt động trên các tệp phương tiện như MP3, WMA, AVI, v.v.MediaMetadataRetriever trên nguồn phát trực tuyến

public void metaData(){ 
     mmr.setDataSource(urlStation); 
     String metaD = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST); 
     Toast.makeText(MainActivity.this, "Artist = " + metaD, Toast.LENGTH_LONG).show(); 

Bất kỳ đề xuất tốt và dễ dàng nào sẽ được đánh giá cao. Cảm ơn bạn đã dành thời gian!

Trả lời

11

MediaMetadataRetriever không hoạt động với URL trên một số phiên bản Android nhất định, xem số this. Tôi đã tạo FFmpegMediaMetadataRetriever làm giải pháp thay thế, tôi khuyên bạn nên dùng thử.

+0

Cảm ơn William vì câu trả lời của bạn. Điều này sẽ giúp giải quyết vấn đề của tôi. – Marquis

+0

Chỉ dành cho các tệp phương tiện chứ không phải cho nguồn phát trực tuyến. – jul

+0

William Seemann Có phải nó đang hoạt động trên các video youtube .. tôi thử nhưng tôi nhận siêu dữ liệu không thể phát hiện lỗi ... – arul

2

Theo cùng issue được liệt kê trong câu trả lời khác, bạn chỉ cần sử dụng phương pháp setDataSource với những lập luận này:

setDataSource(String uri, Map<String, String> headers) 

Vì vậy, ví dụ,

public void getStreamMetaData(String url){ 
    MediaMetadataRetriever mmr = new MediaMetadataRetriever(); 
    mmr.setDataSource(url, new HashMap<String, String>()); 
    //now do whatever you want 

} 

Tôi đã thử nghiệm nó với một streaming mp4 và nó làm việc cho tôi. Cũng chỉ là một lưu ý, bạn sẽ muốn sử dụng phương thức setDataSource trong một AsyncTask hoặc trên một luồng khác, vì có thể mất một lúc để chạy theo các tài liệu.

+1

Đối với tôi trong trường hợp đó tất cả các chuỗi trả về là null ... nhưng vlc được thông tin tốt. –

Các vấn đề liên quan