You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.4 KiB
43 lines
1.4 KiB
package magic
|
|
|
|
import (
|
|
"bytes"
|
|
)
|
|
|
|
/*
|
|
NOTE:
|
|
|
|
In May 2003, two Internet RFCs were published relating to the format.
|
|
The Ogg bitstream was defined in RFC 3533 (which is classified as
|
|
'informative') and its Internet content type (application/ogg) in RFC
|
|
3534 (which is, as of 2006, a proposed standard protocol). In
|
|
September 2008, RFC 3534 was obsoleted by RFC 5334, which added
|
|
content types video/ogg, audio/ogg and filename extensions .ogx, .ogv,
|
|
.oga, .spx.
|
|
|
|
See:
|
|
https://tools.ietf.org/html/rfc3533
|
|
https://developer.mozilla.org/en-US/docs/Web/HTTP/Configuring_servers_for_Ogg_media#Serve_media_with_the_correct_MIME_type
|
|
https://github.com/file/file/blob/master/magic/Magdir/vorbis
|
|
*/
|
|
|
|
// Ogg matches an Ogg file.
|
|
func Ogg(raw []byte, limit uint32) bool {
|
|
return bytes.HasPrefix(raw, []byte("\x4F\x67\x67\x53\x00"))
|
|
}
|
|
|
|
// OggAudio matches an audio ogg file.
|
|
func OggAudio(raw []byte, limit uint32) bool {
|
|
return len(raw) >= 37 && (bytes.HasPrefix(raw[28:], []byte("\x7fFLAC")) ||
|
|
bytes.HasPrefix(raw[28:], []byte("\x01vorbis")) ||
|
|
bytes.HasPrefix(raw[28:], []byte("OpusHead")) ||
|
|
bytes.HasPrefix(raw[28:], []byte("Speex\x20\x20\x20")))
|
|
}
|
|
|
|
// OggVideo matches a video ogg file.
|
|
func OggVideo(raw []byte, limit uint32) bool {
|
|
return len(raw) >= 37 && (bytes.HasPrefix(raw[28:], []byte("\x80theora")) ||
|
|
bytes.HasPrefix(raw[28:], []byte("fishead\x00")) ||
|
|
bytes.HasPrefix(raw[28:], []byte("\x01video\x00\x00\x00"))) // OGM video
|
|
}
|