如何在 gstreamer 中录制音频和视频

如何在 gstreamer 中录制音频和视频

我是 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(流结束)。这将写入所有剩余的缓冲区并创建可播放的文件。

相关内容