Tôi đang viết thư viện C++ để giải mã và mã hóa âm thanh giữa các định dạng/codec khác nhau. Tôi có một thói quen để nhanh chóng phát hiện các định dạng trước khi tải thư viện codec yêu cầu.Phát hiện nếu tập tin là MP3
Đối với các tệp WAV, người dùng có thể dễ dàng tìm kiếm các giá trị ASCII "RIFF" và "WAVE" ở đầu tệp. Điều tương tự cũng áp dụng cho FLAC, chúng ta chỉ cần đọc trong 4 byte đầu tiên, sẽ là "fLaC".
Nhưng làm cách nào để nhanh chóng phát hiện xem tệp có phải là MP3 không? Tôi không thể dựa vào phần mở rộng tập tin. Tôi cũng không thể giải mã khung MP3 đầu tiên, vì có thể có thêm dữ liệu ở đầu tệp (ví dụ: ID3, ảnh bìa, v.v.).
Chuỗi byte bạn đề xuất ('I'' '' '') là một phần của tiêu đề cho thẻ siêu dữ liệu ID3 (v2) nhưng không phải tất cả các tệp MP3 sẽ có thẻ ID3v2 (và thẻ ID3v2.4 có thể là ở cuối tệp thay vì bắt đầu). – Deltics