Ogg

**Ogg** là định dạng chứa miễn phí, mở được duy trì bởi Xiph.Org Foundation.  Những người tạo ra định dạng Ogg nói rằng nó không bị hạn chế bởi các bằng sáng chế phần mềm và được thiết kế để cung cấp cho truyền phát và xử lý hiệu quả đa phương tiện kỹ thuật số chất lượng cao.  Tên của nó bắt nguồn từ "ogging", biệt ngữ từ trò chơi máy tính *Netrek*.

Định dạng Ogg có thể ghép một số luồng độc lập cho âm thanh, video, văn bản (như phụ đề) và siêu dữ liệu.

Trong framework đa phương tiện Ogg, Theora cung cấp lớp video bị mất.  Lớp âm thanh được cung cấp phổ biến nhất bởi định dạng Vorbis định hướng âm nhạc hoặc người kế nhiệm Opus.  Các định dạng nén âm thanh không mất dữ liệu bao gồm FLAC và OggPCM.

Trước năm 2007, phần mở rộng tên file.ogg đã được sử dụng cho tất cả các file có nội dung sử dụng định dạng bộ chứa Ogg.  Từ năm 2007, Xiph.Org Foundation khuyên rằng.ogg chỉ được sử dụng cho các file âm thanh Ogg Vorbis.  Xiph.Org Foundation đã quyết định tạo ra một bộ phần mở rộng file và loại phương tiện mới để mô tả các loại nội dung khác nhau, chẳng hạn như.oga cho các file chỉ âm thanh,.ogv cho video có hoặc không có âm thanh (bao gồm Theora) và.ogx cho Ogg đa kênh.

Kể từ ngày 7 tháng 11 năm 2017, phiên bản hiện tại triển khai tham chiếu của Xiph.Org Foundation là libogg 1.3.3.  Một phiên bản khác, libogg2, đã được phát triển, nhưng đang chờ viết lại vào năm 2018.  Cả hai thư viện phần mềm đều là phần mềm tự do, được phát hành theo Giấy phép BSD mới.  Việc thực hiện tham chiếu Ogg đã được tách ra khỏi Vorbis vào ngày 2 tháng 9 năm 2000.

Do định dạng này là tự do và việc triển khai tham chiếu của nó không bị hạn chế liên quan đến bản quyền, các codec khác nhau của Ogg đã được tích hợp vào một số trình phát phương tiện miễn phí và độc quyền khác nhau, cả thương mại và phi thương mại, cũng như trình phát phương tiện di động và Máy thu GPS từ các nhà sản xuất khác nhau.

## Đặt tên
Đôi khi người ta cho rằng cái tên "Ogg" xuất phát từ nhân vật Nanny Ogg trong tiểu thuyết *Discworld* của Terry Pratchett, nhưng các nhà phát triển Ogg nói rằng điều đó không đúng.  Ogg có nguồn gốc từ "ogging", biệt ngữ từ trò chơi máy tính *Netrek*, có nghĩa là làm một cái gì đó mạnh mẽ, có thể mà không xem xét đến việc tiêu *tốn* tài nguyên trong tương lai.  Khi mới thành lập, dự án Ogg được cho là có phần tham vọng với sức mạnh của phần cứng PC thời đó.  Tuy nhiên, để trích dẫn cùng một tài liệu tham khảo: "Vorbis, mặt khác được đặt theo tên của nhân vật Terry Pratchett từ cuốn sách *Các vị thần nhỏ* ".

Dự án Ogg Vorbis bắt đầu vào năm 1993.  Ban đầu nó được đặt tên là "Squish" nhưng tên đó đã được đăng ký nhãn hiệu, vì vậy dự án đã trải qua một sự thay đổi tên.  Tên mới, "OggSquish", được sử dụng cho đến năm 2001 khi nó được đổi lại thành "Ogg".  Ogg từ đó đã đề cập đến định dạng chứa, hiện là một phần của dự án đa phương tiện Xiph.org lớn hơn.  Ngày nay, "Squish" (hiện được gọi là "Vorbis") đề cập đến một định dạng mã hóa âm thanh cụ thể thường được sử dụng với định dạng chứa Ogg.

## Định dạng file
Định dạng dòng bit "Ogg", dẫn đầu bởi Xiph.  Org Foundation, đã được tạo ra như là một khuôn khổ của một sáng kiến lớn hơn nhằm phát triển một bộ các thành phần để mã hóa và giải mã nội dung đa phương tiện, có sẵn miễn phí và có thể tự do triển khai lại trong phần mềm.

Định dạng bao gồm các khối dữ liệu được gọi là "trang Ogg".  Mỗi trang bắt đầu bằng các ký tự, "OggS", để xác định file là định dạng Ogg.

Một "số sê-ri" và "số trang" trong tiêu đề trang xác định mỗi trang là một phần của một loạt các trang tạo thành một dòng bit.  Nhiều luồng bit có thể được ghép trong file trong đó các trang từ mỗi luồng bit được sắp xếp theo thời gian tìm kiếm của dữ liệu được chứa.  Dòng bit cũng có thể được thêm vào các file hiện có, một quá trình được gọi là "chaining", để làm cho dòng bit được giải mã theo trình tự.

Một thư viện được cấp phép BSD, được gọi là "libvorbis", có sẵn để mã hóa và giải mã dữ liệu từ các luồng "Vorbis".  Việc triển khai Ogg độc lập được sử dụng trong một số dự án như RealPlayer và một bộ các bộ lọc DirectShow.

Mogg, "Multi-Track-Single-Logical-Stream Ogg-Vorbis", là định dạng file Ogg đa kênh hoặc đa track.

## Cấu trúc trang
Sau đây là cách bố trí trường của tiêu đề trang Ogg: 

; Capture pattern - 32 bit 
: Mẫu chụp hoặc mã đồng bộ hóa là một số ma thuật được sử dụng để đảm bảo đồng bộ hóa khi phân tích file Ogg.  Mỗi trang bắt đầu với bốn chuỗi ký tự ASCII, "OggS".  Điều này hỗ trợ đồng bộ hóa trình phân tích cú pháp trong trường hợp dữ liệu bị mất hoặc bị hỏng và là kiểm tra độ tỉnh táo trước khi bắt đầu phân tích cấu trúc trang.

; Version - 8 bit 
: Trường này cho biết phiên bản của định dạng dòng bit Ogg, để cho phép mở rộng trong tương lai.  Nó hiện đang được ủy quyền là 0.

; Header type - 8 bit 
: Đây là trường cờ 8 bit, cho biết loại trang tiếp theo. 
: 

; Granule position - 64 bit 
: Granule position là điểm đánh dấu thời gian trong các file Ogg.  Nó là một giá trị trừu tượng, có ý nghĩa được xác định bởi codec.  Ví dụ, nó có thể là số lượng mẫu, số khung hoặc sơ đồ phức tạp hơn.

; Bitstream serial number - 32 bit 
: Trường này là một số sê-ri xác định một trang thuộc về dòng bit logic cụ thể.  Mỗi dòng bit logic trong một file có một giá trị duy nhất và trường này cho phép các cài đặt phân phối các trang đến bộ giải mã thích hợp.  Trong file Vorbis và Theora điển hình, một luồng là âm thanh (Vorbis) và luồng còn lại là video (Theora)

; Page sequence number - 32 bit 
: Trường này là một trường tăng đơn điệu cho mỗi dòng bit logic.  Trang đầu tiên là 0, trang thứ hai, v.v.  Điều này cho phép thực hiện để phát hiện khi dữ liệu bị mất.

; Checksum - 32 bit 
: Trường này cung cấp checksum CRC32 của dữ liệu trong toàn bộ trang (bao gồm tiêu đề trang, được tính toán với trường tổng kiểm tra được đặt thành 0).  Điều này cho phép xác minh rằng dữ liệu đã không bị hỏng kể từ khi nó được tạo.  Các trang không kiểm tra được nên được loại bỏ.  Tổng kiểm tra được tạo bằng giá trị đa thức 0x04C11DB7.

; Page segments - 8 bit 
: Trường này cho biết số lượng phân đoạn tồn tại trong trang này.  Nó cũng cho biết có bao nhiêu byte trong bảng phân đoạn theo trường này.  Có thể có tối đa 255 phân đoạn trong bất kỳ một trang nào.

; Segment table 
: Segment table (Bảng phân đoạn) là một vectơ của các giá trị 8 bit, mỗi giá trị biểu thị độ dài của phân đoạn tương ứng trong thân trang.  Số lượng phân đoạn được xác định từ trường Phân đoạn trang trước đó.  Mỗi phân đoạn có độ dài từ 0 đến 255 byte.

Các phân đoạn cung cấp một cách để nhóm các phân đoạn thành các gói, là các đơn vị dữ liệu có ý nghĩa cho bộ giải mã.  Khi độ dài của đoạn được chỉ định là 255, điều này cho biết rằng đoạn sau sẽ được nối với đoạn này và là một phần của cùng một gói.  Khi độ dài của phân đoạn là 0-254, điều này cho thấy phân khúc này là phân khúc cuối cùng trong gói này.  Trong đó độ dài của gói là bội số của 255, đoạn cuối cùng là độ dài 0.

Trường hợp gói cuối cùng tiếp tục ở trang tiếp theo, giá trị phân đoạn cuối cùng là 255 và cờ tiếp tục được đặt ở trang sau để chỉ ra rằng bắt đầu của trang mới là phần tiếp theo của trang cuối.

## Metadata
VorbisVer là định dạng Siêu dữ liệu cấp cơ sở ban đầu được tạo để sử dụng với Ogg Vorbis.  Nó đã được áp dụng trong các thông số kỹ thuật của đóng gói Ogg cho Xiph khác.  Codec Org bao gồm Theora, Speex và FLAC.  VorbisVer là cơ chế đơn giản nhất và được hỗ trợ rộng rãi nhất để lưu trữ siêu dữ liệu với Xiph.  Codec Org.

Các cơ chế hiện có và đề xuất khác là:

* FLAC metadata blocks
* Ogg Skeleton
* OggKate
* Continuous_Media_Markup_Language (deprecated)
* M3F  (unused draft)
* XMLEmbedding (unused draft)

## Lịch sử

Dự án Ogg bắt đầu với gói nén âm thanh đơn giản như một phần của dự án lớn hơn vào năm 1993.  Phần mềm ban đầu được đặt tên là *Squish* nhưng do nhãn hiệu thương mại hiện có, nó đã được đổi tên thành *OggSquish*.  Tên này sau đó đã được sử dụng cho toàn bộ dự án Ogg.  Vào năm 1997, Xiphophorus OggSquish được mô tả là "một nỗ lực vừa tạo ra định dạng âm thanh nén linh hoạt cho các ứng dụng âm thanh hiện đại cũng như cung cấp định dạng âm thanh đầu tiên phổ biến trên mọi nền tảng máy tính hiện đại".  OggSquish là vào năm 2000 được gọi là "một nhóm của một số dự án xử lý tín hiệu và đa phương tiện có liên quan".  Năm 2000, hai dự án đã được phát triển tích cực để phát hành theo kế hoạch: định dạng Ogg Vorbis và libvorbis - triển khai tham chiếu của Vorbis.  Nghiên cứu cũng bao gồm công việc về video trong tương lai và mã hóa âm thanh lossless.  Năm 2001, OggSquish được đổi tên thành *Ogg* và nó được mô tả là "chiếc ô cho một nhóm các dự án xử lý tín hiệu và đa phương tiện liên quan".  Ogg đã đại diện cho định dạng file, như là một phần của dự án đa phương tiện Xiph.org lớn hơn.  Squish trở thành tên của một trong những codec Ogg.  Năm 2009, Ogg được mô tả là "định dạng chứa đa phương tiện và định dạng luồng và file gốc cho các codec đa phương tiện Xiph.org".

Việc thực hiện tham chiếu Ogg đã được tách ra khỏi Vorbis vào ngày 2 tháng 9 năm 2000.

Vào tháng 5 năm 2003, hai RFC Internet đã được xuất bản liên quan đến định dạng.  Dòng bit Ogg được định nghĩa trong RFC 3533 (được phân loại là 'thông tin') và loại nội dung Internet của nó (`application/ogg`) trong RFC 3534 (tức là vào năm 2006 , một giao thức chuẩn được đề xuất).  Vào tháng 9 năm 2008, RFC 3534 đã bị RFC 5334 thay thế, đã thêm các loại nội dung `video/ogg`, `audio/ogg` và tên file.ogx,.ogv,.oga,.spx.

### OGM
Năm 2002, việc thiếu hỗ trợ video chính thức trong Ogg dẫn đến việc tạo định dạng file *OGM*, một hack trên Ogg cho phép nhúng video từ khung Microsoft DirectShow vào trình bao bọc dựa trên Ogg.  OGM ban đầu chỉ được hỗ trợ bởi các công cụ chỉ dành cho Windows nguồn đóng, nhưng code-base sau đó đã được mở.  Sau đó, hỗ trợ video (và phụ đề) đã chính thức được chỉ định cho Ogg nhưng theo cách không tương thích với OGM.  Một cách độc lập, định dạng bộ chứa Matroska đạt đến độ chín và cung cấp một giải pháp thay thế cho những người quan tâm đến việc kết hợp âm thanh video Vorbis và codec video tùy ý.  Do đó, OGM không còn được hỗ trợ hoặc phát triển và chính thức không được Xiph.org khuyến khích.  Ngày nay, video trong Ogg được tìm thấy với phần mở rộng file.ogv, được chỉ định chính thức và được hỗ trợ chính thức.  Phần mềm và codec hỗ trợ các tệp.ogm có sẵn miễn phí.

### 2006
Mặc dù Ogg đã không đạt được sự phổ biến như của các tiêu chuẩn MPEG (ví dụ: MP3/MP4), kể từ năm 2006, nó thường được sử dụng để mã hóa nội dung miễn phí (như âm nhạc miễn phí, đa phương tiện trong các dự án Wikimedia Foundation và các file Creative Commons) và đã bắt đầu được hỗ trợ bởi một số ít người chơi âm thanh kỹ thuật số.  Cũng hỗ trợ định dạng Ogg là nhiều công cụ trò chơi video phổ biến, bao gồm Doom 3, Unreal Tourathon 2004, , Jets n Guns, , Myst IV: Revelation, Stepmania, Serious Sam: The Second Encounter, Lineage 2, Vendetta Online, Battlefield 2 và Grand Theft Auto, cũng như các file âm thanh của trò chơi dựa trên Java, Minecraft.  Bộ giải mã Vorbis phổ biến hơn có hỗ trợ tích hợp trên nhiều trình phát phần mềm và các tiện ích mở rộng có sẵn cho hầu hết các phần còn lại.

### 2007
Ngày 16 tháng 5 năm 2007, Tổ chức Phần mềm Tự do đã bắt đầu chiến dịch tăng cường sử dụng Vorbis "như một sự thay thế âm thanh vượt trội về mặt đạo đức, pháp lý và kỹ thuật cho định dạng MP3 độc quyền."  Mọi người cũng được khuyến khích hỗ trợ chiến dịch bằng cách thêm nút web vào trang web hoặc blog của họ.  Đối với những người không muốn tải xuống và sử dụng trình phát Ogg (VLC) được đề xuất của FSF, Xiph.  Org Foundation đã có một codec chính thức cho các ứng dụng dựa trên QuickTime trong Windows và Mac OS X, chẳng hạn như trình phát iTunes và ứng dụng iMovie; và người dùng Windows có thể cài đặt codec Ogg Windows Media Player.

### 2009
Đến ngày 30/6/2009, bộ chứa Ogg, thông qua việc sử dụng Theora và Vorbis, là định dạng bộ chứa duy nhất có trong trình duyệt web Firefox 3.5 của các phần tử HTML 5 `&#x3C; video&#x3E;` và `&#x3C;audio&#x3E;`.  Điều này phù hợp với đề xuất ban đầu được nêu, nhưng sau đó đã bị xóa khỏi đặc tả dự thảo HTML 5 (xem tranh cãi Ogg).

### 2010
Ngày 3/3/2010, một phân tích kỹ thuật của nhà phát triển FFmpeg rất quan trọng về khả năng mục đích chung của Ogg là định dạng chứa đa phương tiện.  Trong một phản ứng dài, người tạo ra Ogg đã bác bỏ những tuyên bố này.

## Codec Ogg
Ogg chỉ là một định dạng container.  Âm thanh hoặc video thực tế được mã hóa bởi codec được lưu trữ bên trong một kho chứa Ogg.  Các kho chứa Ogg có thể chứa các luồng được mã hóa bằng nhiều codec, ví dụ: file video có âm thanh chứa dữ liệu được mã hóa bởi cả codec âm thanh và codec video.

Là định dạng chứa, Ogg có thể nhúng âm thanh và video ở các định dạng khác nhau  (như Dirac, MNG, CELT, MPEG-4, MP3 và các loại khác) nhưng Ogg thường được sử dụng các codec miễn phí Xiph.org sau đây:

* Âm thanh 
** Tổn hao 
*** Speex: xử lý dữ liệu giọng nói ở tốc độ bit thấp (~ 2.1 Pha32 kbit / s / kênh) 
*** Vorbis: xử lý dữ liệu âm thanh chung ở tốc độ bit biến đổi từ trung bình đến cao (≈16, 500 kbit / s trên mỗi kênh) 
*** Opus: xử lý giọng nói, âm nhạc và âm thanh chung ở tốc độ bit biến đổi thấp và cao (–6 Tắt510 kbit / s trên mỗi kênh) 
** Không tồn hao 
*** FLAC xử lý dữ liệu âm thanh lưu trữ và độ trung thực cao. 
** Không nén 
*** OggPCM: xử lý âm thanh PCM không nén.  Nó được so sánh rộng rãi với WAV.
* Video 
**  Tổn hao 
*** Theora: dựa trên VP3 của On2, nó được nhắm mục tiêu cạnh tranh với video MPEG-4 (ví dụ: được mã hóa bằng DivX hoặc Xvid), RealVideo hoặc Windows Media Video. 
*** Daala: một định dạng mã hóa video đang được phát triển. 
*** Tarkin: một codec video thử nghiệm và hiện đã lỗi thời được phát triển vào năm 2000, 2001 và 2002 sử dụng các biến đổi sóng con rời rạc theo ba chiều chiều rộng, chiều cao và thời gian.  Nó đã bị trì hoãn sau khi Theora trở thành trọng tâm chính cho mã hóa video (vào tháng 8 năm 2002).
*** Dirac: một định dạng video miễn phí và mở được phát triển bởi BBC.  Sử dụng mã hóa sóng con.
** Không tổn hao 
*** Dirac: một phần của đặc tả của dirac bao gồm nén không mất dữ liệu. 
*** Daala: một định dạng mã hóa video đang được phát triển. 
* Bản văn 
** Writ: bản nháp chưa hoàn chỉnh cho một codec văn bản được thiết kế để nhúng phụ đề hoặc chú thích, đã ngừng vào năm 2007 
** Ngôn ngữ đánh dấu phương tiện liên tục: một codec văn bản / ứng dụng cho siêu dữ liệu, chú thích và định dạng theo thời gian. 
** Annodex: Một bộ tiêu chuẩn miễn phí và nguồn mở được phát triển bởi CSIRO để chú thích và lập chỉ mục phương tiện được nối mạng. 
** [//wiki.xiph.org/OggKate OggKate]: Một codec lớp phủ, ban đầu được thiết kế cho karaoke và văn bản, có thể được ghép kênh trong Ogg.

## Xem thêm

* Nén dữ liệu âm thanh 
* So sánh các định dạng mã hóa âm thanh
* So sánh các định dạng container 
* Commons: loại file 
* Sử dụng các định dạng Ogg trong HTML5
* Trang trợ giúp chuyển đổi video Theora của WikiCommons

## Chú thích

## Liên kết ngoài

* [//www.xiph.org/ogg/ The Xiph.Org Foundation official webpage — Ogg]
* [rfc:3533 RFC 3533 — The Ogg Encapsulation Format Version 0]
* [rfc:5334 RFC 5334 — Ogg Media Types]
* [rfc:3534 RFC 3534 — The application/ogg Media Type] - obsoleted by RFC 5334
* [rfc:7845 RFC 7845 — Ogg Encapsulation for the Opus Audio Codec]
* Using Creative Commons Metadata in Ogg containers
* Ogg etymology from the Jargon File
* [//xiph.org/quicktime/ Xiph.Org's official Ogg QuickTime Components for iTunes and iMovie (Windows and Mac OS X)]
* Windows Media Player codecs for Vorbis, Speex, Theora and FLAC
* ffmpeg2theora  Ogg Theora encoder, commandline application for Linux and Win32