draft.txt (1168B)
1 package main 2 3 import ( 4 "rtp" 5 "jxs" 6 ) 7 8 func transmit(session *rtp.Session, payload chan *jxs.Payload) { 9 for p := range payload { 10 packets, err := jxs.Packets(p) 11 if err != nil { 12 log.Printf("payload to RTP packets: %v", err) 13 continue 14 } 15 for _, packet := range packets { 16 if err := session.Transmit(p); err != nil { 17 log.Printf("transmit: %v", err) 18 } 19 } 20 } 21 } 22 23 func main() { 24 session, err := rtp.Dial("udp", "[::1]:5004") 25 if err != nil { 26 log.Fatal(err) 27 } 28 29 ch := make(chan *jxs.Payload) 30 go transmit(session, ch) 31 32 for i := 0; ; i++ { 33 frame, err := jxs.DecodeFrame(os.Stdin) 34 if errors.Is(err, io.EOF) { 35 close(ch) 36 break 37 } else if err != nil { 38 log.Fatal(err) 39 } 40 mtu := 1492 // typical network 41 pus, err := jxs.Packetize(&frame, mtu) 42 if err != nil { 43 log.Fatal(err) 44 } 45 for j, pu := range pus { 46 payload := &jxs.Payload{ 47 Header: &jxs.Header{ 48 Sequential: true, 49 PacketMode: true, 50 FrameCount: uint8(i), 51 SEPCount: 0, // TODO(otl) 52 PacketCount: j, // TODO(otl) 53 }, 54 PacketizationUnit: &jxs.PacketizationUnit{ 55 frame.VideoBox, 56 frame.ColorBox, 57 }, 58 }, 59 ch <- payload 60 } 61 } 62 } 63 64