我有一个运行Linux的嵌入式设备。它有一个图像传感器和一个麦克风,我用GStreamer来处理输入数据。下面的工作将视频转换为H.264,音频转换为AAC,并将结果保存在MP4文件中:
gst-launch-1.0 -v v4l2src
! video/x-raw,width=2560,height=720,framerate=30/1,format=GRAY8
! queue
! videocrop right=1280
! videoconvert
! vpuenc_h264
! h264parse
! mpegtsmux name=mux
! filesink location=/run/media/mmcblk2p4/test.mp4 sync=false async=false
alsasrc device="hw:0,0"
! audio/x-raw,format=S16LE,rate=22050,channels=1
! queue
! audioconvert
! avenc_aac
! mux.
硬件的原生视频是双宽720p (2560x720),我将其裁剪为1280x720。vpuenc_h264
是我的SoC硬件H.264编码器。
但是我希望能够流式传输多路音频和视频。
我可以这样成功地播放视频:
gst-launch-1.0 -v v4l2src
! video/x-raw,width=2560,height=720,framerate=30/1,format=GRAY8
! videocrop left=0 right=1280
! videoconvert
! vpuenc_h264
! h264parse
! rtph264pay
! udpsink host=192.168.5.2 port=5000 sync=false async=false
有没有人知道一个好方法来流的多路音频和视频?
mpegtsmux
与rtph264pay
不相容。这并不奇怪。但我不熟悉无数的GST插件,我可能可以使用代替。是否有与rtph264pay
兼容的不同的mux ?
此外,是否有任何方法来混合音频和视频的方式,结果既可以流和保存到一个文件(例如使用tee
元素)?我认为如果我需要执行两个不同的互斥,这将是相当浪费的,尽管我肯定会这样做,如果我必须。
您可以通过UDP直接从mpegtsmux
发送结果。不需要将其封装到RTP中。但是如果你想把它封装到RTP中,你应该使用rtpmp2tpay
。