Giả sử bạn đã biết loại siêu dữ liệu nào được gửi từ luồng (nếu bạn không sử dụng trình phát đa phương tiện như VLC để xem), trước tiên bạn phải đăng ký thông báo để nhận siêu dữ liệu theo khoảng thời gian và sau đó là một phương pháp để xử lý chúng.
Bắt đầu với các thông báo, chỉ
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(MetadataUpdate:)
name:MPMoviePlayerTimedMetadataUpdatedNotification
object:nil];
sau khi phân bổ MPMoviePlayerController.
Sau đó vào phương pháp MetadataUpdate
- (void)MetadataUpdate:(NSNotification*)notification
{
if ([streamAudioPlayer timedMetadata]!=nil && [[streamAudioPlayer timedMetadata] count] > 0) {
MPTimedMetadata *firstMeta = [[streamAudioPlayer timedMetadata] objectAtIndex:0];
metadataInfo = firstMeta.value;
}
}
nơi streamAudioplayer là MPMoviePlayerController của bạn và metadataInfo một NSString để lưu trữ các giá trị. Ở trên sẽ nhận được thông tin về Nghệ sĩ và Bản nhạc của bài hát hiện đang phát.
Đây là trường hợp siêu dữ liệu chuẩn gửi bởi luồng phát hoặc luồng âm thanh. (không thể nói cho người khác vì tôi chưa thử)
Lưu ý rằng mỗi luồng có thể xử lý và gửi siêu dữ liệu khác nhau. Kể từ [streamAudioPlayer timedMetadata] là một NSArray bạn có thể
NSArray *metaArray = [streamAudioPlayer timedMetadata];
NSLog (@"%i", [metaArray count]); //to see how many elements in the array
MPTimedMetadata *firstMeta = [[streamAudioPlayer timedMetadata] objectAtIndex:0];
Sử dụng thì debug console để hiển thị các nội dung của siêu dữ liệu bằng cách sử dụng các thuộc tính quan trọng, keyspace, dấu thời gian, giá trị.
Tất cả những điều trên chỉ là một ví dụ. Không có cách nào để xử lý siêu dữ liệu. Thông tin chi tiết có thể được tìm thấy tại
https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPTimedMetadata_Class/Reference/Reference.html
cho tham chiếu lớp MPTimedMetadata và từ đó ... mã trên!
Tuyệt vời !!! Cảm ơn! – Genevios
Xin chào ... bốn năm sau, nhưng tôi vẫn có thể hỏi ... có trường hợp nào phương thức 'timedMetadata' trả về một mảng có nhiều hơn một cá thể' MPTimedMetadata' không? Ngay bây giờ tôi đang sử dụng một vòng lặp 'for-in' để nhận tất cả chúng, nhưng tôi tự hỏi nếu điều đó thực sự cần thiết thay vì chỉ sử dụng phần tử đầu tiên của mảng. Cảm ơn! –
Về mặt kỹ thuật ... Có thể. Điều này sẽ yêu cầu phiên bản Icecast được biên dịch tùy chỉnh hoặc bản phát hành Shoucast/Icecast mới thay đổi điều này. Trong trường hợp đặc biệt, nó * có thể * trả về một đối tượng thứ hai với * có thể * địa chỉ web của trạm.Theo kinh nghiệm của tôi, tôi chắc chắn 100% rằng các máy chủ Shoutcast/Icecast tiêu chuẩn sẽ có siêu dữ liệu trên đối tượng đầu tiên (chỉ mục 0). – Pericles