3

Go Pro 開発者プログラムにサインアップし、生データを受信できるようにカメラをセットアップしました。最終的には、HLS を介してライブ ストリームでこのデータを提供したいと考えています。

アプリは現在、ファイルを作成し、受信したデータを5 秒ごと.m3u8に新しいファイルにチャンクします。.tsただし、このストリームを再生しようとしても何も再生されないため、「ts」として保存しているデータが実際に正しい形式であるかどうか確信が持てません。

以下の関数が呼び出されるたびに、渡されたデータは 1 つ以上の 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