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[2] 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.[3]
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.[4]
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.[5] 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.[6] 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.[7]
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 đó.[8] 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.[9]
Đị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.[10]
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.
Bit
Giá trị
Cờ
Loại trang
0
0x01
Tiếp tục
Gói đầu tiên trên trang này là sự tiếp nối của gói trước đó trong luồng bit logic.
1
0x02
BOS
Bắt đầu dòng. Trang này là trang đầu tiên trong dòng bit logic. Cờ BOS phải được đặt trên trang đầu tiên của mỗi dòng bit logic và không được đặt trên bất kỳ trang nào khác.
2
0x04
EOS
Kết thúc dòng. Trang này là trang cuối cùng trong dòng bit logic. Cờ EOS phải được đặt trên trang cuối cùng của mỗi dòng bit logic và không được đặt trên bất kỳ trang nào khác.
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.
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.[11]
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".[13] 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.[14][15][16][17] 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".[18] 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".[19]
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 tính đến năm 2006[cập nhật], 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.[20] 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í.[21]
2006
Mặc dù Ogg đã không đạt được sự phổ biến như của các tiêu chuẩn MPEG[22][23] (ví dụ: MP3/MP4), kể từ năm 2006tính đến năm 2006[cập nhật], 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, Halo: Combat Evolve, Jets n Guns, Mafia: The City of Lost Heaven, 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."[24] 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[25] 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.[26]
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 webFirefox 3.5 của các phần tử HTML 5< video> và <audio>.[27][28] Đ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.[29] Trong một phản ứng dài, người tạo ra Ogg đã bác bỏ những tuyên bố này.[30]
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 [31][32] (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:
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ềuchiều rộng, chiều cao và thời gian.[34][35][36] 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).[37]
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.[38]
^“Archived copy”. Bản gốc lưu trữ ngày 1 tháng 10 năm 2005. Truy cập ngày 28 tháng 5 năm 2010.Quản lý CS1: bản lưu trữ là tiêu đề (liên kết)CS1 maint: Archived copy as title (link)
^“Ogging 101”. Truy cập ngày 6 tháng 11 năm 2016. 3.3 Ogging: This is the art of killing a carrier, or potential carrier, by a suicide run.
^Giles, Ralph (ngày 7 tháng 11 năm 2017). “libogg 1.3.3 release” (Danh sách thư). Truy cập ngày 14 tháng 1 năm 2019. Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
^Giles, Ralph (ngày 5 tháng 1 năm 2008). “r14372 - in trunk/theora:. lib/dec lib/enc” (Danh sách thư). Truy cập ngày 14 tháng 1 năm 2019. This library was never released and now looks like it needs to be redesigned.Đã bỏ qua tham số không rõ |mailinglist= (trợ giúp)
^“Xiph.org: naming”. Xiph.org Foundation. ngày 7 tháng 1 năm 2006. Bản gốc lưu trữ ngày 27 tháng 2 năm 2012. Truy cập ngày 16 tháng 2 năm 2008. At the time Ogg was starting out, most personal computers were i386s and the i486 was new. I remember thinking about the algorithms I was considering, "Whoa, that's heavyweight. People are going to need a 486 to run that..." While the software ogged the music, there wasn't much processor left for anything else.
^“Xiph.org: naming”. Xiph.org Foundation. ngày 7 tháng 1 năm 2006. Bản gốc lưu trữ ngày 27 tháng 2 năm 2012. Truy cập ngày 2 tháng 9 năm 2009.
^“Metadata”. xiph.org Foundation. ngày 24 tháng 7 năm 2013.
^Montgomery, Christopher (1997). “Ogg 98.9”. Xiphophorus company. Bản gốc lưu trữ ngày 24 tháng 4 năm 2016. Truy cập ngày 2 tháng 9 năm 2009.
^
Xiph.org (ngày 18 tháng 1 năm 2000). “OggSquish Vorbis encoding format documentation”. Archive.org. Bản gốc lưu trữ ngày 18 tháng 1 năm 2000. Truy cập ngày 2 tháng 9 năm 2008. Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp)Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp); Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp)
^
Xiph.org (ngày 18 tháng 1 năm 2000). “OggSquish logical and physical bitstream overview”. Archive.org. Bản gốc lưu trữ ngày 18 tháng 1 năm 2000. Truy cập ngày 2 tháng 9 năm 2008. Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp)Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp); Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp)
^
Xiphophorus company (ngày 5 tháng 4 năm 2001). “The Ogg project homepage”. Archive.org. Bản gốc lưu trữ ngày 5 tháng 4 năm 2001. Truy cập ngày 2 tháng 9 năm 2009. Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp)Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp); Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp)
^
Xiph.org (ngày 4 tháng 12 năm 2001). “The Ogg project homepage”. Archive.org. Bản gốc lưu trữ ngày 4 tháng 12 năm 2001. Truy cập ngày 2 tháng 9 năm 2008. Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp)Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp); Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp)
^Xiphophorus company (ngày 4 tháng 12 năm 2001). “The Ogg project homepage”. Archive.org. Bản gốc lưu trữ ngày 4 tháng 12 năm 2001. Truy cập ngày 2 tháng 9 năm 2009. Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp)Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp); Đã định rõ hơn một tham số trong |author= và |last= (trợ giúp)
^“The Ogg container format”. Xiph.Org Foundation. ngày 7 tháng 1 năm 2006. Truy cập ngày 2 tháng 9 năm 2009.
^Rullgard, Mans (ngày 3 tháng 3 năm 2010). “Ogg objections”. hardwarebug.org. Truy cập ngày 2 tháng 5 năm 2010.
^Montgomery, Christopher (ngày 27 tháng 4 năm 2010). “Monty - In Defense of Ogg's Good Name”. people.xiph.org/~xiphmont. Bản gốc lưu trữ ngày 29 tháng 4 năm 2010. Truy cập ngày 2 tháng 5 năm 2010.
^“OggWrit”. Xiph.org. ngày 10 tháng 11 năm 2007. Truy cập ngày 13 tháng 4 năm 2015. at best incomplete and at worst completely broken. In any case, it is not an "official" Xiph spec/codec