
TIÊU CHUẨN QUỐC GIA
TCVN 11795-14:2017
ISO/IEC 14496-14:2013 WITH AMENDMENT 1:2010
CÔNG NGHỆ THÔNG TIN - MÃ HÓA ĐỐI TƯỢNG HÌNH ẢNH, ÂM THANH - PHẦN 14: ĐỊNH DẠNG
TỆP MP4
Information technology - Coding of audio-visual objects - Part 14: MP4 file format
Lời nói đầu
TCVN 11795-14:2017 hoàn toàn tương đương với ISO/IEC 14496-14:2003
TCVN 11795-14:2017 do Học Viện Công nghệ Bưu chính Viễn thông biên soạn, Bộ Thông tin và
Truyền thông đề nghị, Tổng cục Tiêu chuẩn Đo lường Chất lượng thẩm định, Bộ Khoa học và Công
nghệ công bố.
Lời giới thiệu
0.1 Nguồn gốc
Tiêu chuẩn này định nghĩa tệp MP4, một ví dụ của định dạng tệp truyền thông theo chuẩn ISO
[ISO/IEC 14496-12 và ISO/IEC 15444-12].
Tính chất chung của định dạng tệp truyền thông theo chuẩn ISO được thực hiện đầy đủ bởi MP4. Các
phiên trình diễn MPEG-4 có tính động cao, và cấu trúc hạ tầng - định khung bộ mô tả đối tượng, có vai
trò quản lý các đối tượng và các dòng trong một phiên trình diễn. Một bộ mô tả đối tượng ban đầu đóng
vai trò là điểm khởi đầu cho định khung này. Trong các chế độ sử dụng được chỉ ra trong tệp truyền
thông theo chuẩn ISO, sẽ thường có bộ mô tả đối tượng ban đầu như được thể hiện trong sơ đồ dưới
đây.
0.2 Sự hoán đổi
Sơ đồ dưới đây đưa ra một ví dụ của một tệp hoán đổi đơn giản, có chứa hai dòng.
Hình 1 - Tệp hoán đổi đơn giản
CHÚ THÍCH:
• BIFS: định dạng nhị phân cho phân cảnh (Binary Format for Scene);
• IOD: bộ mô tả đối tượng ban đầu (Initial Object Descriptor);
• OD: bộ mô tả đối tượng (Object Descriptor).
0.3 Tạo lập nội dung
Sơ đồ sau thể hiện một bộ các tệp được sử dụng trong quá trình tạo lập nội dung.

Hình 2 - Tệp tạo lập nội dung
0.4 Phiên trình diễn tạo dòng
Sơ đồ dưới đây cho thấy một phiên trình diễn được chuẩn bị để tạo dòng qua một giao thức ghép
kênh, chỉ yêu cầu một rãnh ghi gợi ý.
Hình 3 - Phiên trình diễn gợi ý cho tạo dòng
CÔNG NGHỆ THÔNG TIN - MÃ HÓA ĐỐI TƯỢNG HÌNH ẢNH, ÂM THANH - PHẦN 14: ĐỊNH DẠNG
TỆP MP4
Information technology - Coding of audio-visual objects - Part 14: MP4 file format
1 Phạm vi áp dụng
Tiêu chuẩn này định nghĩa định dạng tệp MP4, một định dạng của tệp truyền thông theo chuẩn ISO.
2 Tài liệu viện dẫn
Các tài liệu viện dẫn sau đây là cần thiết để áp dụng tiêu chuẩn này. Đối với các tài liệu viện dẫn ghi
năm công bố thì áp dụng phiên bản được nêu. Đối với các tài liệu viện dẫn không ghi năm công bố thì
áp dụng phiên bản mới nhất (bao gồm cả các sửa đổi, bổ sung).
ISO/IEC 14496-1:2010, Công nghệ thông tin - Mã hóa đối tượng hình ảnh, âm thanh - Phần 1: Các hệ
thống (Information technology - Coding of audio-visual objects - Part 1: Systems).
ISO/IEC 14496-12: Công nghệ thông tin - Mã hóa đối tượng hình ảnh, âm thanh - Phần 12: Định dạng
tệp truyền thông cơ sở chuẩn ISO (về mặt kỹ thuật giống với ISO/IEC 15444-12) (Information
technology - Coding of audio-visual objects - Part 12: ISO base media file format) (technically identical
to ISO/IEC 15444-12).
3 Lưu trữ MPEG-4

3.1 Rãnh ghi dòng cơ sở
3.1.1 Dữ liệu dòng cơ sở
Để duy trì các mục tiêu không phụ thuộc vào giao thức tạo dòng, dữ liệu truyền thông được lưu trữ
trong định dạng “tự nhiên” nhất của chúng, và không bị phân mảnh. Điều này cho phép thao tác nội bộ
của dữ liệu truyền thông được dễ dàng. Do đó, dữ liệu truyền thông được lưu trữ như các đơn vị truy
cập, một chuỗi các byte liên tiếp cho mỗi đơn vị truy cập (một đơn vị truy cập được định nghĩa là một
“mẫu” cho một dòng truyền thông MPEG-4). Điều này tạo thuận lợi cho quá trình phân mảnh được sử
dụng trong các rãnh ghi gợi ý. Định dạng tệp có thể mô tả và sử dụng dữ liệu truyền thông được lưu
trữ trong các tệp khác, tuy nhiên sự hạn chế này vẫn được áp dụng. Vì vậy nếu một tệp được dùng có
chứa dữ liệu truyền thông “trước phân mảnh” (ví dụ một dòng FlexMux trong một đĩa cứng), dữ liệu
truyền thông sẽ cần được sao chép để định dạng lại các đơn vị truy cập, nhằm nhập các dữ liệu vào
định dạng tệp này.
Điều này đúng cho tất cả các loại dòng dữ liệu trong tiêu chuẩn này, bao gồm các dòng “thông tin bổ
trợ” như miêu tả đối tượng và tham chiếu thời gian. Hệ quả tích cực của việc này là định dạng tệp xử lý
các dòng như nhau, nhưng nhược điểm thì lại tạo ra các liên kết chéo “bên trong” giữa các dòng. Điều
này nghĩa là việc thêm và gỡ bỏ các dòng từ một phiên trình diễn sẽ liên quan đến việc thêm vào hoặc
xóa bỏ các rãnh ghi dữ liệu và dữ liệu truyền thông liên kết của chính nó. Không chỉ các dòng phải
được đặt vào hoặc gỡ bỏ khỏi khung hình mà dòng miêu tả đối tượng cũng cần được cập nhật.
Đối với mỗi rãnh ghi dữ liệu, toàn bộ bộ mô tả dòng cơ sở ES-descriptor được lưu trữ như là một mô tả
hoặc các mô tả mẫu . SLConfigDescriptor cho rãnh ghi truyền thông được lưu trữ trong tệp bằng cách
sử dụng giá trị mặc định (được định trước = 2), ngoại trừ khi bộ mô tả dòng cơ sở tham chiếu tới một
dòng qua một địa chỉ URL, tức là, dòng được tham chiếu đến nằm ngoài phạm vi của tệp MP4. Trong
trường hợp này, SLConfigDescriptor không bị ràng buộc giá trị được định trước.
Trong một dòng bít được truyền tải, các đơn vị truy cập trong gói SL được truyền đi gói trong các byte.
Điều đó có nghĩa là các rãnh ghi gợi ý sẽ tạo các tiêu đề gói SL bằng cách sử dụng thông tin trong các
rãnh ghi truyền thông, và các rãnh ghi gợi ý sẽ tham chiếu đến các đơn vị truy cập từ các rãnh ghi
truyền thông. Việc đưa tiêu đề vào trong quá trình gợi ý là có thể thực hiện mà không làm dịch bit, vì
mỗi gói SL và đơn vị truy cập chứa tương ứng sẽ cùng bắt đầu trên các biên byte.
3.1.2 Bộ mô tả dòng cơ sở
ESDescriptor cho mỗi dòng trong phạm vi của tệp MP4 mô tả trong tiêu chuẩn này được lưu trữ trong
mô tả mẫu, các trường, và các cấu trúc bao gồm được giới hạn như sau:
• ES_ID - thiết lập là 0 để lưu trữ; khi tạo thành một dòng, 16 bit sau của định danh rãnh TrackID được
sử dụng.
• streamDependenceFlag - thiết lập là 0 để lưu trữ; nếu một phụ thuộc tồn tại, nó được chỉ định sử
dụng một rãnh ghi tham chiếu loại ‘dpnd’.
• URLflag - giữ nguyên, tức là đặt là false, giống như một dòng trong tệp, chứ không phải từ xa.
• SLConfigDescriptor - được xác định trước là loại 2.
• OCRStreamFlag - thiết lập là false trong tệp.
Các ESDescriptor dành cho một dòng được tham chiếu qua một ES URL được lưu trữ trong các mô tả
mẫu và trong các trường và bao gồm các cấu trúc được giới hạn như sau.
• ES_ID - thiết lập là 0 để lưu trữ; khi tạo thành một dòng, 16 bit thấp của định danh rãnh TrackID được
sử dụng.
• streamDependenceFlag - thiết lập là 0 để lưu trữ; nếu một phụ thuộc tồn tại, nó được chỉ định sử
dụng một rãnh ghi tham chiếu loại ‘dpnd’.
• URLflag - giữ nguyên, tức là đặt là true, giống như một dòng không nằm trong tệp.
• SLConfigDescriptor - giữ nguyên.
• OCRStreamFlag - thiết lập là false trong tệp.
Cần lưu ý rằng QoSDescriptor có thể phải viết lại khi truyền dẫn vì nó chứa thông tin về kích thước
PDU vv.
3.1.3 Bộ mô tả đối tượng

Bộ mô tả đối tượng ban đầu và các dòng bộ mô tả đối tượng được xử lý đặc biệt trong định dạng tệp.
Các bộ mô tả đối tượng chứa các bộ mô tả ES, do đó nó chứa những thông tin cụ thể về dòng. Ngoài
ra, để tạo điều kiện chỉnh sửa, các thông tin về rãnh ghi được lưu giữ dưới dạng một ESDescriptor
trong mô tả mẫu của rãnh ghi đó. ESDescriptor phải được lấy từ đó từ đó, viết lại cho phù hợp, và
được truyền dẫn như là một phần của dòng OD khi phiên trình diễn được tạo dòng.
Kết quả là, các bộ mô tả ES không được lưu trữ trong các rãnh ghi OD hoặc bộ mô tả đối tượng ban
đầu. Thay vào đó, bộ mô tả đối tượng ban đầu có một mô tả chỉ được sử dụng trong tệp, chứa duy
nhất ID rãnh ghi của dòng cơ sở. Khi được sử dụng, một ESDescriptor đã được viết lại phù hợp từ
rãnh ghi tham chiếu sẽ thay thế bộ mô tả này. Tương tự như vậy, các rãnh ghi OD được liên kết đến
các rãnh ghi ES bằng các tham chiếu rãnh ghi. Trong trường hợp một bộ mô tả ES sẽ được sử dụng
trong rãnh ghi OD thì một bộ mô tả khác được sử dụng, nó chỉ diễn ra lại trong tệp. Nó bao gồm các
chỉ số trong thiết lập của các tham chiếu rãnh ghi mpod mà rãnh ghi OD này sở hữu. Một ESDescriptor
được viết lại phù hợp sẽ thay thế nó bởi các gợi ý của rãnh ghi này.
Các ES_ID_Inc được sử dụng trong khuôn bộ mô tả đối tượng:
Các ES_ID_Ref được sử dụng trong dòng OD:
CHÚ THÍCH: Các giá trị thẻ trên được quy định tại Bảng 1 của 7.2.2.1 và Bảng 2 của 7.2.2.3.2 trong
tiêu chuẩn ISO/IEC 14496-1:2010, các giá trị thực tế cần được tham chiếu từ các bảng này.
Một gợi ý có thể phải gửi nhiều sự kiện OD hơn so với thực tế đã xảy ra trong rãnh ghi OD: ví dụ, nếu
ES_description thay đổi tại thời điểm khi không có sự kiện nào trong rãnh ghi OD. Nói chung, bất kỳ sự
kiện OD nào đã được xác thực rõ ràng vào rãnh ghi OD cũng phải được gửi cùng với những phần cần
thiết để chỉ rõ những thay đổi khác. Bộ mô tả ES đã được gửi trong rãnh ghi OD sẽ được lấy từ phần
mô tả của mẫu tạm thời kế tiếp trong rãnh ghi ES (trong thời gian giải mã).
3.2 Định danh rãnh ghi
Các định danh rãnh ghi được sử dụng trong một tệp MP4 là duy nhất trong tệp đó; không có bất kỳ hai
rãnh ghi nào có thể sử dụng cùng một định danh.
Mỗi dòng cơ sở trong các tệp được lưu giữ như một rãnh ghi truyền thông. Đối với một dòng cơ sở, hai
byte sau của bốn byte track_ID phải được thiết lập là định danh dòng cơ sở (ES_ID); hai byte trước
của track_ID thiết lập là không. Các rãnh ghi gợi ý có thể sử dụng các giá trị định danh rãnh ghi trong
cùng một dải, nếu khoảng số này là đủ (thường là như vậy). Tuy nhiên, các định danh rãnh ghi gợi ý
cũng có thể sử dụng các giá trị lớn hơn giá trị của định danh rãnh ghi, vì định danh của chúng không
được ánh xạ đến định danh dòng cơ sở. Như vậy các phiên trình diễn rất lớn có thể sử dụng toàn bộ
không gian 16-bit cho các định danh dòng cơ sở.
Giá trị nhận dạng rãnh ghi kế tiếp, chứa trong next_track_ID của khung tiêu đề hình MovieHeaderBox,
theo quy định của tiêu chuẩn ISO định dạng truyền thông cơ sở, thường mang một giá trị lớn hơn giá
trị định danh rãnh ghi lớn nhất trong tệp. Việc này cho phép tạo ra một định danh rãnh ghi rất dễ dàng
trong mọi tình huống. Tuy nhiên, nếu giá trị này lớn hơn hoặc bằng 65535, và nếu có thêm một rãnh
ghi truyền thông mới, thì việc kiểm tra phải được thực hiện trong tệp cho định danh rãnh ghi tự do. Nếu
mọi giá trị đều là 1 (32-bit maxint) thì cần thực hiện việc kiểm tra này cho tất cả các phần thêm vào.
Nếu ta muốn thêm vào một rãnh ghi chứa một định danh rãnh ghi đã biết (định danh dòng cơ sở), thì
tệp phải được kiểm tra để đảm bảo rằng không có xung đột. Lưu ý rằng, có thể đánh số lại các rãnh ghi
gợi ý khá dễ dàng nhưng cần lưu tâm các rãnh ghi truyền thông hơn bởi vì có thể có nhiều tham chiếu

đến ES_ID (ID rãnh ghi) trong các rãnh ghi khác.
Nếu các rãnh ghi gợi ý có các ID rãnh ghi nằm ngoài phạm vi cho phép đối với các rãnh ghi dòng cơ
sở, thì ID rãnh ghi kế tiếp sẽ ghi lại ID rãnh ghi gợi ý có sẵn tiếp theo. Vì giá trị này lớn hơn 65535, nên
sau đó cần phải kiểm tra để tìm ra một ID rãnh ghi dòng cơ sở hợp lệ.
Nếu hai phiên trình diễn được hợp nhất thì có thể xuất hiện xung đột giữa các ID rãnh ghi của chúng.
Trong trường hợp này, một hoặc nhiều rãnh ghi sẽ phải đánh số lại. Có hai thao tác cần thực hiện như
sau:
• Thay đổi ID của chính rãnh ghi đó, điều này là khá dễ dàng (ID rãnh ghi nằm trong tiêu đề rãnh ghi).
• Thay đổi con trỏ đến rãnh ghi cần đánh số lại.
Các con trỏ có thể chỉ xuất hiện trong cấu trúc định dạng tệp đó. Định dạng tệp chỉ sử dụng các ID rãnh
ghi thông qua các tham chiếu rãnh ghi, các tham chiếu rãnh ghi này có thể dễ dàng tìm thấy và sửa
đổi. ID rãnh ghi trở thành ES_ID trong các dữ liệu MPEG-4, và ES_ID xuất hiện trong dòng OD. Vì tất
cả các con trỏ đến ES_ID trong dòng OD được thay thế bằng các phương tiện tham chiếu rãnh ghi,
nên không cần kiểm tra dòng OD để tham chiếu chéo trong dòng MPEG-4.
Trong các định dạng tệp, lệnh ES_DescriptorRemove và bộ mô tả IPI_DescrPointer được chuyển đổi
thành ES_DescrRemoveRef và IPI_DescrPointerRef, do:
• Thay đổi giá trị của thẻ tương ứng về ES_DescrRemoveRefTag hoặc IPI_DescrPointerRefTag ;
• Thay đổi ES_ID bất kỳ về chỉ số tham chiếu rãnh ghi phù hợp (sử dụng các tham chiếu tương ứng
của loại mpod và ipir - xem 5.2).
Khi thực hiện hoặc đưa ra gợi ý, các thay đổi chỉ số rãnh ghi tham chiếu và giá trị thẻ sẽ đảo ngược.
3.3 Đồng bộ các dòng
Trong trường hợp không có công bố rõ ràng về điều ngược lại thì các rãnh ghi (các dòng) xuất phát từ
cùng một tệp phải được hiển thị đồng bộ. Điều này có nghĩa rằng, các gợi ý và/hoặc các máy chủ hoặc
là phải chọn một trong các dòng làm nguồn OCR cho những dòng khác, hoặc phải thêm một dòng
OCR để liên kết tất cả các dòng với nó. Các tham chiếu rãnh ghi loại 'đồng bộ' có thể được sử dụng
trong tệp để loại bỏ các thao tác mặc định. Trong MPEG-4, OCRStreamFlag và OCR_ES_ID trong
ESDescriptor chi phối các mối quan hệ đồng bộ. Việc ánh xạ cấu trúc MP4 vào các trường này phải
tuân theo các quy tắc sau:
• MPEG-4 ESDescriptor, được lưu trữ trong tệp, thường chứa OCRStreamFlag thiết lập là FALSE, và
không có OCR_ES_ID. Nếu một OCR_ES_ID được thiết lập, nó sẽ bị bỏ qua.
• Nếu một rãnh ghi (dòng) chứa một tham chiếu rãnh ghi loại 'đồng bộ' có giá trị là 0, thì bộ gợi ý hoặc
máy chủ sẽ thiết lập các trường OCRStreamFlag trong MPEG-4 ESDescriptor là FALSE và không chèn
thêm bất kỳ trường OCR_ES_ID nào. Điều này có nghĩa rằng dòng này không đồng bộ với dòng khác
nữa, nhưng các dòng khác vẫn có thể được đồng bộ với nó.
• Nếu một rãnh ghi (dòng) chứa một tham chiếu rãnh ghi loại 'đồng bộ' có giá trị là 0, thì bộ gợi ý hoặc
máy chủ sẽ thiết lập các trường OCRStreamFlag trong MPEG-4 ESDescriptor là TRUE và chèn thêm
một trường OCR_ES_ID có cùng giá trị chứa trong rãnh tham chiếu ‘đồng bộ’. Điều này có nghĩa rằng
dòng này sẽ đồng bộ với các dòng chứa trong OCR_ES_ID. Các dòng khác cũng có thể được đồng bộ
trong cùng một dòng, hiển nhiên hoặc ngầm định.
• Nếu một rãnh ghi (dòng) không chứa một tham chiếu rãnh ghi loại 'đồng bộ', thì các trường hợp mặc
định sẽ được áp dụng. Các bộ gợi ý hoặc máy chủ sẽ thiết lập các trường OCRStreamFlag trong
MPEG-4 ESDescriptor là TRUE và sẽ chèn một trường OCR_ES_ID có giá trị được lựa chọn dựa trên
các quy tắc dưới đây. Điều này có nghĩa rằng, dòng này được đồng bộ với các dòng ghi trong
OCR_ES_ID. Các quy tắc để chọn OCR_ES_ID như sau:
o Nếu không có rãnh ghi (dòng) trong tệp có chứa một tham chiếu rãnh ghi loại 'đồng bộ', thì bộ gợi ý
chọn một TrackID và sử dụng giá trị đó cho các trường OCR_ES_ID của tất cả các ESDescriptors.
Trường hợp ngoại lệ có thể xảy ra ở ESDescriptor của dòng tương ứng với TrackID đó, ở đó
OCRStreamRag có thể được thiết lập thành FALSE.
o Nếu một hoặc nhiều rãnh ghi (dòng) trong tệp chứa một tham chiếu rãnh ghi loại ‘đồng bộ’, và tất cả
các tham chiếu rãnh ghi như vậy đều biểu thị một TrackID đơn, thì bộ gợi ý sẽ sử dụng TrackID đó.
Trong một tham chiếu rãnh ghi loại 'đồng bộ', giá trị 0 sẽ tương đương với TrackID của chính rãnh ghi

