1package matchers 2 3var ( 4 TypeMp4 = newType("mp4", "video/mp4") 5 TypeM4v = newType("m4v", "video/x-m4v") 6 TypeMkv = newType("mkv", "video/x-matroska") 7 TypeWebm = newType("webm", "video/webm") 8 TypeMov = newType("mov", "video/quicktime") 9 TypeAvi = newType("avi", "video/x-msvideo") 10 TypeWmv = newType("wmv", "video/x-ms-wmv") 11 TypeMpeg = newType("mpg", "video/mpeg") 12 TypeFlv = newType("flv", "video/x-flv") 13) 14 15var Video = Map{ 16 TypeMp4: Mp4, 17 TypeM4v: M4v, 18 TypeMkv: Mkv, 19 TypeWebm: Webm, 20 TypeMov: Mov, 21 TypeAvi: Avi, 22 TypeWmv: Wmv, 23 TypeMpeg: Mpeg, 24 TypeFlv: Flv, 25} 26 27func M4v(buf []byte) bool { 28 return len(buf) > 10 && 29 buf[0] == 0x0 && buf[1] == 0x0 && 30 buf[2] == 0x0 && buf[3] == 0x1C && 31 buf[4] == 0x66 && buf[5] == 0x74 && 32 buf[6] == 0x79 && buf[7] == 0x70 && 33 buf[8] == 0x4D && buf[9] == 0x34 && 34 buf[10] == 0x56 35} 36 37func Mkv(buf []byte) bool { 38 return (len(buf) > 15 && 39 buf[0] == 0x1A && buf[1] == 0x45 && 40 buf[2] == 0xDF && buf[3] == 0xA3 && 41 buf[4] == 0x93 && buf[5] == 0x42 && 42 buf[6] == 0x82 && buf[7] == 0x88 && 43 buf[8] == 0x6D && buf[9] == 0x61 && 44 buf[10] == 0x74 && buf[11] == 0x72 && 45 buf[12] == 0x6F && buf[13] == 0x73 && 46 buf[14] == 0x6B && buf[15] == 0x61) || 47 (len(buf) > 38 && 48 buf[31] == 0x6D && buf[32] == 0x61 && 49 buf[33] == 0x74 && buf[34] == 0x72 && 50 buf[35] == 0x6f && buf[36] == 0x73 && 51 buf[37] == 0x6B && buf[38] == 0x61) 52} 53 54func Webm(buf []byte) bool { 55 return len(buf) > 3 && 56 buf[0] == 0x1A && buf[1] == 0x45 && 57 buf[2] == 0xDF && buf[3] == 0xA3 58} 59 60func Mov(buf []byte) bool { 61 return len(buf) > 7 && 62 buf[0] == 0x0 && buf[1] == 0x0 && 63 buf[2] == 0x0 && buf[3] == 0x14 && 64 buf[4] == 0x66 && buf[5] == 0x74 && 65 buf[6] == 0x79 && buf[7] == 0x70 66} 67 68func Avi(buf []byte) bool { 69 return len(buf) > 10 && 70 buf[0] == 0x52 && buf[1] == 0x49 && 71 buf[2] == 0x46 && buf[3] == 0x46 && 72 buf[8] == 0x41 && buf[9] == 0x56 && 73 buf[10] == 0x49 74} 75 76func Wmv(buf []byte) bool { 77 return len(buf) > 9 && 78 buf[0] == 0x30 && buf[1] == 0x26 && 79 buf[2] == 0xB2 && buf[3] == 0x75 && 80 buf[4] == 0x8E && buf[5] == 0x66 && 81 buf[6] == 0xCF && buf[7] == 0x11 && 82 buf[8] == 0xA6 && buf[9] == 0xD9 83} 84 85func Mpeg(buf []byte) bool { 86 return len(buf) > 3 && 87 buf[0] == 0x0 && buf[1] == 0x0 && 88 buf[2] == 0x1 && buf[3] >= 0xb0 && 89 buf[3] <= 0xbf 90} 91 92func Flv(buf []byte) bool { 93 return len(buf) > 3 && 94 buf[0] == 0x46 && buf[1] == 0x4C && 95 buf[2] == 0x56 && buf[3] == 0x01 96} 97 98func Mp4(buf []byte) bool { 99 return len(buf) > 27 && 100 (buf[0] == 0x0 && buf[1] == 0x0 && buf[2] == 0x0 && 101 ((buf[3] == 0x18 || buf[3] == 0x20) && buf[4] == 0x66 && 102 buf[5] == 0x74 && buf[6] == 0x79 && buf[7] == 0x70) || 103 (buf[0] == 0x33 && buf[1] == 0x67 && buf[2] == 0x70 && buf[3] == 0x35) || 104 (buf[0] == 0x0 && buf[1] == 0x0 && buf[2] == 0x0 && buf[3] == 0x1C && 105 buf[4] == 0x66 && buf[5] == 0x74 && buf[6] == 0x79 && buf[7] == 0x70 && 106 buf[8] == 0x6D && buf[9] == 0x70 && buf[10] == 0x34 && buf[11] == 0x32 && 107 buf[16] == 0x6D && buf[17] == 0x70 && buf[18] == 0x34 && buf[19] == 0x31 && 108 buf[20] == 0x6D && buf[21] == 0x70 && buf[22] == 0x34 && buf[23] == 0x32 && 109 buf[24] == 0x69 && buf[25] == 0x73 && buf[26] == 0x6F && buf[27] == 0x6D)) 110} 111