错误检测

流程

  1. bus=gst_element_get_bus(pipeline);
  2. msg=gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
  3. GError *err; gchar *debug_info
switch(GST_MESSAGE_TYPE(msg)) {
	case GST_MESSAGE_ERROR:
		gst_message_parse_error(msg, &err, &debug_info);
		//输出错误信息
		g_printerr("Error received from element %s: %s\n", 
			GST_OBJECT_NAME(msg->src), err->message);
		g_printerr("Debugging information: %s\n", 
			debug_info ? debug_info : "none");
		g_clear_error(&err);
		g_free(debug_info);
		break;
	case GST_MESSAGE_EOS:
		g_print("End-Of-Stream reached.\n");
		break;
	default:
		g_printerr("Unexpected message received.\n");
}

补充说明

pipeline 与 bin:管道是一种特定类型的bin,用来容纳其他元素,可应用于bin的函数就可应用于pipeline

函数与知识点

  1. GstElement *gst_element_factory_make (const gchar * factoryname, const gchar * name)
    功能:创建一个由给定元素工厂定义类型的新元素。如果名称为NULL,则该元素将获得一个保证唯一的名称,由元素工厂名称和一个数字组成。如果提供了名称,则将使用提供的名称。

    参数:
    factoryname: 要实例化的具名工厂
    name (可选): 新元素的名称,如果为NULL,则自动生成唯一名称

    返回值: (可转换: 浮动型,可为空):新的GstElement,如果无法创建元素则返回NULL

  2. videotestsrc
    介绍:videotestsrc元素用于以各种格式生成测试视频数据。可以使用"pattern"属性控制生成的视频测试数据的模式。 默认情况下,videotestsrc将无限生成数据,但如果num-buffers属性非零,则会生成固定数量的视频帧,然后发送EOS信号。

    说明:测试很有用,真实应用一般不会出现。

  3. autovideosink
    介绍autovideosink是一个自动检测适当的视频输出的视频接收器。它通过扫描注册表中所有具有元素信息的类字段中包含"Sink"和"Video",且具有非零自动插入等级的元素来实现此功能。它会自动选择合适的视频接收器来使用。

    说明:使用它,使代码更具有跨平台性。

  4. GstElement *gst_pipeline_new (const gchar * name)
    功能:创建一个给定名字的新管道。

  5. gst_bin_add_many (GstBin * bin, GstElement * element_1, ... ...)
    功能:将一个以NULL结尾的元素列表添加到一个bin中。该函数相当于对列表中的每个成员调用gst_bin_add()。每个gst_bin_add的返回值将被忽略。

    参数
    bin: 一个GstBin
    element_1 (可转换: 浮动型): 要添加到bin中的GstElement元素
    ... ...: 要添加到bin中的其他元素

  6. gboolean gst_element_link (GstElement * src, GstElement * dest)
    功能:将srcdest进行链接。链接必须从源(src)到目标(dest)进行,反方向的链接将不会尝试。该函数会查找尚未链接的现有pad。如果需要,它将请求新的pad。在取消链接时,被请求的pad需要手动释放。如果存在多个链接可能性,只会建立一个链接。

    说明:只有在同一bin中的元素。 在尝试链接之前,请确保将您的元素添加到binpipeline中,可以使用gst_bin_add函数进行添加。

    参数
    src (不可转移):包含源padGstElement
    dest (不可转移):包含目标padGstElement
    返回值:如果能够链接元素,则返回TRUE,否则返回FALSE

  7. void g_object_get (GObject* object, const gchar* first_property_name, ...)
    功能:获取GObject的属性。

    参数
    first_property_name:要获取的第一个属性的名称,类型:const gchar*。该数据由调用该方法的调用者拥有,该值是以NUL终止的UTF-8字符串。
    ...:第一个属性的返回位置,可选择跟随更多的名称/返回位置对,最后以NULL结尾。

  8. void g_object_set (GObject* object, const gchar* first_property_name, ...)
    功能:读取GObject的属性。

    参数
    first_property_name:第一个要设置的属性的名称。
    ...:第一个属性的值,可选择跟随更多的名称/值对,最后以NULL结尾。

Logo

音视频技术社区,一个全球开发者共同探讨、分享、学习音视频技术的平台,加入我们,与全球开发者一起创造更加优秀的音视频产品!

更多推荐