package storage import ( "encoding/binary" "fmt" "os" "time" "github.com/golang/snappy" ) func main() { now := time.Now() // Обратите внимание: Packets – срез, поэтому оборачиваем пакет в литерал среза. seg := Segment{ Date: now.Format(time.RFC3339), Duration: "1m", Packets: []InterleavedPacket{ { Type: PacketTypeH264, Pts: now.UnixNano(), H264AUs: [][]byte{ []byte{0x00, 0x01, 0x02}, []byte{0x03, 0x04}, }, }, }, } f, err := os.Create("stream_interleaved.bin") if err != nil { fmt.Println("Ошибка создания файла:", err) return } defer f.Close() writer := snappy.NewBufferedWriter(f) defer writer.Close() streamID := "example_stream" if err := binary.Write(writer, binary.LittleEndian, int32(len(streamID))); err != nil { fmt.Println("Ошибка записи заголовка:", err) return } if _, err := writer.Write([]byte(streamID)); err != nil { fmt.Println("Ошибка записи streamID:", err) return } // Здесь можно записывать сначала заголовочный сегмент, затем сегменты с пакетами. // Например, если заголовочный сегмент содержит только Start и Duration: if err := WriteHeader(writer, seg); err != nil { fmt.Println("Ошибка записи заголовочного сегмента:", err) return } // А затем записываем сегмент с пакетами: if err := WriteInterleavedPacket(writer, seg); err != nil { fmt.Println("Ошибка записи сегмента пакетов:", err) return } if err := writer.Flush(); err != nil { fmt.Println("Ошибка при сбросе данных:", err) return } fmt.Println("Сегмент с interleaved пакетами успешно записан.") }