mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-22 10:40:05 +08:00
Instantly enable recording support for GOP caching
Some checks failed
Android / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Docker / build (push) Has been cancelled
Linux / build (push) Has been cancelled
macOS / build (push) Has been cancelled
Windows / build (push) Has been cancelled
Some checks failed
Android / build (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Docker / build (push) Has been cancelled
Linux / build (push) Has been cancelled
macOS / build (push) Has been cancelled
Windows / build (push) Has been cancelled
This commit is contained in:
parent
6fcf7f81a4
commit
4c90a1a95b
@ -1 +1 @@
|
|||||||
Subproject commit 46231014e2a7ec1903d4a37e96222481ecc779d8
|
Subproject commit 08c094ea14f259ecf0c356e6243cb47ee96ce292
|
@ -122,12 +122,17 @@ private:
|
|||||||
std::list<std::pair<uint64_t, Frame::Ptr>> _cache;
|
std::list<std::pair<uint64_t, Frame::Ptr>> _cache;
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::shared_ptr<MediaSinkInterface> makeRecorder(MediaSource &sender, const vector<Track::Ptr> &tracks, Recorder::type type, const ProtocolOption &option){
|
std::shared_ptr<MediaSinkInterface> MultiMediaSourceMuxer::makeRecorder(MediaSource &sender, Recorder::type type) {
|
||||||
auto recorder = Recorder::createRecorder(type, sender.getMediaTuple(), option);
|
auto recorder = Recorder::createRecorder(type, sender.getMediaTuple(), _option);
|
||||||
for (auto &track : tracks) {
|
for (auto &track : getTracks()) {
|
||||||
recorder->addTrack(track);
|
recorder->addTrack(track);
|
||||||
}
|
}
|
||||||
recorder->addTrackCompleted();
|
recorder->addTrackCompleted();
|
||||||
|
if (_ring) {
|
||||||
|
_ring->flushGop([&](const Frame::Ptr &frame) {
|
||||||
|
recorder->inputFrame(frame);
|
||||||
|
});
|
||||||
|
}
|
||||||
return recorder;
|
return recorder;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,7 +310,7 @@ bool MultiMediaSourceMuxer::setupRecord(MediaSource &sender, Recorder::type type
|
|||||||
// 开始录制 [AUTO-TRANSLATED:36d99250]
|
// 开始录制 [AUTO-TRANSLATED:36d99250]
|
||||||
// Start recording
|
// Start recording
|
||||||
_option.hls_save_path = custom_path;
|
_option.hls_save_path = custom_path;
|
||||||
auto hls = dynamic_pointer_cast<HlsRecorder>(makeRecorder(sender, getTracks(), type, _option));
|
auto hls = dynamic_pointer_cast<HlsRecorder>(makeRecorder(sender, type));
|
||||||
if (hls) {
|
if (hls) {
|
||||||
// 设置HlsMediaSource的事件监听器 [AUTO-TRANSLATED:69990c92]
|
// 设置HlsMediaSource的事件监听器 [AUTO-TRANSLATED:69990c92]
|
||||||
// Set the event listener for HlsMediaSource
|
// Set the event listener for HlsMediaSource
|
||||||
@ -325,7 +330,7 @@ bool MultiMediaSourceMuxer::setupRecord(MediaSource &sender, Recorder::type type
|
|||||||
// Start recording
|
// Start recording
|
||||||
_option.mp4_save_path = custom_path;
|
_option.mp4_save_path = custom_path;
|
||||||
_option.mp4_max_second = max_second;
|
_option.mp4_max_second = max_second;
|
||||||
_mp4 = makeRecorder(sender, getTracks(), type, _option);
|
_mp4 = makeRecorder(sender, type);
|
||||||
} else if (!start && _mp4) {
|
} else if (!start && _mp4) {
|
||||||
// 停止录制 [AUTO-TRANSLATED:3dee9292]
|
// 停止录制 [AUTO-TRANSLATED:3dee9292]
|
||||||
// Stop recording
|
// Stop recording
|
||||||
@ -338,7 +343,7 @@ bool MultiMediaSourceMuxer::setupRecord(MediaSource &sender, Recorder::type type
|
|||||||
// 开始录制 [AUTO-TRANSLATED:36d99250]
|
// 开始录制 [AUTO-TRANSLATED:36d99250]
|
||||||
// Start recording
|
// Start recording
|
||||||
_option.hls_save_path = custom_path;
|
_option.hls_save_path = custom_path;
|
||||||
auto hls = dynamic_pointer_cast<HlsFMP4Recorder>(makeRecorder(sender, getTracks(), type, _option));
|
auto hls = dynamic_pointer_cast<HlsFMP4Recorder>(makeRecorder(sender, type));
|
||||||
if (hls) {
|
if (hls) {
|
||||||
// 设置HlsMediaSource的事件监听器 [AUTO-TRANSLATED:69990c92]
|
// 设置HlsMediaSource的事件监听器 [AUTO-TRANSLATED:69990c92]
|
||||||
// Set the event listener for HlsMediaSource
|
// Set the event listener for HlsMediaSource
|
||||||
@ -354,7 +359,7 @@ bool MultiMediaSourceMuxer::setupRecord(MediaSource &sender, Recorder::type type
|
|||||||
}
|
}
|
||||||
case Recorder::type_fmp4: {
|
case Recorder::type_fmp4: {
|
||||||
if (start && !_fmp4) {
|
if (start && !_fmp4) {
|
||||||
auto fmp4 = dynamic_pointer_cast<FMP4MediaSourceMuxer>(makeRecorder(sender, getTracks(), type, _option));
|
auto fmp4 = dynamic_pointer_cast<FMP4MediaSourceMuxer>(makeRecorder(sender, type));
|
||||||
if (fmp4) {
|
if (fmp4) {
|
||||||
fmp4->setListener(shared_from_this());
|
fmp4->setListener(shared_from_this());
|
||||||
}
|
}
|
||||||
@ -366,7 +371,7 @@ bool MultiMediaSourceMuxer::setupRecord(MediaSource &sender, Recorder::type type
|
|||||||
}
|
}
|
||||||
case Recorder::type_ts: {
|
case Recorder::type_ts: {
|
||||||
if (start && !_ts) {
|
if (start && !_ts) {
|
||||||
auto ts = dynamic_pointer_cast<TSMediaSourceMuxer>(makeRecorder(sender, getTracks(), type, _option));
|
auto ts = dynamic_pointer_cast<TSMediaSourceMuxer>(makeRecorder(sender, type));
|
||||||
if (ts) {
|
if (ts) {
|
||||||
ts->setListener(shared_from_this());
|
ts->setListener(shared_from_this());
|
||||||
}
|
}
|
||||||
|
@ -232,6 +232,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void createGopCacheIfNeed();
|
void createGopCacheIfNeed();
|
||||||
|
std::shared_ptr<MediaSinkInterface> makeRecorder(MediaSource &sender, Recorder::type type);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool _is_enable = false;
|
bool _is_enable = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user