尧图精选

11-GStreamer文件播放实战-decodebin动态Pad与Seek

🕒 发布时间:2026/9/10 23:57:55 📁 来源:尧图网络
GStreamer 文件播放实战:decodebin、动态 Pad 与 Seek专栏:GStreamer C++ 从零到工程实战· 第 12 篇 / 共 17 篇从 playbin 快速实现功能,再用 decodebin 和 pad-added 手工搭建音视频分支,完成 Position、Duration 查询与 Seek。第 14 课:真实文件、Dynamic Pad、playbin 与 Seek测试源的 Pad 一开始就存在。真实媒体文件不同:文件还没解析 → 不知道里面有几条流 → Demuxer / Decodebin 暂时无法创建确定的输出 Pad所以会出现 Dynamic Pad。一、先用 playbin 完成功能如果目标只是播放一个文件,优先从高级 Element 开始:#includegst/gst.hintmain(intargc,char*argv[]){gst_init(argc,argv);if(argc!=2){g_printerr("Usage: file_player media-file\n");return1;}GError*uri_error=nullptr;gchar*uri=gst_filename_to_uri(argv[1],uri_error);if(!uri){g_printerr("Could not create URI: %s\n",uri_error?uri_error-message:"unknown error");g_clear_error(uri_error);return1;}GstElement*player=gst_element_factory_make("playbin","player");if(!player){g_printerr("Could not create playbin\n");g_free(uri);return1;}g_object_set(player,"uri",uri,nullptr);g_free(uri);gst_element_set_state(player,GST_STATE_PLAYING);GstBus*bus=gst_element_get_bus(player);GstMessage*message=gst_bus_timed_pop_filtered(bus,GST_CLOCK_TIME_NONE,static_castGstMessageType(GST_MESSAGE_ERROR|GST_MESSAGE_EOS));if(message)gst_message_unref(message);gst_object_unref(bus);gst_element_set_state(player,GST_STATE_NULL);gst_object_unref(player);return0;}不要把 Windows 路径直接塞给uriProperty:C:\media\movie.mp4应先用gst_filename_to_uri()转成合法 URI。二、为什么还要学 decodebin?playbin帮你自动完成:Source Demux Decode 音视频输出但如果需要:视频送 AI 音频自己处理 只保留指定 Stream 插入自定义 Filter 控制每个分支的 queue就要掌握动态 Pad。三、decodebin 的最小结构图:decodebin 通过 Dynamic Pad 输出音视频 Raw Streamfilesrc → decodebin可以静态连接。decodebin的输出 Pad 要等它识别并解码 Stream 后才出现,因此连接:g_signal_connect(decodebin,"pad-added",
上一篇/下一篇内容由系统自动关联 返回资讯列表 →