将 GStreamer 管道编码并复用为 MPEG-TS
Posted
技术标签:
【中文标题】将 GStreamer 管道编码并复用为 MPEG-TS【英文标题】:Encode and mux GStreamer pipeline into MPEG-TS 【发布时间】:2020-08-04 17:41:11 【问题描述】:我正在尝试将 GESPipeline 编码并复用到 MPEG-TS 中,以便通过 UDP 进行流式传输。 管道在预览模式下在屏幕上播放良好。 我的尝试,本质上是:
GstEncodingContainerProfile *prof;
GstCaps *caps;
caps = gst_caps_from_string("video/mpegts");
prof = gst_encoding_container_profile_new("test-app-profile", NULL, caps, NULL);
caps = gst_caps_from_string("video/x-h264");
gst_encoding_container_profile_add_profile(prof,
(GstEncodingProfile*) gst_encoding_video_profile_new(caps, NULL, NULL, 0));
caps = gst_caps_from_string("audio/x-ac3");
gst_encoding_container_profile_add_profile(prof,
(GstEncodingProfile*) gst_encoding_audio_profile_new(caps, NULL, NULL, 0));
// this fails:
ges_pipeline_set_render_settings (pl, "file:///path/out.ts", prof);
在 GST_DEBUG=3 的输出中:
encodebin gstencodebin.c:1976:create_elements_and_pads: error: No available muxer for format video/mpegts
更新: 更详细的调试显示它实际上查看了 mpegtsmux,但跳过了它。为什么? 相关消息:
gst_encode_bin_setup_profile:设置配置文件 0x557c3c98c460:test-app-profile (type:container) create_elements_and_pads:当前配置文件:test-app-profile _get_muxer:获取格式视频/mpegts 的复用器列表 gst_element_factory_list_filter:寻找工厂 ... gst_element_factory_list_filter:尝试 mpegtsmux gst_structure_parse_field:尝试字段名称“systemstream” _priv_gst_value_parse_value:尝试类型名称“布尔” gst_structure_parse_field:尝试字段名称“数据包大小” _priv_gst_value_parse_value:尝试类型名称“int” ...尝试其他复用器...
如果我将 video/mpegts 更改为 video/x-matroska,则会生成 mkv 文件(虽然丑陋且没有声音)。
如何编码成mpeg?
【问题讨论】:
【参考方案1】:问题是缺少gst-inspect-1.0 mpegtsmux
中 src 大写字母中列出的字段。
这些是必需的,如果您不指定它们,它将与复用器不匹配。
mpegtsmux 的解决方案:
gst_caps_from_string("video/mpegts, systemstream=true, packetsize=188");
感谢 Freenode #gstreamer IRC 频道。
【讨论】:
以上是关于将 GStreamer 管道编码并复用为 MPEG-TS的主要内容,如果未能解决你的问题,请参考以下文章
是否有命令行命令可以在一行中为 gstreamer 管道测试 appsrc 和 appsink?