@@ -137,6 +137,8 @@ GST_DEBUG_CATEGORY_STATIC (gst_kvs_sink_debug);
137137
138138#define MAX_GSTREAMER_MEDIA_TYPE_LEN 16
139139
140+ #define INTERNAL_CHECK_PREFIX " Assertion failed:"
141+
140142namespace KvsSinkSignals {
141143 guint err_signal_id;
142144 guint ack_signal_id;
@@ -261,6 +263,11 @@ void closed(UINT64 custom_data, STREAM_HANDLE stream_handle, UPLOAD_HANDLE uploa
261263void kinesis_video_producer_init (GstKvsSink *kvssink)
262264{
263265 auto data = kvssink->data ;
266+
267+ if (kvssink->stream_name == NULL ) {
268+ throw runtime_error (string (INTERNAL_CHECK_PREFIX) + " kvssink->stream_name is unexpectedly NULL!" );
269+ }
270+
264271 unique_ptr<DeviceInfoProvider> device_info_provider (new KvsSinkDeviceInfoProvider (kvssink->storage_size ,
265272 kvssink->stop_stream_timeout ,
266273 kvssink->service_connection_timeout ,
@@ -302,11 +309,11 @@ void kinesis_video_producer_init(GstKvsSink *kvssink)
302309 }
303310
304311 } else {
305- access_key_str = string (kvssink->access_key );
306- secret_key_str = string (kvssink->secret_key );
312+ access_key_str = kvssink-> access_key ? string (kvssink->access_key ) : " " ;
313+ secret_key_str = kvssink-> secret_key ? string (kvssink->secret_key ) : " " ;
307314 }
308315
309- // Handle session token seperately , since this is optional with long term credentials
316+ // Handle session token separately , since this is optional with long term credentials
310317 if (0 == strcmp (kvssink->session_token , DEFAULT_SESSION_TOKEN)) {
311318 session_token_str = " " ;
312319 if (nullptr != (session_token = getenv (SESSION_TOKEN_ENV_VAR))) {
@@ -370,6 +377,11 @@ void kinesis_video_producer_init(GstKvsSink *kvssink)
370377 LOG_INFO (" Getting URL from env for " << kvssink->stream_name );
371378 control_plane_uri_str = string (control_plane_uri);
372379 }
380+
381+ if (kvssink->user_agent == NULL ) {
382+ throw runtime_error (string (INTERNAL_CHECK_PREFIX) + " kvssink->user_agent is unexpectedly NULL!" );
383+ }
384+
373385 LOG_INFO (" User agent string: " << kvssink->user_agent );
374386 data->kinesis_video_producer = KinesisVideoProducer::createSync (std::move (device_info_provider),
375387 std::move (client_callback_provider),
@@ -423,6 +435,13 @@ void create_kinesis_video_stream(GstKvsSink *kvssink) {
423435 break ;
424436 }
425437
438+ // StreamDefinition takes in C++ strings, check the gchar* for nullptr before constructing
439+ if (kvssink->stream_name == NULL || kvssink->content_type == NULL ||
440+ kvssink->user_agent == NULL || kvssink->kms_key_id == NULL ||
441+ kvssink->codec_id == NULL || kvssink->track_name == NULL ) {
442+ throw runtime_error (string (INTERNAL_CHECK_PREFIX) + " A string was unexpectedly NULL!" );
443+ }
444+
426445 unique_ptr<StreamDefinition> stream_definition (new StreamDefinition (kvssink->stream_name ,
427446 hours (kvssink->retention_period_hours ),
428447 p_stream_tags,
@@ -476,6 +495,15 @@ bool kinesis_video_stream_init(GstKvsSink *kvssink, string &err_msg) {
476495 create_kinesis_video_stream (kvssink);
477496 break ;
478497 } catch (runtime_error &err) {
498+
499+ // Don't retry if the error is an internal error
500+ if (STRNCMP (INTERNAL_CHECK_PREFIX, err.what (), STRLEN (INTERNAL_CHECK_PREFIX)) == 0 ) {
501+ ostringstream oss;
502+ oss << " Failed to create stream. Error: " << err.what ();
503+ err_msg = oss.str ();
504+ return false ;
505+ }
506+
479507 if (--retry_count == 0 ) {
480508 ostringstream oss;
481509 oss << " Failed to create stream. Error: " << err.what ();
@@ -1569,6 +1597,10 @@ init_track_data(GstKvsSink *kvssink) {
15691597
15701598 g_free (video_content_type);
15711599 g_free (audio_content_type);
1600+
1601+ if (kvssink->content_type == NULL ) {
1602+ throw runtime_error (string (INTERNAL_CHECK_PREFIX) + " kvssink->content_type is unexpectedly NULL!" );
1603+ }
15721604}
15731605
15741606static GstStateChangeReturn
0 commit comments