VOID gst_kvs_plugin_class_init()

in gst/gst-kvs-plugin/src/GstPlugin.c [179:379]


VOID gst_kvs_plugin_class_init(GstKvsPluginClass* klass)
{
    GObjectClass* gobject_class;
    GstElementClass* gstelement_class;

    gobject_class = G_OBJECT_CLASS(klass);
    gstelement_class = GST_ELEMENT_CLASS(klass);

    gobject_class->set_property = gst_kvs_plugin_set_property;
    gobject_class->get_property = gst_kvs_plugin_get_property;
    gobject_class->finalize = gst_kvs_plugin_finalize;

    g_object_class_install_property(gobject_class, PROP_STREAM_NAME,
                                    g_param_spec_string("stream-name", "Stream Name", "Name of the destination stream", DEFAULT_STREAM_NAME,
                                                        (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_CHANNEL_NAME,
                                    g_param_spec_string("channel-name", "Channel Name", "Name of the signaling channel", DEFAULT_CHANNEL_NAME,
                                                        (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_RETENTION_PERIOD,
                                    g_param_spec_uint("retention-period", "Retention Period", "Length of time stream is preserved. Unit: hours", 0,
                                                      G_MAXUINT, DEFAULT_RETENTION_PERIOD_HOURS,
                                                      (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_STREAMING_TYPE,
                                    g_param_spec_enum("streaming-type", "Streaming Type", "KVS Producer streaming type",
                                                      GST_TYPE_KVS_PLUGIN_STREAMING_TYPE,
                                                      DEFAULT_STREAMING_TYPE, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_WEBRTC_CONNECTION_MODE,
                                    g_param_spec_enum("webrtc-connection-mode", "WebRTC connection mode",
                                                      "WebRTC connection mode - Default, Turn only, P2P only",
                                                      GST_TYPE_KVS_PLUGIN_WEBRTC_CONNECTION_MODE,
                                                      DEFAULT_WEBRTC_CONNECTION_MODE, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_CONTENT_TYPE,
                                    g_param_spec_string("content-type", "Content Type", "content type", MKV_H264_CONTENT_TYPE,
                                                        (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_MAX_LATENCY,
                                    g_param_spec_uint("max-latency", "Max Latency", "Max Latency. Unit: seconds", 0, G_MAXUINT,
                                                      DEFAULT_MAX_LATENCY_SECONDS, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_FRAGMENT_DURATION,
                                    g_param_spec_uint("fragment-duration", "Fragment Duration", "Fragment Duration. Unit: miliseconds", 0, G_MAXUINT,
                                                      DEFAULT_FRAGMENT_DURATION_MILLISECONDS,
                                                      (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_TIMECODE_SCALE,
                                    g_param_spec_uint("timecode-scale", "Timecode Scale", "Timecode Scale. Unit: milliseconds", 0, G_MAXUINT,
                                                      DEFAULT_TIMECODE_SCALE_MILLISECONDS,
                                                      (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_KEY_FRAME_FRAGMENTATION,
                                    g_param_spec_boolean("key-frame-fragmentation", "Do key frame fragmentation", "If true, generate new fragment on each keyframe, otherwise generate new fragment on first keyframe after fragment-duration has passed.",
                                                         DEFAULT_KEY_FRAME_FRAGMENTATION,
                                                         (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_FRAME_TIMECODES,
                                    g_param_spec_boolean("frame-timecodes", "Do frame timecodes", "Do frame timecodes", DEFAULT_FRAME_TIMECODES,
                                                         (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_ABSOLUTE_FRAGMENT_TIMES,
                                    g_param_spec_boolean("absolute-fragment-times", "Use absolute fragment time", "Use absolute fragment time",
                                                         DEFAULT_ABSOLUTE_FRAGMENT_TIMES, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_FRAGMENT_ACKS,
                                    g_param_spec_boolean("fragment-acks", "Do fragment acks", "Do fragment acks", DEFAULT_FRAGMENT_ACKS,
                                                         (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_RESTART_ON_ERROR,
                                    g_param_spec_boolean("restart-on-error", "Do restart on error", "Do restart on error", DEFAULT_RESTART_ON_ERROR,
                                                         (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_RECALCULATE_METRICS,
                                    g_param_spec_boolean("recalculate-metrics", "Do recalculate metrics", "Do recalculate metrics",
                                                         DEFAULT_RECALCULATE_METRICS, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_ADAPT_CPD_NALS_TO_AVC,
                                    g_param_spec_boolean("adapt-cpd-nals", "Whether to adapt CPD NALs from Annex-B to AvCC format", "Adapt CPD NALs",
                                                         DEFAULT_ADAPT_CPD_NALS, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_ADAPT_FRAME_NALS_TO_AVC,
                                    g_param_spec_boolean("adapt-frame-nals", "Whether to adapt Frame NALs from Annex-B to AvCC format",
                                                         "Adapt Frame NALs", DEFAULT_ADAPT_FRAME_NALS,
                                                         (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_FRAMERATE,
                                    g_param_spec_uint("framerate", "Framerate", "Framerate", 0, G_MAXUINT, DEFAULT_STREAM_FRAMERATE,
                                                      (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_AVG_BANDWIDTH_BPS,
                                    g_param_spec_uint("avg-bandwidth-bps", "Average bandwidth bps", "Average bandwidth bps", 0, G_MAXUINT,
                                                      DEFAULT_AVG_BANDWIDTH_BPS, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_BUFFER_DURATION,
                                    g_param_spec_uint("buffer-duration", "Buffer duration", "Buffer duration. Unit: seconds", 0, G_MAXUINT,
                                                      DEFAULT_BUFFER_DURATION_SECONDS, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_REPLAY_DURATION,
                                    g_param_spec_uint("replay-duration", "Replay duration", "Replay duration. Unit: seconds", 0, G_MAXUINT,
                                                      DEFAULT_REPLAY_DURATION_SECONDS, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_CONNECTION_STALENESS,
                                    g_param_spec_uint("connection-staleness", "Connection staleness", "Connection staleness. Unit: seconds", 0,
                                                      G_MAXUINT, DEFAULT_CONNECTION_STALENESS_SECONDS,
                                                      (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_CODEC_ID,
                                    g_param_spec_string("codec-id", "Codec ID", "Codec ID",
                                                        DEFAULT_CODEC_ID_H264,
                                                        (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_ACCESS_KEY,
                                    g_param_spec_string("access-key", "Access Key", "AWS Access Key", DEFAULT_ACCESS_KEY,
                                                        (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_SECRET_KEY,
                                    g_param_spec_string("secret-key", "Secret Key", "AWS Secret Key", DEFAULT_SECRET_KEY,
                                                        (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_AWS_REGION,
                                    g_param_spec_string("aws-region", "AWS Region", "AWS Region",
                                                        DEFAULT_REGION,
                                                        (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_ROTATION_PERIOD,
                                    g_param_spec_uint("rotation-period", "Rotation Period", "Rotation Period. Unit: seconds", 0, G_MAXUINT,
                                                      DEFAULT_ROTATION_PERIOD_SECONDS, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_LOG_LEVEL,
                                    g_param_spec_uint("log-level", "Logging Level", "Logging Verbosity Level", LOG_LEVEL_VERBOSE,
                                                      LOG_LEVEL_SILENT + 1, LOG_LEVEL_SILENT + 1,
                                                      (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_FILE_LOG_PATH,
                                    g_param_spec_string("log-path", "Log path",
                                                        "Specifying the directory where the file-based logger will store the files. ",
                                                        DEFAULT_FILE_LOG_PATH, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_STORAGE_SIZE,
                                    g_param_spec_uint("storage-size", "Storage Size", "Storage Size. Unit: MB", 0, G_MAXUINT, DEFAULT_STORAGE_SIZE_MB,
                                                      (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_CREDENTIAL_FILE_PATH,
                                    g_param_spec_string("credential-path", "Credential File Path", "Credential File Path",
                                                        DEFAULT_CREDENTIAL_FILE_PATH, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_IOT_CERTIFICATE,
                                    g_param_spec_boxed("iot-certificate", "Iot Certificate", "Use aws iot certificate to obtain credentials",
                                                       GST_TYPE_STRUCTURE, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_STREAM_TAGS,
                                    g_param_spec_boxed("stream-tags", "Stream Tags", "key-value pair that you can define and assign to each stream",
                                                       GST_TYPE_STRUCTURE, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_FILE_START_TIME,
                                    g_param_spec_uint64("file-start-time", "File Start Time",                            "Epoch time that the file starts in kinesis video stream. By default, current time is used. Unit: Seconds",
                                                        0, G_MAXULONG, 0,
                                                        (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_DISABLE_BUFFER_CLIPPING,
                                    g_param_spec_boolean("disable-buffer-clipping", "Disable Buffer Clipping",
                                                         "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,
                                                         (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_TRICKLE_ICE,
                                    g_param_spec_boolean("trickle-ice", "Enable Trickle ICE", "Whether to use tricle ICE mode",
                                                         DEFAULT_TRICKLE_ICE_MODE, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_ENABLE_STREAMING,
                                    g_param_spec_boolean("enable-streaming", "Enable Streaming", "Whether to enable streaming frames to KVS",
                                                         DEFAULT_ENABLE_STREAMING, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_WEBRTC_CONNECT,
                                    g_param_spec_boolean("connect-webrtc", "WebRTC Connect", "Whether to connect to WebRTC signaling channel",
                                                         DEFAULT_WEBRTC_CONNECT, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_STREAM_CREATE_TIMEOUT,
                                    g_param_spec_uint("stream-create-timeout", "Stream creation timeout", "Stream create timeout. Unit: seconds", 0,
                                                      G_MAXUINT, DEFAULT_STREAM_CREATE_TIMEOUT_SECONDS,
                                                      (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    g_object_class_install_property(gobject_class, PROP_STREAM_STOP_TIMEOUT,
                                    g_param_spec_uint("stream-stop-timeout", "Stream stop timeout", "Stream stop timeout. Unit: seconds", 0,
                                                      G_MAXUINT, DEFAULT_STREAM_STOP_TIMEOUT_SECONDS,
                                                      (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));

    gst_element_class_set_static_metadata(gstelement_class, "KVS Plugin", "Sink/Video/Network", "GStreamer AWS KVS plugin",
                                          "AWS KVS <kinesis-video-support@amazon.com>");

    gst_element_class_add_pad_template(gstelement_class, gst_static_pad_template_get(&audiosink_templ));
    gst_element_class_add_pad_template(gstelement_class, gst_static_pad_template_get(&videosink_templ));

    gstelement_class->change_state = GST_DEBUG_FUNCPTR(gst_kvs_plugin_change_state);
    gstelement_class->request_new_pad = GST_DEBUG_FUNCPTR(gst_kvs_plugin_request_new_pad);
    gstelement_class->release_pad = GST_DEBUG_FUNCPTR(gst_kvs_plugin_release_pad);
}