HaishinKit.swift/Sources/MP4/MP4ElementaryStreamDescript...

71 lines
2.4 KiB
Swift

import Foundation
struct MP4ElementaryStreamDescriptorBox: MP4BoxConvertible {
// MARK: MP4ContainerBoxConvertible
var size: UInt32 = 0
let type: String = "esds"
var offset: UInt64 = 0
var children: [MP4BoxConvertible] = []
// MARK: MP4ElementaryStreamDescriptorBox
var audioDecorderSpecificConfig = Data()
var tag: UInt8 = 0
var tagSize: UInt8 = 0
var id: UInt16 = 0
var streamDependenceFlag: UInt8 = 0
var urlFlag: UInt8 = 0
var ocrStreamFlag: UInt8 = 0
var streamPriority: UInt8 = 0
}
extension MP4ElementaryStreamDescriptorBox: DataConvertible {
var data: Data {
get {
Data()
}
set {
do {
let buffer = ByteArray(data: newValue)
size = try buffer.readUInt32()
_ = try buffer.readUTF8Bytes(4)
tag = try buffer.readUInt8()
self.tagSize = try buffer.readUInt8()
if self.tagSize == 0x80 {
buffer.position += 2
self.tagSize = try buffer.readUInt8()
}
id = try buffer.readUInt16()
let data: UInt8 = try buffer.readUInt8()
streamDependenceFlag = data >> 7
urlFlag = (data >> 6) & 0x1
ocrStreamFlag = (data >> 5) & 0x1
streamPriority = data & 0x1f
if streamDependenceFlag == 1 {
let _: UInt16 = try buffer.readUInt16()
}
// Decorder Config Descriptor
let _: UInt8 = try buffer.readUInt8()
tagSize = try buffer.readUInt8()
if tagSize == 0x80 {
buffer.position += 2
tagSize = try buffer.readUInt8()
}
buffer.position += 13
// Audio Decorder Spec Info
let _: UInt8 = try buffer.readUInt8()
tagSize = try buffer.readUInt8()
if tagSize == 0x80 {
buffer.position += 2
tagSize = try buffer.readUInt8()
}
audioDecorderSpecificConfig = try buffer.readBytes(Int(tagSize))
} catch {
logger.error(error)
}
}
}
}
extension MP4Box.Names {
static let esds = MP4Box.Name<MP4ElementaryStreamDescriptorBox>(rawValue: "esds")
}