我在我的程序中使用gstreamer1。我有四个元素:filesrc,decodebin,autovideosink,autoaudiosink。
当添加了解码器上的新打击垫时,它会连接到视频链接或音频链接。
int display_video(char* path, GstInfo *gst_info){
if(!gst_info->pipeline)
return 0;
GstStateChangeReturn ret;
g_object_set(gst_info->source, "location", path, NULL);
ret = gst_element_set_state (gst_info->pipeline, GST_STATE_PLAYING);
if (ret == GST_STATE_CHANGE_FAILURE) {
g_printerr ("Unable to set the pipeline to the playing state.\n");
gst_object_unref (gst_info->pipeline);
return 0;
}
return 1;
}
这是我启动视频的方式
static void display_video_eos (GstBus *bus, GstMessage *msg, DisplayInfo *dinfo) {
gst_element_set_state(dinfo->ginfo->pipeline, GST_STATE_READY);
notify_rest_of_program();
}
我觉得在再次调用display_video之前应该有一些我自由的资源。一旦我开始循环,它会像疯了一样泄漏内存。有什么建议吗?