65 lines
898 B
Go
65 lines
898 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
|
|
"github.com/datarhei/joy4/av"
|
|
"github.com/datarhei/joy4/format/rtmp"
|
|
)
|
|
|
|
func main() {
|
|
server := &rtmp.Server{
|
|
Addr: ":3035",
|
|
}
|
|
|
|
server.HandlePublish = func(src *rtmp.Conn) {
|
|
defer src.Close()
|
|
|
|
url := fmt.Sprintf("rtmp://127.0.0.1:2035%s", src.URL.Path)
|
|
dst, err := rtmp.Dial(url, rtmp.DialOptions{})
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
defer dst.Close()
|
|
|
|
streams, err := src.Streams()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = dst.WriteHeader(streams)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
npackets := uint64(0)
|
|
for {
|
|
var pkt av.Packet
|
|
|
|
if pkt, err = src.ReadPacket(); err != nil {
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
return
|
|
}
|
|
|
|
npackets++
|
|
|
|
if npackets < 100 {
|
|
if err = dst.WritePacket(pkt); err != nil {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
err = dst.WriteTrailer()
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
|
|
server.ListenAndServe()
|
|
}
|