github.com/pion/webrtc/v4@v4.0.1/pkg/media/rtpdump/writer.go (about)

     1  // SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
     2  // SPDX-License-Identifier: MIT
     3  
     4  package rtpdump
     5  
     6  import (
     7  	"fmt"
     8  	"io"
     9  	"sync"
    10  )
    11  
    12  // Writer writes the RTPDump file format
    13  type Writer struct {
    14  	writerMu sync.Mutex
    15  	writer   io.Writer
    16  }
    17  
    18  // NewWriter makes a new Writer and immediately writes the given Header
    19  // to begin the file.
    20  func NewWriter(w io.Writer, hdr Header) (*Writer, error) {
    21  	preamble := fmt.Sprintf(
    22  		"#!rtpplay1.0 %s/%d\n",
    23  		hdr.Source.To4().String(),
    24  		hdr.Port)
    25  	if _, err := w.Write([]byte(preamble)); err != nil {
    26  		return nil, err
    27  	}
    28  
    29  	hData, err := hdr.Marshal()
    30  	if err != nil {
    31  		return nil, err
    32  	}
    33  	if _, err := w.Write(hData); err != nil {
    34  		return nil, err
    35  	}
    36  
    37  	return &Writer{writer: w}, nil
    38  }
    39  
    40  // WritePacket writes a Packet to the output
    41  func (w *Writer) WritePacket(p Packet) error {
    42  	w.writerMu.Lock()
    43  	defer w.writerMu.Unlock()
    44  
    45  	data, err := p.Marshal()
    46  	if err != nil {
    47  		return err
    48  	}
    49  	if _, err := w.writer.Write(data); err != nil {
    50  		return err
    51  	}
    52  
    53  	return nil
    54  }