HaishinKit.swift/Sources/MP4/MP4FileTypeBox.swift

50 lines
1.5 KiB
Swift

import Foundation
struct MP4FileTypeBox: MP4BoxConvertible {
// MARK: MP4BoxConvertible
var size: UInt32 = 0
var type: String = ""
var offset: UInt64 = 0
var children: [MP4BoxConvertible] = []
// MARK: MP4MediaHeaderBox
var majorBrand: UInt32 = 0
var minorVersion: UInt32 = 0
var compatibleBrands: [UInt32] = []
}
extension MP4FileTypeBox: DataConvertible {
var data: Data {
get {
let buffer = ByteArray()
.writeUInt32(size)
.writeUTF8Bytes(type)
.writeUInt32(majorBrand)
.writeUInt32(minorVersion)
for brand in compatibleBrands {
buffer.writeUInt32(brand)
}
return buffer.data
}
set {
do {
let buffer = ByteArray(data: newValue)
size = try buffer.readUInt32()
type = try buffer.readUTF8Bytes(4)
majorBrand = try buffer.readUInt32()
minorVersion = try buffer.readUInt32()
compatibleBrands.removeAll()
while 0 < buffer.bytesAvailable {
compatibleBrands.append(try buffer.readUInt32())
}
} catch {
logger.error(error)
}
}
}
}
extension MP4Box.Names {
static let styp = MP4Box.Name<MP4FileTypeBox>(rawValue: "styp")
static let ftyp = MP4Box.Name<MP4FileTypeBox>(rawValue: "ftyp")
}