#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. Вы всегда можете получить доступ ко всем отдельным элементам из созданного конвейера в любое время.