【问题标题】:gstreamer and mp4 or avi output with audiogstreamer 和 mp4 或带有音频的 avi 输出
【发布时间】:2012-02-02 06:20:52
【问题描述】:

我有下面的语法,它将在屏幕上显示我的网络摄像头的视频并将视频编码为 ogv 文件。 我想做的是在屏幕上显示视频,但将其从 ogv 文件更改为 mp4 和/或 avi 文件,并录制音频。有人可以帮助我吗?

感谢以下代码适用于 ogv 文件 我正在使用 ubuntu 10.04 64 位 Linux 和罗技 c600 网络摄像头

下面的代码可以自己运行:

gst-launch-0.10 v4l2src ! 'video/x-raw-yuv,width=640,height=480,framerate=30/1' ! \
timeoverlay halignment=right valignment=bottom shaded-background=true ! \
clockoverlay halignment=left valignment=bottom text="M/D/Y:" shaded-background=true time-format="%m/%d/%Y %H:%M:%S" ! \
tee name=t_vid ! queue ! xvimagesink sync=false t_vid. ! queue ! videorate ! \
'video/x-raw-yuv,framerate=30/1' ! theoraenc ! queue ! oggmux ! \
filesink location=testogg.ogv

我尝试将两个不同的工作代码部分组合起来,看看它是否可以工作。顶部代码和底部代码

下面的代码可以自己运行;

gst-launch-0.10 videotestsrc num-buffers=250 \
! 'video/x-raw-yuv,format=(fourcc)I420,width=320,height=240,framerate=25/1' \
! xvidenc ! queue ! mux. \
audiotestsrc num-buffers=440 ! audioconvert ! 'audio/x-raw-int,rate=44100,channels=2' \
! lame ! queue ! mux. \
avimux name=mux ! filesink location=test.avi

我拼凑起来

合并的代码不起作用:

gst-launch-0.10 v4l2src ! 'video/x-raw-yuv,width=640,height=480,framerate=25/1' ! \
timeoverlay halignment=right valignment=bottom shaded-background=true ! \
clockoverlay halignment=left valignment=bottom text="M/D/Y:" shaded-background=true time-format="%m/%d/%Y %H:%M:%S" ! \
tee name=t_vid ! queue ! xvimagesink sync=false t_vid. ! queue ! videorate ! \
'video/x-raw-yuv,framerate=25/1' ! xvidenc ! queue ! mux. ! \
avimux name=mux ! filesink location=testavirt.avi

但是我收到一条错误消息 “警告:错误的管道:没有源元素的链接”

我尝试使用此编解码器的原因是让它在 kdenlive 中工作,这对于它将导入哪些编解码器非常特殊

好的,我按照以下代码的建议在调试模式下启动了 gstreamer

gst-launch-0.10 -v --gst-debug-level=3 ! v4l2src ! 'video/x-raw-yuv,width=640,height=480,framerate=25/1' ! \
timeoverlay halignment=right valignment=bottom shaded-background=true ! \
clockoverlay halignment=left valignment=bottom text="M/D/Y:" shaded-background=true time-format="%m/%d/%Y %H:%M:%S" ! \
tee name=t_vid ! queue ! xvimagesink sync=false t_vid. ! queue ! videorate ! \
'video/x-raw-yuv,framerate=25/1' ! xvidenc ! queue ! mux. ! \
avimux name=mux ! filesink location=testavirt.avi

它返回了这个调试信息

0:00:00.000783199 16068       0xade080 INFO                GST_INIT gstquery.c:107:_gst_query_initialize: init queries
0:00:00.001852610 16068       0xade080 INFO                GST_INIT gstmessage.c:73:_gst_message_initialize: init messages
0:00:00.002272948 16068       0xade080 INFO      GST_PLUGIN_LOADING gstplugin.c:350:_gst_plugin_initialize: registering 0 static plugins
0:00:00.002463561 16068       0xade080 INFO      GST_PLUGIN_LOADING gstplugin.c:255:gst_plugin_register_static: registered static plugin "staticelements"
0:00:00.002486054 16068       0xade080 INFO      GST_PLUGIN_LOADING gstplugin.c:257:gst_plugin_register_static: added static plugin "staticelements", result: 1
0:00:00.003105961 16068       0xade080 INFO            GST_REGISTRY gstregistry.c:1611:ensure_current_registry: reading registry cache: /home/rat/.gstreamer-0.10/registry.x86_64.bin
0:00:00.019757535 16068       0xade080 INFO            GST_REGISTRY gstregistrybinary.c:614:gst_registry_binary_read_cache: loaded /home/rat/.gstreamer-0.10/registry.x86_64.bin in 0.016615 seconds
0:00:00.019860736 16068       0xade080 INFO            GST_REGISTRY gstregistry.c:1471:scan_and_update_registry: Validating plugins from registry cache: /home/rat/.gstreamer-0.10/registry.x86_64.bin
0:00:00.021184812 16068       0xade080 INFO            GST_REGISTRY gstregistry.c:1573:scan_and_update_registry: Registry cache has not changed
0:00:00.021194999 16068       0xade080 INFO            GST_REGISTRY gstregistry.c:1640:ensure_current_registry: registry reading and updating done, result = 1
0:00:00.021201052 16068       0xade080 INFO                GST_INIT gst.c:797:init_post: GLib runtime version: 2.24.1
0:00:00.021208042 16068       0xade080 INFO                GST_INIT gst.c:799:init_post: GLib headers version: 2.24.1
0:00:00.021241674 16068       0xade080 INFO            GST_PIPELINE gstparse.c:335:gst_parse_launch_full: parsing pipeline description '! v4l2src ! video/x-raw-yuv,width=640,height=480,framerate=25/1 ! timeoverlay halignment=right valignment=bottom shaded-background=true ! clockoverlay halignment=left valignment=bottom text=M/D/Y: shaded-background=true time-format=%m/%d/%Y\ %H:%M:%S ! tee name=t_vid ! queue ! xvimagesink sync=false t_vid. ! queue ! videorate ! video/x-raw-yuv,framerate=25/1 ! xvidenc ! queue ! mux. ! avimux name=mux ! filesink location=testavirt.avi '
0:00:00.022709253 16068       0xade080 INFO      GST_PLUGIN_LOADING gstplugin.c:859:gst_plugin_load_file: plugin "/usr/lib/gstreamer-0.10/libgstvideo4linux2.so" loaded
0:00:00.022725847 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "v4l2src"
0:00:00.023022609 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstBaseSrc@0xd28030> adding pad 'src'
0:00:00.024528033 16068       0xade080 INFO      GST_PLUGIN_LOADING gstplugin.c:859:gst_plugin_load_file: plugin "/usr/lib/gstreamer-0.10/libgstpango.so" loaded
0:00:00.024541435 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "timeoverlay"
0:00:00.024983829 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstTextOverlay@0xd42040> adding pad 'video_sink'
0:00:00.025034224 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstTextOverlay@0xd42040> adding pad 'src'
0:00:00.025085769 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "clockoverlay"
0:00:00.025208997 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstTextOverlay@0xd4c0f0> adding pad 'video_sink'
0:00:00.025256228 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstTextOverlay@0xd4c0f0> adding pad 'src'
0:00:00.025569620 16068       0xade080 INFO      GST_PLUGIN_LOADING gstplugin.c:859:gst_plugin_load_file: plugin "/usr/lib/gstreamer-0.10/libgstcoreelements.so" loaded
0:00:00.025583335 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "tee"
0:00:00.025655142 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstTee@0xc23760> adding pad 'sink'
0:00:00.025678269 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "queue"
0:00:00.025770942 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstQueue@0xd581c0> adding pad 'sink'
0:00:00.025795370 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstQueue@0xd581c0> adding pad 'src'
0:00:00.026000635 16068       0xade080 INFO      GST_PLUGIN_LOADING gstplugin.c:859:gst_plugin_load_file: plugin "/usr/lib/gstreamer-0.10/libgstxvimagesink.so" loaded
0:00:00.026012901 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "xvimagesink"
0:00:00.026142535 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstBaseSink@0xd26610> adding pad 'sink'
0:00:00.026172194 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "queue"
0:00:00.026202526 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstQueue@0xd58440> adding pad 'sink'
0:00:00.026225449 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstQueue@0xd58440> adding pad 'src'
0:00:00.027723125 16068       0xade080 INFO      GST_PLUGIN_LOADING gstplugin.c:859:gst_plugin_load_file: plugin "/usr/lib/gstreamer-0.10/libgstvideorate.so" loaded
0:00:00.027735129 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "videorate"
0:00:00.027808311 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstVideoRate@0xd5f000> adding pad 'sink'
0:00:00.027834798 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstVideoRate@0xd5f000> adding pad 'src'
0:00:00.028089942 16068       0xade080 INFO      GST_PLUGIN_LOADING gstplugin.c:859:gst_plugin_load_file: plugin "/usr/lib/gstreamer-0.10/libgstxvid.so" loaded
0:00:00.028101728 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "xvidenc"
0:00:00.028370479 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstXvidEnc@0xd5f1e0> adding pad 'sink'
0:00:00.028400842 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstXvidEnc@0xd5f1e0> adding pad 'src'
0:00:00.028481732 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "queue"
0:00:00.028508557 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstQueue@0xd586c0> adding pad 'sink'
0:00:00.028536913 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstQueue@0xd586c0> adding pad 'src'
0:00:00.029064786 16068       0xade080 INFO      GST_PLUGIN_LOADING gstplugin.c:859:gst_plugin_load_file: plugin "/usr/lib/gstreamer-0.10/libgstavi.so" loaded
0:00:00.029077092 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "avimux"
0:00:00.029284486 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstAviMux@0xd73000> adding pad 'src'
0:00:00.029326884 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "filesink"
0:00:00.029378045 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstBaseSink@0xd75370> adding pad 'sink'
0:00:00.029412649 16068       0xade080 INFO                filesink gstfilesink.c:306:gst_file_sink_set_location: filename : testavirt.avi
0:00:00.029420428 16068       0xade080 INFO                filesink gstfilesink.c:307:gst_file_sink_set_location: uri      : file:///home/rat/testavirt.avi
0:00:00.029433307 16068       0xade080 ERROR           GST_PIPELINE ./grammar.y:799:_gst_parse_yyparse: link without source element
0:00:00.029446312 16068       0xade080 ERROR           GST_PIPELINE ./grammar.y:862:_gst_parse_yyparse: link without source element
0:00:00.029456839 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "pipeline"
0:00:00.029535187 16068       0xade080 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking v4l2src0:(any) to timeoverlay0:(any) (0/0) with caps "video/x-raw-yuv, width=(int)640, height=(int)480, framerate=(fraction)25/1"
0:00:00.029561950 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "capsfilter"
0:00:00.029628904 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstBaseTransform@0xd78150> adding pad 'sink'
0:00:00.029654353 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstBaseTransform@0xd78150> adding pad 'src'
0:00:00.029668706 16068       0xade080 INFO              GST_STATES gstbin.c:1767:gst_bin_get_state_func:<pipeline0> getting state
0:00:00.029686262 16068       0xade080 INFO              GST_STATES gstelement.c:2408:gst_element_continue_state:<capsfilter0> completed state change to NULL
0:00:00.029703721 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element v4l2src0:(any) to element capsfilter0:sink
0:00:00.029712366 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:969:gst_element_get_static_pad: found pad capsfilter0:sink
0:00:00.029720912 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: v4l2src0 and capsfilter0 in same bin, no need for ghost pads
0:00:00.029744719 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link v4l2src0:src and capsfilter0:sink
0:00:00.049689595 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked v4l2src0:src and capsfilter0:sink, successful
0:00:00.049761719 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element capsfilter0:src to element timeoverlay0:(any)
0:00:00.049782927 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:969:gst_element_get_static_pad: found pad capsfilter0:src
0:00:00.049801288 16068       0xade080 INFO                GST_PADS gstutils.c:1028:gst_pad_check_link: trying to link capsfilter0:src and timeoverlay0:video_sink
0:00:00.050467449 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: capsfilter0 and timeoverlay0 in same bin, no need for ghost pads
0:00:00.050498205 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link capsfilter0:src and timeoverlay0:video_sink
0:00:00.051365172 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked capsfilter0:src and timeoverlay0:video_sink, successful
0:00:00.051410274 16068       0xade080 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking timeoverlay0:(any) to clockoverlay0:(any) (0/0) with caps "(NULL)"
0:00:00.051435266 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element timeoverlay0:(any) to element clockoverlay0:(any)
0:00:00.051452770 16068       0xade080 INFO                GST_PADS gstutils.c:1028:gst_pad_check_link: trying to link timeoverlay0:src and clockoverlay0:video_sink
0:00:00.052124174 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: timeoverlay0 and clockoverlay0 in same bin, no need for ghost pads
0:00:00.052152481 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link timeoverlay0:src and clockoverlay0:video_sink
0:00:00.052819379 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked timeoverlay0:src and clockoverlay0:video_sink, successful
0:00:00.052851632 16068       0xade080 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking clockoverlay0:(any) to t_vid:(any) (0/0) with caps "(NULL)"
0:00:00.052872037 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element clockoverlay0:(any) to element t_vid:(any)
0:00:00.052888711 16068       0xade080 INFO                GST_PADS gstutils.c:1028:gst_pad_check_link: trying to link clockoverlay0:src and t_vid:sink
0:00:00.053539972 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: clockoverlay0 and t_vid in same bin, no need for ghost pads
0:00:00.053567822 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link clockoverlay0:src and t_vid:sink
0:00:00.054209057 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked clockoverlay0:src and t_vid:sink, successful
0:00:00.054240988 16068       0xade080 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking t_vid:(any) to queue0:(any) (0/0) with caps "(NULL)"
0:00:00.054261353 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element t_vid:(any) to element queue0:(any)
0:00:00.054357775 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<t_vid> adding pad 'src0'
0:00:00.054391930 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: t_vid and queue0 in same bin, no need for ghost pads
0:00:00.054416401 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link t_vid:src0 and queue0:sink
0:00:00.055097197 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked t_vid:src0 and queue0:sink, successful
0:00:00.055131050 16068       0xade080 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking queue0:(any) to xvimagesink0:(any) (0/0) with caps "(NULL)"
0:00:00.055151268 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element queue0:(any) to element xvimagesink0:(any)
0:00:00.055167783 16068       0xade080 INFO                GST_PADS gstutils.c:1028:gst_pad_check_link: trying to link queue0:src and xvimagesink0:sink
0:00:00.055842243 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: queue0 and xvimagesink0 in same bin, no need for ghost pads
0:00:00.055870005 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link queue0:src and xvimagesink0:sink
0:00:00.056567773 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked queue0:src and xvimagesink0:sink, successful
0:00:00.056606717 16068       0xade080 INFO           GST_PARENTAGE gstbin.c:3707:gst_bin_get_by_name: [pipeline0]: looking up child element t_vid
0:00:00.056632626 16068       0xade080 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking t_vid:t_vid to queue1:(any) (0/0) with caps "(NULL)"
0:00:00.056651644 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element t_vid:(any) to element queue1:(any)
0:00:00.056719250 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<t_vid> adding pad 'src1'
0:00:00.056741754 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: t_vid and queue1 in same bin, no need for ghost pads
0:00:00.056764926 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link t_vid:src1 and queue1:sink
0:00:00.057431047 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked t_vid:src1 and queue1:sink, successful
0:00:00.057462976 16068       0xade080 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking queue1:(any) to videorate0:(any) (0/0) with caps "(NULL)"
0:00:00.057520574 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element queue1:(any) to element videorate0:(any)
0:00:00.057541803 16068       0xade080 INFO                GST_PADS gstutils.c:1028:gst_pad_check_link: trying to link queue1:src and videorate0:sink
0:00:00.058218898 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: queue1 and videorate0 in same bin, no need for ghost pads
0:00:00.058247509 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link queue1:src and videorate0:sink
0:00:00.058913420 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked queue1:src and videorate0:sink, successful
0:00:00.058945216 16068       0xade080 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking videorate0:(any) to xvidenc0:(any) (0/0) with caps "video/x-raw-yuv, framerate=(fraction)25/1"
0:00:00.058980252 16068       0xade080 INFO     GST_ELEMENT_FACTORY gstelementfactory.c:375:gst_element_factory_create: creating element "capsfilter"
0:00:00.059030050 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstBaseTransform@0xd78410> adding pad 'sink'
0:00:00.059070176 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<GstBaseTransform@0xd78410> adding pad 'src'
0:00:00.059099030 16068       0xade080 INFO              GST_STATES gstbin.c:1767:gst_bin_get_state_func:<pipeline0> getting state
0:00:00.059133982 16068       0xade080 INFO              GST_STATES gstelement.c:2408:gst_element_continue_state:<capsfilter1> completed state change to NULL
0:00:00.059161447 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element videorate0:(any) to element capsfilter1:sink
0:00:00.059178858 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:969:gst_element_get_static_pad: found pad capsfilter1:sink
0:00:00.059192810 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: videorate0 and capsfilter1 in same bin, no need for ghost pads
0:00:00.059215498 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link videorate0:src and capsfilter1:sink
0:00:00.059916866 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked videorate0:src and capsfilter1:sink, successful
0:00:00.059949637 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element capsfilter1:src to element xvidenc0:(any)
0:00:00.059966690 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:969:gst_element_get_static_pad: found pad capsfilter1:src
0:00:00.059982820 16068       0xade080 INFO                GST_PADS gstutils.c:1028:gst_pad_check_link: trying to link capsfilter1:src and xvidenc0:sink
0:00:00.060795894 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: capsfilter1 and xvidenc0 in same bin, no need for ghost pads
0:00:00.060824501 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link capsfilter1:src and xvidenc0:sink
0:00:00.061632768 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked capsfilter1:src and xvidenc0:sink, successful
0:00:00.083857679 16068       0xade080 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking xvidenc0:(any) to queue2:(any) (0/0) with caps "(NULL)"
0:00:00.083881589 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element xvidenc0:(any) to element queue2:(any)
0:00:00.083891480 16068       0xade080 INFO                GST_PADS gstutils.c:1028:gst_pad_check_link: trying to link xvidenc0:src and queue2:sink
0:00:00.083904166 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: xvidenc0 and queue2 in same bin, no need for ghost pads
0:00:00.083914692 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link xvidenc0:src and queue2:sink
0:00:00.083925117 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked xvidenc0:src and queue2:sink, successful
0:00:00.083937094 16068       0xade080 INFO           GST_PARENTAGE gstbin.c:3707:gst_bin_get_by_name: [pipeline0]: looking up child element mux
0:00:00.083947729 16068       0xade080 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking queue2:(any) to mux:mux (0/0) with caps "(NULL)"
0:00:00.083955323 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element queue2:(any) to element mux:(any)
0:00:00.084035330 16068       0xade080 INFO        GST_ELEMENT_PADS gstelement.c:722:gst_element_add_pad:<mux> adding pad 'video_00'
0:00:00.084049981 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: queue2 and mux in same bin, no need for ghost pads
0:00:00.084060734 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link queue2:src and mux:video_00
0:00:00.084075560 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked queue2:src and mux:video_00, successful
0:00:00.084087455 16068       0xade080 INFO            GST_PIPELINE ./grammar.y:568:gst_parse_perform_link: linking mux:(any) to filesink0:(any) (0/0) with caps "(NULL)"
0:00:00.084095861 16068       0xade080 INFO        GST_ELEMENT_PADS gstutils.c:1694:gst_element_link_pads_full: trying to link element mux:(any) to element filesink0:(any)
0:00:00.084103574 16068       0xade080 INFO                GST_PADS gstutils.c:1028:gst_pad_check_link: trying to link mux:src and filesink0:sink
0:00:00.084114625 16068       0xade080 INFO                GST_PADS gstutils.c:1592:prepare_link_maybe_ghosting: mux and filesink0 in same bin, no need for ghost pads
0:00:00.084124013 16068       0xade080 INFO                GST_PADS gstpad.c:1956:gst_pad_link_prepare: trying to link mux:src and filesink0:sink
0:00:00.084131937 16068       0xade080 INFO                GST_PADS gstpad.c:2139:gst_pad_link_full: linked mux:src and filesink0:sink, successful
WARNING: erroneous pipeline: link without source element
rat@ubu64:~$ 

【问题讨论】:

  • 所有的感叹号是怎么回事?
  • 哇,我认为这是复制粘贴的失误。你每天都会学到一些东西。 :)
  • @sarnold,在 gstreamer 中!将管道元素彼此分开。

标签: linux video ubuntu gstreamer


【解决方案1】:

如果您想使用 mp4 或 avi,则需要使用不同的编码器。我推荐 h264 或 mp4v。 h264enc 在丑陋的插件包中。

如果您想走 mp4 路线,可以将 mp4v 用于视频,将 mp4a 用于音频。目前我的 linux 机器还没有启动,所以这可能并不完美。

gst-launch v4l2src ! your caps ! other elements ! tee name=t_vid ! \
  xvimagesink sync=false t_vid. ! queue ! caps adjustment if you need it ! \
  x264enc ! queue ! avi_mux.  \
  alsasrc ! caps ! faac (or whatever will go with avi) ! avimux name=avi_mux ! \
  filesink location=testavi.avi

这里是 avi 版本。显然,您可以将编码器调整为适用于容器的任何格式。如果您使用 mp4mux,它非常相似,只需将我的 avimux 内容换成 mp4mux。

您可能需要调整 alsamixer 以确保管道从您的网络摄像头而不是您的麦克风插孔中捕获。

此外,您可能需要使队列缓冲区不受限制以减少延迟。

【讨论】:

  • 感谢您的快速回复我尝试添加您推荐的行但无法让它们工作我确实找到了 kdenlive 将接受的 xvidenc 编解码器但我收到了一条 gstreamer 错误消息现在不知道如何解决任何想法如何解决它“警告:错误的管道:没有源元素的链接”。我更新了问题以包括我正在使用的新行。再次感谢您的帮助
  • @RickT 您的组合管道中没有音频部分。
  • 另外,要找出导致错误的原因,请在调试级别 3 中运行 gst-launch。
  • 我还没有添加音频部分,因为我试图缩小可能导致问题的范围,所以我现在只使用视频。我确实添加了调试行并将该输出添加到问题中。他们是我应该寻找的特定东西吗?谢谢
  • @RickT 是的,当它抛出关于源和接收器的警告时,寻找有问题的元素。我刚刚看了,问题是你没有任何音频可以多路复用到avimux中,所以链接不起作用。因此,我指出您缺少音频元素的原因。没有它,avimux 将无法工作。
【解决方案2】:

感谢 Jonathan Henson,如果有人感兴趣的话,这就是我最终拼凑起来的内容

gst-launch-0.10 v4l2src ! 'video/x-raw-yuv,width=640,height=480,framerate=30/1' ! \
timeoverlay halignment=right valignment=bottom shaded-background=true ! \
clockoverlay halignment=left valignment=bottom text="M/D/Y:" shaded-background=true time-format="%m/%d/%Y %H:%M:%S" ! \
tee name=t_vid ! queue ! xvimagesink sync=false t_vid. ! videorate ! \
'video/x-raw-yuv,framerate=30/1' ! theoraenc ! queue ! mux.  \
alsasrc device=plughw:1,0 ! audio/x-raw-int,rate=8000,channels=1,depth=16 ! \
audioconvert ! vorbisenc ! queue ! mux. \
oggmux name=mux ! filesink location=testogg.ogv

【讨论】:

  • 我很高兴你能成功。这可能令人沮丧,但一旦你掌握了 Gstreamer,你的能力就会成倍地扩大。你是用 api 把它写成一个程序,还是只是命令行的东西?
  • 目前我只是在使用命令行试水。这个程序太强大了
  • 等到你开始使用这个api,你会发现你只触及了冰山一角。有很多出色的设计,从 gobject 和 glib(在 c 中提供了一种非常健壮的反射形式,这是一个令人惊叹的壮举)到消息总线系统等等。 Gstreamer 很可爱。该 api 也有很好的文档记录,这可能解释了为什么 unix 世界中的每个多媒体应用都使用它。
  • 另外,你的队列太多了。您只需要在您的 tee 之后和每个多路复用分支的末尾使用它们。线程过多不利于应用程序的效率。
猜你喜欢
  • 2015-06-14
  • 2012-04-29
  • 2019-11-17
  • 2016-06-20
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多