mirror of
https://gitee.com/xia-chu/ZLMediaKit.git
synced 2026-05-06 10:57:50 +08:00
修复mp4_as_player设置为1时,on_stream_none_reader回调无效流信息的问题 (#4725)
This commit is contained in:
parent
9bff057860
commit
ee05ae159a
@ -319,7 +319,7 @@ bool MultiMediaSourceMuxer::setupRecord(Recorder::type type, bool start, const s
|
||||
if (_option.mp4_as_player && type == Recorder::type_mp4) {
|
||||
// 开启关闭mp4录制,触发观看人数变化相关事件 [AUTO-TRANSLATED:b63a8deb]
|
||||
// Turn on/off mp4 recording, trigger events related to changes in the number of viewers
|
||||
onReaderChanged(MediaSource::NullMediaSource(), totalReaderCount());
|
||||
onReaderChanged(*getAnyMediaSource(), totalReaderCount());
|
||||
}
|
||||
});
|
||||
switch (type) {
|
||||
@ -908,6 +908,24 @@ bool MultiMediaSourceMuxer::onTrackFrame_l(const Frame::Ptr &frame_in) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define TRY_SRC(muxer) \
|
||||
if (muxer) { \
|
||||
auto src = muxer->getMediaSource(); \
|
||||
if (src) { \
|
||||
return src; \
|
||||
} \
|
||||
}
|
||||
|
||||
MediaSource::Ptr MultiMediaSourceMuxer::getAnyMediaSource() const {
|
||||
TRY_SRC(_fmp4)
|
||||
TRY_SRC(_rtmp)
|
||||
TRY_SRC(_rtsp)
|
||||
TRY_SRC(_ts)
|
||||
TRY_SRC(_hls)
|
||||
TRY_SRC(_hls_fmp4)
|
||||
return MediaSource::NullMediaSource().shared_from_this();
|
||||
}
|
||||
|
||||
bool MultiMediaSourceMuxer::isEnabled(){
|
||||
GET_CONFIG(uint32_t, stream_none_reader_delay_ms, General::kStreamNoneReaderDelayMS);
|
||||
if (!_is_enable || _last_check.elapsedTime() > stream_none_reader_delay_ms) {
|
||||
|
||||
@ -237,6 +237,8 @@ protected:
|
||||
bool onTrackFrame(const Frame::Ptr &frame) override;
|
||||
bool onTrackFrame_l(const Frame::Ptr &frame);
|
||||
|
||||
MediaSource::Ptr getAnyMediaSource() const;
|
||||
|
||||
private:
|
||||
void createGopCacheIfNeed(size_t gop_count);
|
||||
std::shared_ptr<MediaSinkInterface> makeRecorder(Recorder::type type);
|
||||
|
||||
@ -73,6 +73,10 @@ public:
|
||||
_media_src->setInitSegment(getInitSegment());
|
||||
}
|
||||
|
||||
MediaSource::Ptr getMediaSource() const {
|
||||
return _media_src;
|
||||
}
|
||||
|
||||
protected:
|
||||
void onSegmentData(std::string string, uint64_t stamp, bool key_frame) override {
|
||||
if (string.empty()) {
|
||||
|
||||
@ -77,6 +77,10 @@ public:
|
||||
return _option.hls_demand ? (_clear_cache ? true : _enabled) : true;
|
||||
}
|
||||
|
||||
MediaSource::Ptr getMediaSource() const {
|
||||
return _hls ? _hls->getMediaSource() : nullptr;
|
||||
}
|
||||
|
||||
protected:
|
||||
bool _enabled = true;
|
||||
bool _clear_cache = false;
|
||||
|
||||
@ -81,6 +81,10 @@ public:
|
||||
return _option.rtmp_demand ? (_clear_cache ? true : _enabled) : true;
|
||||
}
|
||||
|
||||
MediaSource::Ptr getMediaSource() const {
|
||||
return _media_src;
|
||||
}
|
||||
|
||||
private:
|
||||
bool _enabled = true;
|
||||
bool _clear_cache = false;
|
||||
|
||||
@ -80,6 +80,10 @@ public:
|
||||
return _option.rtsp_demand ? (_clear_cache ? true : _enabled) : true;
|
||||
}
|
||||
|
||||
MediaSource::Ptr getMediaSource() const {
|
||||
return _media_src;
|
||||
}
|
||||
|
||||
private:
|
||||
bool _enabled = true;
|
||||
bool _clear_cache = false;
|
||||
|
||||
@ -68,6 +68,10 @@ public:
|
||||
return _option.ts_demand ? (_clear_cache ? true : _enabled) : true;
|
||||
}
|
||||
|
||||
MediaSource::Ptr getMediaSource() const {
|
||||
return _media_src;
|
||||
}
|
||||
|
||||
protected:
|
||||
void onWrite(std::shared_ptr<toolkit::Buffer> buffer, uint64_t timestamp, bool key_pos) override {
|
||||
if (!buffer) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user