Compare commits

..

2 Commits

Author SHA1 Message Date
xia-chu
4c90a1a95b 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
2024-10-18 22:22:13 +08:00
xia-chu
6fcf7f81a4 The Docker image removes unnecessary dependencies 2024-10-18 21:53:46 +08:00
4 changed files with 15 additions and 18 deletions

@ -1 +1 @@
Subproject commit 46231014e2a7ec1903d4a37e96222481ecc779d8 Subproject commit 08c094ea14f259ecf0c356e6243cb47ee96ce292

View File

@ -25,13 +25,8 @@ RUN apt-get update && \
ca-certificates \ ca-certificates \
tzdata \ tzdata \
libssl-dev \ libssl-dev \
libmysqlclient-dev \
libx264-dev \
libfaac-dev \
gcc \ gcc \
g++ \ g++ \
libavcodec-dev libavutil-dev libswscale-dev libresample-dev \
libsdl-dev libusrsctp-dev \
gdb && \ gdb && \
apt-get autoremove -y && \ apt-get autoremove -y && \
apt-get clean -y && \ apt-get clean -y && \
@ -69,13 +64,9 @@ RUN apt-get update && \
tzdata \ tzdata \
curl \ curl \
libssl-dev \ libssl-dev \
libx264-dev \
libfaac-dev \
ffmpeg \ ffmpeg \
gcc \ gcc \
g++ \ g++ \
libavcodec-dev libavutil-dev libswscale-dev libresample-dev \
libsdl-dev libusrsctp-dev \
gdb && \ gdb && \
apt-get autoremove -y && \ apt-get autoremove -y && \
apt-get clean -y && \ apt-get clean -y && \

View File

@ -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());
} }

View File

@ -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;