mirror of
https://github.com/datarhei/core.git
synced 2025-10-18 22:04:38 +08:00
Create publisher for remote rtmp stream
This commit is contained in:
104
rtmp/connection.go
Normal file
104
rtmp/connection.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package rtmp
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/datarhei/joy4/av"
|
||||
)
|
||||
|
||||
type connection interface {
|
||||
av.MuxCloser
|
||||
av.DemuxCloser
|
||||
TxBytes() uint64
|
||||
RxBytes() uint64
|
||||
}
|
||||
|
||||
// conn implements the connection interface
|
||||
type conn struct {
|
||||
muxer av.MuxCloser
|
||||
demuxer av.DemuxCloser
|
||||
|
||||
txbytes uint64
|
||||
rxbytes uint64
|
||||
}
|
||||
|
||||
// Make sure that conn implements the connection interface
|
||||
var _ connection = &conn{}
|
||||
|
||||
func newConnectionFromDemuxer(m av.DemuxCloser) connection {
|
||||
c := &conn{
|
||||
demuxer: m,
|
||||
}
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
func (c *conn) TxBytes() uint64 {
|
||||
return c.txbytes
|
||||
}
|
||||
|
||||
func (c *conn) RxBytes() uint64 {
|
||||
return c.rxbytes
|
||||
}
|
||||
|
||||
func (c *conn) ReadPacket() (av.Packet, error) {
|
||||
if c.demuxer != nil {
|
||||
p, err := c.demuxer.ReadPacket()
|
||||
if err == nil {
|
||||
c.rxbytes += uint64(len(p.Data))
|
||||
}
|
||||
|
||||
return p, err
|
||||
}
|
||||
|
||||
return av.Packet{}, fmt.Errorf("no demuxer available")
|
||||
}
|
||||
|
||||
func (c *conn) Streams() ([]av.CodecData, error) {
|
||||
if c.demuxer != nil {
|
||||
return c.demuxer.Streams()
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("no demuxer available")
|
||||
}
|
||||
|
||||
func (c *conn) WritePacket(p av.Packet) error {
|
||||
if c.muxer != nil {
|
||||
err := c.muxer.WritePacket(p)
|
||||
if err == nil {
|
||||
c.txbytes += uint64(len(p.Data))
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
return fmt.Errorf("no muxer available")
|
||||
}
|
||||
|
||||
func (c *conn) WriteHeader(streams []av.CodecData) error {
|
||||
if c.muxer != nil {
|
||||
return c.muxer.WriteHeader(streams)
|
||||
}
|
||||
|
||||
return fmt.Errorf("no muxer available")
|
||||
}
|
||||
|
||||
func (c *conn) WriteTrailer() error {
|
||||
if c.muxer != nil {
|
||||
return c.muxer.WriteTrailer()
|
||||
}
|
||||
|
||||
return fmt.Errorf("no muxer available")
|
||||
}
|
||||
|
||||
func (c *conn) Close() error {
|
||||
if c.muxer != nil {
|
||||
return c.muxer.Close()
|
||||
}
|
||||
|
||||
if c.demuxer != nil {
|
||||
return c.demuxer.Close()
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
Reference in New Issue
Block a user