Команда GStreamer qtmux / mp4mux для преобразования кода

#c #gstreamer #muxer

#c #gstreamer #мультиплексор

Вопрос:

Я использую qtmux для объединения аудио и видео в файл контейнера mp4 с помощью GStreamer. Мой конвейер выглядит так:

gst-launch-1.0 автозапуск ! x264enc ! очередь! qtmux0. autoaudiosrc! wavenc ! очередь! 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**
 

Но это неправильно в step link pads. И тип ошибки: GST_PAD_LINK_NOFORMAT (-4) – pads do not have common format

Как я могу это исправить?

Комментарии:

1. Как здесь связаны C или C ?

2. c — неверный тег. Я был удален. Но C связан.

3. how can I write a C code to do this? однако вы не должны задавать вопрос.

4. Я отредактировал вопрос. Я надеюсь, что это хорошо

Ответ №1:

Я думаю, что здесь у вас есть запросы на переключение / вызовы статической панели. В очереди должны быть статические пэды, в то время как у мультиплексора есть пэды запросов.

Вы также можете упростить себе жизнь, используя gst_parse_launch() функцию для создания конвейера, как вы это делаете в командной строке, тем самым экономя много кода, подверженного ошибкам.

Комментарии:

1. Я пытался следовать вашему руководству. Но я все еще ошибаюсь. Я загружу весь код ниже.

2. На самом деле, я хочу изменить пользовательский оверлей, который содержит много информации о материалах. Поэтому использование функции gst_parse_launch() кажется несовместимым.

3. Вы всегда можете получить доступ ко всем отдельным элементам из созданного конвейера в любое время.