Skip to content

Commit 6483dca

Browse files
committed
requesthandler: Add CreateRecordChapter
The new `Hybrid MP4 [BETA]` output added in OBS adds support for writing chapter markers to the file.
1 parent 71920c4 commit 6483dca

File tree

3 files changed

+37
-0
lines changed

3 files changed

+37
-0
lines changed

src/requesthandler/RequestHandler.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ const std::unordered_map<std::string, RequestMethodHandler> RequestHandler::_han
178178
{"PauseRecord", &RequestHandler::PauseRecord},
179179
{"ResumeRecord", &RequestHandler::ResumeRecord},
180180
{"SplitRecordFile", &RequestHandler::SplitRecordFile},
181+
{"CreateRecordChapter", &RequestHandler::CreateRecordChapter},
181182

182183
// Media Inputs
183184
{"GetMediaInputStatus", &RequestHandler::GetMediaInputStatus},

src/requesthandler/RequestHandler.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ class RequestHandler {
197197
RequestResult PauseRecord(const Request &);
198198
RequestResult ResumeRecord(const Request &);
199199
RequestResult SplitRecordFile(const Request &);
200+
RequestResult CreateRecordChapter(const Request &);
200201

201202
// Media Inputs
202203
RequestResult GetMediaInputStatus(const Request &);

src/requesthandler/RequestHandler_Record.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,3 +211,38 @@ RequestResult RequestHandler::SplitRecordFile(const Request &)
211211

212212
return RequestResult::Success();
213213
}
214+
215+
/**
216+
* Adds a new chapter marker to the file currently being recorded.
217+
*
218+
* Note: As of OBS 30.2.0, the only file format supporting this feature is Hybrid MP4.
219+
*
220+
* @requestField ?chapterName | String | Name of the new chapter
221+
*
222+
* @requestType CreateRecordChapter
223+
* @complexity 2
224+
* @rpcVersion -1
225+
* @initialVersion 5.5.0
226+
* @api requests
227+
* @category record
228+
*/
229+
RequestResult RequestHandler::CreateRecordChapter(const Request &request)
230+
{
231+
std::string chapterName;
232+
if (request.Contains("chapterName")) {
233+
RequestStatus::RequestStatus statusCode;
234+
std::string comment;
235+
if (!request.ValidateOptionalString("chapterName", statusCode, comment))
236+
return RequestResult::Error(statusCode, comment);
237+
chapterName = request.RequestData["chapterName"];
238+
}
239+
240+
if (!obs_frontend_recording_active())
241+
return RequestResult::Error(RequestStatus::OutputNotRunning);
242+
243+
if (!obs_frontend_recording_add_chapter(chapterName.empty() ? nullptr : chapterName.c_str()))
244+
return RequestResult::Error(RequestStatus::RequestProcessingFailed,
245+
"Verify that the output being used supports chapter markers.");
246+
247+
return RequestResult::Success();
248+
}

0 commit comments

Comments
 (0)