mirror of
https://github.com/lkmio/lkm.git
synced 2025-09-27 03:26:01 +08:00
fix: 拉取只存在音频的流失败问题
This commit is contained in:
@@ -107,7 +107,8 @@ func (m *mergeWritingBuffer) FlushSegment() (*collections.ReferenceCounter[[]byt
|
||||
|
||||
counter := collections.NewReferenceCounter(data)
|
||||
// 遇到完整关键帧切片, 替代前一组
|
||||
if m.hasKeyVideoDataInCurrentSegment {
|
||||
// 或者只保留最近的音频切片
|
||||
if m.hasKeyVideoDataInCurrentSegment || !m.existVideo {
|
||||
for m.lastKeyVideoDataSegments.Size() > 0 {
|
||||
segment := m.lastKeyVideoDataSegments.Pop()
|
||||
segment.Release()
|
||||
@@ -131,7 +132,7 @@ func (m *mergeWritingBuffer) FlushSegment() (*collections.ReferenceCounter[[]byt
|
||||
}
|
||||
|
||||
func (m *mergeWritingBuffer) TryFlushSegment() (*collections.ReferenceCounter[[]byte], bool) {
|
||||
if (!AppConfig.GOPCache || !m.existVideo) || m.duration >= AppConfig.MergeWriteLatency {
|
||||
if !AppConfig.GOPCache || m.duration >= AppConfig.MergeWriteLatency {
|
||||
return m.FlushSegment()
|
||||
}
|
||||
|
||||
@@ -156,7 +157,7 @@ func (m *mergeWritingBuffer) Reserve(size int) {
|
||||
}
|
||||
|
||||
func (m *mergeWritingBuffer) ReadSegmentsFromKeyFrameIndex(cb func(*collections.ReferenceCounter[[]byte])) {
|
||||
if !AppConfig.GOPCache || !m.existVideo || m.lastKeyVideoDataSegments.Size() == 0 {
|
||||
if !AppConfig.GOPCache || m.lastKeyVideoDataSegments.Size() == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
@@ -189,7 +190,7 @@ func NewMergeWritingBuffer(existVideo bool) MergeWritingBuffer {
|
||||
buffers: collections.NewQueue[*mbBuffer](24),
|
||||
}
|
||||
|
||||
if existVideo && AppConfig.GOPCache {
|
||||
if AppConfig.GOPCache {
|
||||
buffer.lastKeyVideoDataSegments = collections.NewQueue[*collections.ReferenceCounter[[]byte]](36)
|
||||
}
|
||||
|
||||
|
@@ -320,9 +320,9 @@ func (s *PublishSource) DispatchBuffer(transStream TransStream, index int, data
|
||||
|
||||
for _, sink := range sinks {
|
||||
|
||||
// 如果存在视频, 确保向sink发送的第一帧是关键帧
|
||||
if exist && sink.GetSentPacketCount() < 1 {
|
||||
if !keyVideo {
|
||||
if sink.GetSentPacketCount() < 1 {
|
||||
// 如果存在视频, 确保向sink发送的第一帧是关键帧
|
||||
if exist && !keyVideo {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -806,7 +806,7 @@ func (s *PublishSource) OnPacket(packet *avformat.AVPacket) {
|
||||
|
||||
// track超时,忽略推流数据
|
||||
if s.NotTrackAdded(packet.Index) {
|
||||
s.TransDemuxer.DiscardBackPacket(packet.BufferIndex)
|
||||
s.TransDemuxer.DiscardHeadPacket(packet.BufferIndex)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -832,9 +832,9 @@ func (s *PublishSource) OnPacket(packet *avformat.AVPacket) {
|
||||
}
|
||||
}
|
||||
|
||||
// 未开启GOP缓存或只存在音频流, 释放掉内存
|
||||
// 未开启GOP缓存或只存在音频流, 立即释放
|
||||
if !AppConfig.GOPCache || !s.existVideo {
|
||||
s.TransDemuxer.DiscardBackPacket(packet.BufferIndex)
|
||||
s.TransDemuxer.DiscardHeadPacket(packet.BufferIndex)
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user