![如何在 gstreamer 中录制音频和视频](https://linux22.com/image/1204322/%E5%A6%82%E4%BD%95%E5%9C%A8%20gstreamer%20%E4%B8%AD%E5%BD%95%E5%88%B6%E9%9F%B3%E9%A2%91%E5%92%8C%E8%A7%86%E9%A2%91.png)
我是 gstreamer 的新手,我想录制音频和视频并将其保存为 .mp4 格式,使用网络摄像头录制视频,使用 MIC 录制音频
这是我的管道
gst-launch-1.0 -e v4l2src ! queue ! x264enc ! h264parse ! queue ! qtmux0. alsasrc ! 'audio/x-raw,rate=44100,depth=24' ! audioconvert ! audioresample ! voaacenc ! aacparse ! qtmux ! filesink location=test.mp4
当我执行它时,视频只录制了 10 秒,音频甚至没有录制,它给出了一些消息,例如
WARNING: from element /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0:
Can't record audio fast enough
Additional debug info:
gstaudiobasesrc.c(866): gst_audio_base_src_create (): /GstPipeline:pipeline/GstAlsaSrc:alsasrc0:
Dropped 425565 samples. This is most likely because downstream can't keep up and is consuming samples too slowly.
帮助我度过难关,提前谢谢你
答案1
也许你需要在“多路复用”之前有一个“队列”:
gst-launch-1.0 -e v4l2src ! queue ! x264enc ! h264parse ! queue ! qtmux0. alsasrc ! 'audio/x-raw,rate=44100,depth=24' ! audioconvert ! audioresample ! voaacenc ! aacparse ! queue ! qtmux ! filesink location=test.mp4
答案2
我也遇到了这个问题,通过在音频 src 后添加 buffer-time=20000000 解决了(在你的情况下是 alassrc)
下面是一个捕获 640,480 桌面捕获(Linux)和 jack_out.monitor 声源的示例:
gst-launch-1.0 ximagesrc startx=0 starty=0 endx=639 endy=479 use-damage=0 ! video/x-raw,framerate=30/1 ! queue ! videoconvert ! queue ! x264enc ! queue ! mp4mux name=mux ! queue ! filesink location=testAUDIOVIDEO2.mp4 pulsesrc device="jack_out.monitor" buffer-time=20000000 ! "audio/x-raw,channels=2,rate=48000" ! queue ! audioconvert ! queue ! opusenc bitrate=512000 ! queue ! mux. -e
注意管道末尾的 -e,这允许在按下 CTRL-C 时发送 EOS(流结束)。这将写入所有剩余的缓冲区并创建可播放的文件。