50 lines
1.3 KiB
Swift
50 lines
1.3 KiB
Swift
import Foundation
|
|
|
|
struct ElementaryStreamSpecificData {
|
|
static let fixedHeaderSize: Int = 5
|
|
|
|
var streamType: UInt8 = 0
|
|
var elementaryPID: UInt16 = 0
|
|
var ESInfoLength: UInt16 = 0
|
|
var ESDescriptors = Data()
|
|
|
|
init() {
|
|
}
|
|
|
|
init?(_ data: Data) {
|
|
self.data = data
|
|
}
|
|
}
|
|
|
|
extension ElementaryStreamSpecificData: DataConvertible {
|
|
// MARK: DataConvertible
|
|
var data: Data {
|
|
get {
|
|
ByteArray()
|
|
.writeUInt8(streamType)
|
|
.writeUInt16(elementaryPID | 0xe000)
|
|
.writeUInt16(ESInfoLength | 0xf000)
|
|
.writeBytes(ESDescriptors)
|
|
.data
|
|
}
|
|
set {
|
|
let buffer = ByteArray(data: newValue)
|
|
do {
|
|
streamType = try buffer.readUInt8()
|
|
elementaryPID = try buffer.readUInt16() & 0x0fff
|
|
ESInfoLength = try buffer.readUInt16() & 0x01ff
|
|
ESDescriptors = try buffer.readBytes(Int(ESInfoLength))
|
|
} catch {
|
|
logger.error("\(buffer)")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
extension ElementaryStreamSpecificData: CustomDebugStringConvertible {
|
|
// MARK: CustomDebugStringConvertible
|
|
var debugDescription: String {
|
|
Mirror(reflecting: self).debugDescription
|
|
}
|
|
}
|