nareix / joy4

Golang audio/video library and streaming server
MIT License
2.66k stars 501 forks source link

wsasend: An existing connection was forcibly closed by the remote host. #85

Open bodrich opened 5 years ago

bodrich commented 5 years ago


import (
    "fmt"
    "github.com/nareix/joy4/av"
    "github.com/nareix/joy4/av/avutil"
    "github.com/nareix/joy4/av/pktque"
    "github.com/nareix/joy4/format"
    "github.com/nareix/joy4/format/rtmp"
    "io"
)

func init() {
    format.RegisterAll()
}

func CopyPackets(dst av.PacketWriter, src av.PacketReader) (err error) {
    for {
        var pkt av.Packet
        if pkt, err = src.ReadPacket(); err != nil {
            if err == io.EOF {
                break
            }
            return
        }

        if err = dst.WritePacket(pkt); err != nil {
            return
        }
    }
    return
}

func CopyFile(dst av.Muxer, src av.Demuxer) (err error) {
    var streams []av.CodecData
    if streams, err = src.Streams(); err != nil {
        return
    }
    if err = dst.WriteHeader(streams); err != nil {
        return
    }
    if err = CopyPackets(dst, src); err != nil {
        if err != io.EOF {
            return
        }
    }
    if err = dst.WriteTrailer(); err != nil {
        return
    }
    return
}

func main() {
    file, err := avutil.Open("csgo.mp4")

    if err != nil {
        fmt.Println(err)
    }

    demuxer := &pktque.FilterDemuxer{Demuxer: file, Filter: &pktque.Walltime{}}

    var streams []av.CodecData
    if streams, err = demuxer.Streams(); err != nil {
        return
    }
    rtmp.Debug = true
    for {
        conn, err := rtmp.Dial("rtmp://a.rtmp.youtube.com/live2/key")

        if err != nil {
            fmt.Println(err)
            continue
        }
        // conn, _ := avutil.Create("rtmp://localhost:1936/app/publish")
        fmt.Println(conn.NetConn())

        if err = conn.WriteHeader(streams); err != nil {
            panic(err)
        }

        for {
            var pkt av.Packet
            if pkt, err = demuxer.ReadPacket(); err != nil {
                if err == io.EOF {
                    break
                }
                break
            }

            if err = conn.WritePacket(pkt); err != nil {
                panic(err)
                break
            }
        }

        if err != nil {
            fmt.Println(err)
            continue
        }

        file.Close()
        conn.Close()
    }
}```
bodrich commented 5 years ago

I get the error on line 'if err = conn.WritePacket(pkt); err != nil {'