我已注册Go Pro Developer程序并设置了相机,以便我可以接收原始数据。最终,我想通过HLS在实时流中提供这些数据。
该应用程序当前创建了一个.m3u8
文件,并且每五秒钟将我收到的数据整理成新的.ts
文件。但是,当我尝试播放此流时,没有播放任何内容,所以我不相信我保存为“ts”的数据实际上是正确的格式。
我收集到每次调用下面的函数时,传递的数据代表一个或多个TS数据包,但那些数据包是以正确格式保存的吗?
我已使用.m3u8 file
检查了mediastreamvalidator
的格式,但它没有提供有关ts
文件的任何错误的任何线索。
我将文档中的一个示例转换为Swift,并添加了一些我自己的代码,如下所示:
func output(_ output: GPCameraPlayerOutput!, didOutputBuffer bytes: UnsafePointer<UInt8>!, length: Int) {
// TS packets are always 188 bytes
for i in stride(from: 0, to: length, by: CameraPreviewViewController.TSPacketSize) {
/First byte should be the "sync byte"
if Int(bytes[i]) != CameraPreviewViewController.SyncByte {
continue //Sync byte expected
}
let pid = (Int(bytes[i + 1] & 0x1F)) << 8 | Int(bytes[i + 2]) //read the next 13 bits as an int
if pid == CameraPreviewViewController.H264 {
//parse video data
let packet : UnsafePointer<UInt8> = bytes.advanced(by: i)
currentTSOutputStream.write(packet, maxLength: CameraPreviewViewController.TSPacketSize)
[clipped - occasionally save the ts stream and start a new one]
}
else if pid == CameraPreviewViewController.ACC {
//ignore audio data
}
else {
print ("Unknown Data: \(pid)")
}
}
}
我也尝试保存所有数据包但没有任何变化。