mirror of
https://github.com/lkmio/lkm.git
synced 2025-09-27 03:26:01 +08:00
修复拉流恢复失败问题
This commit is contained in:
@@ -2,6 +2,7 @@ package hls
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/lkmio/avformat/utils"
|
||||
"github.com/lkmio/lkm/log"
|
||||
"github.com/lkmio/lkm/stream"
|
||||
"strings"
|
||||
@@ -23,6 +24,9 @@ type M3U8Sink struct {
|
||||
|
||||
// SendM3U8Data 首次向拉流端应答M3U8文件, 后续更新M3U8文件, 通过调用@see GetPlaylist 函数获取最新的M3U8文件.
|
||||
func (s *M3U8Sink) SendM3U8Data(data *string) error {
|
||||
utils.Assert(data != nil)
|
||||
utils.Assert(s.playlistFormat == nil)
|
||||
|
||||
s.playlistFormat = data
|
||||
s.cb([]byte(s.GetPlaylist()))
|
||||
|
||||
@@ -48,9 +52,12 @@ func (s *M3U8Sink) SendM3U8Data(data *string) error {
|
||||
}
|
||||
|
||||
func (s *M3U8Sink) StartStreaming(transStream stream.TransStream) error {
|
||||
hls := transStream.(*TransStream)
|
||||
if s.playlistFormat != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
if hls.M3U8Writer.Size() > 0 {
|
||||
hls := transStream.(*TransStream)
|
||||
if hls.M3U8Writer.Size() > 0 && s.playlistFormat == nil {
|
||||
if err := s.SendM3U8Data(hls.PlaylistFormat); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@@ -24,6 +24,10 @@ type Sink struct {
|
||||
}
|
||||
|
||||
func (s *Sink) StartStreaming(transStream stream.TransStream) error {
|
||||
if s.peer != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 创建PeerConnection
|
||||
var remoteTrack *webrtc.TrackLocalStaticSample
|
||||
s.tracks = make([]*webrtc.TrackLocalStaticSample, transStream.TrackCount())
|
||||
@@ -107,7 +111,6 @@ func (s *Sink) StartStreaming(transStream stream.TransStream) error {
|
||||
// offer的sdp, 应答给http请求
|
||||
if s.cb != nil {
|
||||
s.cb(connection.LocalDescription().SDP)
|
||||
s.cb = nil
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@@ -22,20 +22,20 @@ type Sink struct {
|
||||
stream.BaseSink
|
||||
|
||||
senders []*librtp.RtpSender // 一个rtsp源, 可能存在多个流, 每个流都需要拉取
|
||||
sdpCb func(sdp string) // sdp回调, 响应describe
|
||||
cb func(sdp string) // sdp回调, 响应describe
|
||||
}
|
||||
|
||||
func (s *Sink) StartStreaming(transStream stream.TransStream) error {
|
||||
if s.senders == nil {
|
||||
s.senders = make([]*librtp.RtpSender, transStream.TrackCount())
|
||||
utils.Assert(transStream.TrackCount() > 0)
|
||||
if s.senders != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
s.senders = make([]*librtp.RtpSender, transStream.TrackCount())
|
||||
// sdp回调给sink, sink应答给describe请求
|
||||
if s.sdpCb != nil {
|
||||
s.sdpCb(transStream.(*TransStream).sdp)
|
||||
s.sdpCb = nil
|
||||
if s.cb != nil {
|
||||
s.cb(transStream.(*TransStream).sdp)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user