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