GStreamer qtmux/mp4mux 命令到代码转换

问题描述 投票:0回答:2

我正在使用 qtmux 通过 GStreamer 将音频和视频合并到 mp4 容器文件。我的管道看起来像:

gst-launch-1.0 autovideosrc ! x264enc!队列 ! qtmux0。 autoaudiosrc!波恩克!队列 ! qtmux!文件接收器位置=file.mp4

videotestsrc --> x264enc -----\
                               >---> qtmux ---> filesink
audiotestsrc --> wavenc ------/ 

它在命令行下工作得很好。但我想用C代码来编码。我被困在这部分了:

x264enc -----\
              >---> qtmux
wavenc ------/ 

这是这部分的代码。

  gst_element_link_many(audiosource, wavenc, audioqueue, NULL);
  gst_element_link_many(videosource, x264enc, videoqueue, NULL);
  gst_element_link_many(qtmux, filesink, NULL);
  
  audio_pad     =  gst_element_get_request_pad (audioqueue, "src");
  mux_audio_pad = gst_element_get_static_pad (qtmux, "sink_1");
  gst_pad_link (audio_pad,mux_audio_pad); **# ERROR HERE**

  video_pad     = gst_element_get_request_pad (videoqueue, "src");
  mux_video_pad = gst_element_get_static_pad(qtmux, "sink_2");
  gst_pad_link (video_pad,mux_video_pad); **# ERROR HERE**

但是步骤链接垫是错误的。错误类型:

GST_PAD_LINK_NOFORMAT (-4) – pads do not have common format

我该如何修复它?

c gstreamer muxer
2个回答
1
投票

我认为你在这里有开关请求/静态垫调用。队列应该有静态垫,而复用器有请求垫。

您还可以使用

gst_parse_launch()
函数创建管道,就像在命令行上一样,从而节省大量容易出错的代码,从而使您的生活更轻松。


0
投票

如果这个问题得到解决,您能给我提供用于将音频和视频一起录制在文件中的示例 C 代码吗?我不是关于如何在视频和音频之间混合利用。

提前致谢!

© www.soinside.com 2019 - 2024. All rights reserved.