Merge pull request #621 from Palakis/feature/current-recording-filename

Feature/current recording filename
This commit is contained in:
Stéphane Lepin 2020-11-29 12:39:49 +01:00 committed by GitHub
commit aceb437c5f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 46 additions and 4 deletions

View File

@ -696,6 +696,29 @@ bool Utils::SetFilenameFormatting(const char* filenameFormatting) {
return true; return true;
} }
const char* Utils::GetCurrentRecordingFilename()
{
OBSOutputAutoRelease recordingOutput = obs_frontend_get_recording_output();
if (!recordingOutput) {
return nullptr;
}
OBSDataAutoRelease settings = obs_output_get_settings(recordingOutput);
// mimicks the behavior of BasicOutputHandler::GetRecordingFilename :
// try to fetch the path from the "url" property, then try "path" if the first one
// didn't yield any result
OBSDataItemAutoRelease item = obs_data_item_byname(settings, "url");
if (!item) {
item = obs_data_item_byname(settings, "path");
if (!item) {
return nullptr;
}
}
return obs_data_item_get_string(item);
}
// Transform properties copy-pasted from WSRequestHandler_SceneItems.cpp because typedefs can't be extended yet // Transform properties copy-pasted from WSRequestHandler_SceneItems.cpp because typedefs can't be extended yet
/** /**

View File

@ -85,6 +85,8 @@ namespace Utils {
const char* GetFilenameFormatting(); const char* GetFilenameFormatting();
bool SetFilenameFormatting(const char* filenameFormatting); bool SetFilenameFormatting(const char* filenameFormatting);
const char* GetCurrentRecordingFilename();
QString nsToTimestamp(uint64_t ns); QString nsToTimestamp(uint64_t ns);
struct AddSourceData { struct AddSourceData {
obs_source_t *source; obs_source_t *source;

View File

@ -678,7 +678,10 @@ void WSEvents::OnStreamStopped() {
/** /**
* A request to start recording has been issued. * A request to start recording has been issued.
* *
* Note: `recordingFilename` is not provided in this event because this information
* is not available at the time this event is emitted.
*
* @api events * @api events
* @name RecordingStarting * @name RecordingStarting
* @category recording * @category recording
@ -691,37 +694,49 @@ void WSEvents::OnRecordingStarting() {
/** /**
* Recording started successfully. * Recording started successfully.
* *
* @return {String} `recordingFilename` Absolute path to the file of the current recording.
*
* @api events * @api events
* @name RecordingStarted * @name RecordingStarted
* @category recording * @category recording
* @since 0.3 * @since 0.3
*/ */
void WSEvents::OnRecordingStarted() { void WSEvents::OnRecordingStarted() {
broadcastUpdate("RecordingStarted"); OBSDataAutoRelease data = obs_data_create();
obs_data_set_string(data, "recordingFilename", Utils::GetCurrentRecordingFilename());
broadcastUpdate("RecordingStarted", data);
} }
/** /**
* A request to stop recording has been issued. * A request to stop recording has been issued.
* *
* @return {String} `recordingFilename` Absolute path to the file of the current recording.
*
* @api events * @api events
* @name RecordingStopping * @name RecordingStopping
* @category recording * @category recording
* @since 0.3 * @since 0.3
*/ */
void WSEvents::OnRecordingStopping() { void WSEvents::OnRecordingStopping() {
broadcastUpdate("RecordingStopping"); OBSDataAutoRelease data = obs_data_create();
obs_data_set_string(data, "recordingFilename", Utils::GetCurrentRecordingFilename());
broadcastUpdate("RecordingStopping", data);
} }
/** /**
* Recording stopped successfully. * Recording stopped successfully.
* *
* @return {String} `recordingFilename` Absolute path to the file of the current recording.
*
* @api events * @api events
* @name RecordingStopped * @name RecordingStopped
* @category recording * @category recording
* @since 0.3 * @since 0.3
*/ */
void WSEvents::OnRecordingStopped() { void WSEvents::OnRecordingStopped() {
broadcastUpdate("RecordingStopped"); OBSDataAutoRelease data = obs_data_create();
obs_data_set_string(data, "recordingFilename", Utils::GetCurrentRecordingFilename());
broadcastUpdate("RecordingStopped", data);
} }
/** /**

View File

@ -21,6 +21,7 @@ RpcResponse ifCanPause(const RpcRequest& request, std::function<RpcResponse()> c
* @return {boolean} `isRecording` Current recording status. * @return {boolean} `isRecording` Current recording status.
* @return {boolean} `isRecordingPaused` Whether the recording is paused or not. * @return {boolean} `isRecordingPaused` Whether the recording is paused or not.
* @return {String (optional)} `recordTimecode` Time elapsed since recording started (only present if currently recording). * @return {String (optional)} `recordTimecode` Time elapsed since recording started (only present if currently recording).
* @return {String (optional)} `recordingFilename` Absolute path to the recording file (only present if currently recording).
* *
* @api requests * @api requests
* @name GetRecordingStatus * @name GetRecordingStatus
@ -37,6 +38,7 @@ RpcResponse WSRequestHandler::GetRecordingStatus(const RpcRequest& request) {
if (obs_frontend_recording_active()) { if (obs_frontend_recording_active()) {
QString recordingTimecode = events->getRecordingTimecode(); QString recordingTimecode = events->getRecordingTimecode();
obs_data_set_string(data, "recordTimecode", recordingTimecode.toUtf8().constData()); obs_data_set_string(data, "recordTimecode", recordingTimecode.toUtf8().constData());
obs_data_set_string(data, "recordingFilename", Utils::GetCurrentRecordingFilename());
} }
return request.success(data); return request.success(data);