Go Pro 開発者プログラムにサインアップし、生データを受信できるようにカメラをセットアップしました。最終的には、HLS を介してライブ ストリームでこのデータを提供したいと考えています。
アプリは現在、ファイルを作成し、受信したデータを5 秒ごと.m3u8
に新しいファイルにチャンクします。.ts
ただし、このストリームを再生しようとしても何も再生されないため、「ts」として保存しているデータが実際に正しい形式であるかどうか確信が持てません。
以下の関数が呼び出されるたびに、渡されたデータは 1 つ以上の TS パケットを表していると思いますが、それらのパケットは正しい形式で保存されていますか?
.m3u8 file
withの形式を確認しました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)")
}
}
}
また、すべてのパケットを保存しようとしましたが、変更はありません。