diff --git a/internal/core/transcode/code.go b/internal/core/transcode/code.go index a029e39..2be9c03 100644 --- a/internal/core/transcode/code.go +++ b/internal/core/transcode/code.go @@ -1,6 +1,7 @@ package transcode import ( + "encoding/binary" "fmt" "github.com/gorilla/websocket" "log/slog" @@ -19,7 +20,7 @@ func (tk *Task) StartTalkCode(wsURL string, transport string) error { frameSize := 160 dir, _ := os.Getwd() inputFile := filepath.Join(dir, tk.EncodeUrl) - //SSRC := tk.GetSSRCUint32() + SSRC := tk.GetSSRCUint32() if _, err := os.Stat(inputFile); os.IsNotExist(err) { return fmt.Errorf("input file does not exist: %v", err.Error()) } @@ -50,7 +51,6 @@ func (tk *Task) StartTalkCode(wsURL string, transport string) error { // Calculate frame duration in milliseconds frameDuration := time.Duration(float64(frameSize)/float64(sampleRate)*1000) * time.Millisecond nextSendTime := time.Now() - frame := make([]byte, frameSize) var errors error for { @@ -76,7 +76,7 @@ func (tk *Task) StartTalkCode(wsURL string, transport string) error { PayloadType: 8, // G711 A-law SequenceNumber: seqNumber, Timestamp: currentTimestamp, - SSRC: 123456, + SSRC: SSRC, }, Payload: frame[:n], } @@ -88,27 +88,30 @@ func (tk *Task) StartTalkCode(wsURL string, transport string) error { continue } if transport == "tcp" { - tcpBuf := make([]byte, 4) - tcpBuf[0] = byte(len(data) >> 24) - tcpBuf[1] = byte(len(data) >> 16) - tcpBuf[2] = byte(len(data) >> 8) - tcpBuf[3] = byte(len(data)) + // Create TCP encapsulation: 4-byte length header + RTP packet data + //tcpData := make([]byte, 4+len(data)) + //binary.BigEndian.PutUint32(tcpData[:4], uint32(len(data))) // 4-byte length header + //copy(tcpData[4:], data) // RTP packet data - err = c.WriteMessage(websocket.BinaryMessage, tcpBuf) + rfc4571Data := make([]byte, 2+len(data)) + binary.BigEndian.PutUint16(rfc4571Data[:2], uint16(len(data))) // 2-byte length header (RFC 4571) + copy(rfc4571Data[2:], data) + + err = c.WriteMessage(websocket.BinaryMessage, rfc4571Data) if err != nil { - errors = fmt.Errorf("error sending RTP packet via WebSocket: %v", err.Error()) - slog.Debug("Error sending RTP packet via WebSocket", "err", err.Error()) + slog.Debug("Error sending RTP TCP packet via WebSocket", "err", err.Error()) break } + } else { err = c.WriteMessage(websocket.BinaryMessage, data) if err != nil { errors = fmt.Errorf("error sending RTP packet via WebSocket: %v", err.Error()) - slog.Debug("Error sending RTP packet via WebSocket", "err", err.Error()) + slog.Debug("Error sending RTP UDP packet via WebSocket", "err", err.Error()) break } } - + slog.Debug("sending RTP TCP packet via WebSocket OK") // Increment sequence number seqNumber++ diff --git a/web/src/pages/Home.tsx b/web/src/pages/Home.tsx index 66bb58a..9d42263 100644 --- a/web/src/pages/Home.tsx +++ b/web/src/pages/Home.tsx @@ -31,7 +31,7 @@ export default function Home() { return ( -
+ -
- + + {/* */} {currentMenu == "sub0" && (