69 lines
1.9 KiB
Go
69 lines
1.9 KiB
Go
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 пакетами успешно записан.")
|
||
}
|