Skip to content

Commit 384a12f

Browse files
committed
introduce putEventMetadata
1 parent c85fc0a commit 384a12f

File tree

5 files changed

+35
-13
lines changed

5 files changed

+35
-13
lines changed

samples/kvssink_gstreamer_sample.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ int gstreamer_live_source_init(int argc, char *argv[], CustomData *data, GstElem
599599
gst_caps_unref(h264_caps);
600600

601601
/* configure kvssink */
602-
g_object_set(G_OBJECT(kvssink), "stream-name", data->stream_name, "storage-size", 128, "support-images-callback", (gpointer) get_images_metadata, NULL);
602+
g_object_set(G_OBJECT(kvssink), "stream-name", data->stream_name, "storage-size", 128, NULL);
603603
determine_credentials(kvssink, data);
604604

605605
/* build the pipeline */

src/KinesisVideoStream.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,17 @@ bool KinesisVideoStream::putFragmentMetadata(const std::string &name, const std:
181181
LOG_ERROR("Failed to insert fragment metadata with: " << status << " for " << this->stream_name_);
182182
return false;
183183
}
184+
185+
return true;
186+
}
187+
188+
bool KinesisVideoStream::putEventMetadata(STREAM_EVENT_TYPE event, PStreamEventMetadata pStreamEventMetadata){
189+
STATUS status = ::putKinesisVideoEventMetadata(stream_handle_, event, pStreamEventMetadata);
190+
if (STATUS_FAILED(status)) {
191+
LOG_ERROR("Failed to insert fragment metadata with: " << status << " for " << this->stream_name_);
192+
return false;
193+
}
194+
184195
return true;
185196
}
186197

src/KinesisVideoStream.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,18 @@ class KinesisVideoStream {
8383
*/
8484
bool putFragmentMetadata(const std::string& name, const std::string& value, bool persistent = true);
8585

86+
/*
87+
* Inserts a KVS event(s) accompanied by optional metadata (key/value string pairs) into the stream.
88+
* Multiple events can be submitted at once by using bitwise OR of event types, or multiple calls of this
89+
* function with different unique events.
90+
* @param 1 STREAM_EVENT_TYPE - the type of event(s), a value from STREAM_EVENT_TYPE enum. If
91+
* if you want to submit multiple events in one call it is suggested to use bit-wise
92+
* OR combination from STREAM_EVENT_TYPE enum.
93+
* @param 2 PStreamEventMetadata - pointer to struct with optional metadata. This metadata will be applied
94+
* to all events included in THIS function call.
95+
*/
96+
bool putEventMetadata(STREAM_EVENT_TYPE event, PStreamEventMetadata pStreamEventMetadata);
97+
8698
/**
8799
* Initializes the track identified by trackId with a hex-encoded codec private data
88100
* and puts the stream in a state that it is ready to receive frames via putFrame().

src/gstreamer/gstkvssink.cpp

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ enum {
181181
PROP_STREAM_TAGS,
182182
PROP_FILE_START_TIME,
183183
PROP_DISABLE_BUFFER_CLIPPING,
184-
PROP_SUPPORT_IMAGES_CALLBACK,
184+
PROP_GENERATE_IMAGES,
185185
PROP_USE_ORIGINAL_PTS,
186186
PROP_GET_METRICS,
187187
PROP_ALLOW_CREATE_STREAM,
@@ -666,9 +666,9 @@ gst_kvs_sink_class_init(GstKvsSinkClass *klass) {
666666
"Set to true only if your src/mux elements produce GST_CLOCK_TIME_NONE for segment start times. It is non-standard behavior to set this to true, only use if there are known issues with your src/mux segment start/stop times.", DEFAULT_DISABLE_BUFFER_CLIPPING,
667667
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
668668

669-
g_object_class_install_property (gobject_class, PROP_SUPPORT_IMAGES_CALLBACK,
670-
g_param_spec_pointer ("support-images-callback", "Support images",
671-
"Set to true only if you want to enable KVS events in fragment metadata.",
669+
g_object_class_install_property (gobject_class, PROP_GENERATE_IMAGES,
670+
g_param_spec_pointer ("generate-images", "Generate images for every key frame",
671+
"Set to true only if you want to enable generating images.",
672672
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
673673

674674
g_object_class_install_property (gobject_class, PROP_USE_ORIGINAL_PTS,
@@ -905,8 +905,8 @@ gst_kvs_sink_set_property(GObject *object, guint prop_id,
905905
case PROP_STORAGE_SIZE:
906906
kvssink->storage_size = g_value_get_uint (value);
907907
break;
908-
case PROP_SUPPORT_IMAGES_CALLBACK:
909-
kvssink->support_images_callback = (SupportImagesCallback) g_value_get_pointer(value);
908+
case PROP_GENERATE_IMAGES:
909+
kvssink->generate_images = g_value_get_boolean(value);
910910
break;
911911
case PROP_STOP_STREAM_TIMEOUT:
912912
kvssink->stop_stream_timeout = g_value_get_uint (value);
@@ -1054,8 +1054,8 @@ gst_kvs_sink_get_property(GObject *object, guint prop_id, GValue *value,
10541054
case PROP_STORAGE_SIZE:
10551055
g_value_set_uint (value, kvssink->storage_size);
10561056
break;
1057-
case PROP_SUPPORT_IMAGES_CALLBACK:
1058-
g_value_set_pointer (value, (gpointer) kvssink->support_images_callback);
1057+
case PROP_GENERATE_IMAGES:
1058+
g_value_set_boolean (value, kvssink->generate_images);
10591059
break;
10601060
case PROP_STOP_STREAM_TIMEOUT:
10611061
g_value_set_uint (value, kvssink->stop_stream_timeout);
@@ -1384,10 +1384,8 @@ gst_kvs_sink_handle_buffer (GstCollectPads * pads,
13841384
std::chrono::nanoseconds(buf->dts), kinesis_video_flags, track_id, data->frame_count);
13851385
data->frame_count++;
13861386

1387-
if (CHECK_FRAME_FLAG_KEY_FRAME(kinesis_video_flags) && kvssink->support_images_callback != NULL) {
1388-
std::tuple<std::string, std::string, bool> metadata = kvssink->support_images_callback();
1389-
put_fragment_metadata(GST_ELEMENT_CAST (kvssink), std::get<0>(metadata), std::get<1>(metadata),
1390-
std::get<2>(metadata));
1387+
if (CHECK_FRAME_FLAG_KEY_FRAME(kinesis_video_flags) && kvssink->generate_images) {
1388+
data->kinesis_video_stream->putEventMetadata(STREAM_EVENT_TYPE_IMAGE_GENERATION, NULL);
13911389
}
13921390
}
13931391
else {

src/gstreamer/gstkvssink.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ struct _GstKvsSink {
115115
gboolean recalculate_metrics;
116116
gboolean allow_create_stream;
117117
gboolean disable_buffer_clipping;
118+
gboolean generate_images;
118119
guint framerate;
119120
guint avg_bandwidth_bps;
120121
guint buffer_duration_seconds;

0 commit comments

Comments
 (0)