2011-12-15 19 views
9

Tôi đang viết một công cụ để kiểm tra các tệp MP4 (còn gọi là định dạng tệp phương tiện cơ sở ISO, ISO 14496 phần 12).MP4/ISO 14496-12: Làm thế nào để bạn tìm thấy các đơn vị truy cập video và âm thanh?

Tôi có thể giải thích phần lớn các hộp được liệt kê trong ISO 14496-12 được tạo bởi OSS. Tôi chưa tìm ra cách trích xuất các đơn vị truy cập video cá nhân và các đơn vị truy cập âm thanh.

Tôi khá tự tin rằng video H.264 trong hộp 'mdat' không có tiền tố ISO 14496-10 Phụ lục B "0x000001" trên các đơn vị NAL.

Tôi đã thử nghiệm với diễn giải SampleToChunkBox ('stsc'), SampleSizeBox ('stsz') và ChunkOffsetBox ('stco') để định vị các mẫu media bên trong 'mdat', nhưng dường như tôi không tìm thấy mà tôi có thể giải thích như là một nal_unit() (ISO 14496-10 phần 7.3.1) hoặc một slice_header() (phần 7.3.3).

Tôi cũng tò mò nơi SPS (7.3.2.1) và PPS (7.3.2.2) hoạt động. Tôi nghi ngờ rằng họ sống ở đâu đó bên trong hộp 'trak', nhưng tôi đã không tìm ra đâu.

Con trỏ tới các ứng dụng hoặc thư viện có tiện ích hạn chế. Tôi đang viết một ứng dụng, và mã nguồn bên ngoài khó hiểu hơn (bị vướng bận bởi khung riêng của nó) khi so sánh với một giải thích toán học.

+0

sử dụng isoviewer cung cấp tại đây: https://code.google.com/p/mp4parser/ –

Trả lời

5

Sau khi dành một vài giờ xúc tác thông qua các câu hỏi khác trên stackoverflow, cuối cùng tôi tình cờ gặp phản ứng ngắn gọn đã đưa tôi đến một câu trả lời toàn diện hơn.

Parsing H264 in mdat MP4

Các đóng gói của H.264 trong các tập tin media ISO được bao phủ bởi ISO 14.496 phần 15. Các SPS và PPS được cất giấu trong 'AVCC' hộp ghi nhận trong phần 5.3.4.1.2 và 5.2.4.1.1. Hộp này cũng cho biết bạn sẽ mất bao lâu các trường độ dài khi diễn giải các mẫu.

Các mẫu được ghi trong phần 5.2.3 và bao gồm một loạt các đơn vị N2 NAL được đặt trước theo độ dài. Một ví dụ MP4 từ ffmpeg có một slice mỗi mẫu, nhưng mẫu đầu tiên bao gồm SEI chứa văn bản ghi lại phiên bản của codec H.264 và thông số mã hóa .

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