3

我已经注册了 Go Pro Developer 计划并设置了相机,以便我可以接收原始数据。最终,我想通过 HLS 在实时流中提供这些数据。

该应用程序当前创建一个.m3u8文件,并将我收到的数据.ts每五秒分块到新文件中。但是,当我尝试播放此流时,没有播放任何内容,因此我不相信我保存为“ts”的数据实际上是正确的格式。

我认为每次调用下面的函数时,传递的数据代表一个或多个 TS 数据包,但是这些数据包是否以正确的格式保存?

我已经检查了.m3u8 filewith的格式,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)")
        }
    }
}

我也试过保存所有的数据包,但没有任何变化。

4

0 回答 0