如何从Go Pro保存原始视频数据?

时间:2017-09-18 19:45:26

标签: swift video-streaming h.264 mpeg2-ts gopro

我已注册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)")
        }
    }
}

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

0 个答案:

没有答案