revid: made rtmpSender smarter with write error handling

This commit is contained in:
Saxon 2019-04-15 11:20:36 +09:30
parent d18373908b
commit 88431b1357
1 changed files with 12 additions and 2 deletions

View File

@ -322,7 +322,9 @@ func (s *rtmpSender) output() {
}
}
_, err := s.conn.Write(chunk.Bytes())
if err != nil {
switch err {
case nil, rtmp.ErrInvalidFlvTag:
default:
s.log(logger.Warning, pkg+"rtmpSender: send error, restarting...", "error", err.Error())
err = s.restart()
if err != nil {
@ -347,7 +349,7 @@ func (s *rtmpSender) Write(d []byte) (int, error) {
}
func (s *rtmpSender) restart() error {
s.Close()
s.close()
var err error
for n := 0; n < s.retries; n++ {
s.conn, err = rtmp.Dial(s.url, s.timeout, s.log)
@ -363,6 +365,14 @@ func (s *rtmpSender) restart() error {
}
func (s *rtmpSender) Close() error {
if s.quit != nil {
close(s.quit)
}
s.wg.Wait()
return s.close()
}
func (s *rtmpSender) close() error {
if s.conn == nil {
return nil
}