mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2026-07-05 10:58:11 +08:00
新增媒体流flush机制:#1996
This commit is contained in:
@@ -60,7 +60,7 @@ public:
|
||||
MediaSource(RTMP_SCHEMA, vhost, app, stream_id), _ring_size(ring_size) {
|
||||
}
|
||||
|
||||
~RtmpMediaSource() override{}
|
||||
~RtmpMediaSource() override { flush(); }
|
||||
|
||||
/**
|
||||
* 获取媒体源的环形缓冲
|
||||
|
||||
@@ -26,9 +26,9 @@
|
||||
|
||||
namespace mediakit {
|
||||
|
||||
class RtmpMediaSourceImp: public RtmpMediaSource, private TrackListener, public MultiMediaSourceMuxer::Listener {
|
||||
class RtmpMediaSourceImp final : public RtmpMediaSource, private TrackListener, public MultiMediaSourceMuxer::Listener {
|
||||
public:
|
||||
typedef std::shared_ptr<RtmpMediaSourceImp> Ptr;
|
||||
using Ptr = std::shared_ptr<RtmpMediaSourceImp>;
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
@@ -42,7 +42,7 @@ public:
|
||||
_demuxer->setTrackListener(this);
|
||||
}
|
||||
|
||||
~RtmpMediaSourceImp() = default;
|
||||
~RtmpMediaSourceImp() override = default;
|
||||
|
||||
/**
|
||||
* 设置metadata
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
|
||||
namespace mediakit {
|
||||
|
||||
class RtmpMediaSourceMuxer : public RtmpMuxer, public MediaSourceEventInterceptor,
|
||||
public std::enable_shared_from_this<RtmpMediaSourceMuxer> {
|
||||
class RtmpMediaSourceMuxer final : public RtmpMuxer, public MediaSourceEventInterceptor,
|
||||
public std::enable_shared_from_this<RtmpMediaSourceMuxer> {
|
||||
public:
|
||||
typedef std::shared_ptr<RtmpMediaSourceMuxer> Ptr;
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
getRtmpRing()->setDelegate(_media_src);
|
||||
}
|
||||
|
||||
~RtmpMediaSourceMuxer() override{}
|
||||
~RtmpMediaSourceMuxer() override { RtmpMuxer::flush(); }
|
||||
|
||||
void setListener(const std::weak_ptr<MediaSourceEvent> &listener){
|
||||
setDelegate(listener);
|
||||
|
||||
@@ -43,6 +43,14 @@ bool RtmpMuxer::inputFrame(const Frame::Ptr &frame) {
|
||||
return encoder ? encoder->inputFrame(frame) : false;
|
||||
}
|
||||
|
||||
void RtmpMuxer::flush() {
|
||||
for (auto &encoder : _encoder) {
|
||||
if (encoder) {
|
||||
encoder->flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RtmpMuxer::makeConfigPacket(){
|
||||
for(auto &encoder : _encoder){
|
||||
if(encoder){
|
||||
|
||||
@@ -51,6 +51,11 @@ public:
|
||||
*/
|
||||
bool inputFrame(const Frame::Ptr &frame) override;
|
||||
|
||||
/**
|
||||
* 刷新输出所有frame缓存
|
||||
*/
|
||||
void flush() override;
|
||||
|
||||
/**
|
||||
* 重置所有track
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user