Gstreamer:OPUS 到 AAC 而 RTP 到 HLS

Gstreamer: OPUS to AAC while RTP to HLS

我正在尝试将带有视频和音频的 RTP 流记录到 HLS。使用 GStreamer 和 nodejs。我得到 WARNING: erroneous pipeline: no element "fdkaacenc"。我正在使用带有 M1 CPU 的 macOS 并且安装了所有插件基础,好的,坏的和丑陋的。

我要执行的整个命令是这样的

GST_DEBUG=3 gst-launch-1.0 -v -e 
rtpbin name=rtpbin latency=50 buffer-mode=0 sdes="application/x-rtp-source-sdes, cname=(string)3xtbiiMIcbTDI1Td" !
udpsrc port=40228 caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,payload=(int)105,encoding-name=(string)H264,ssrc=(uint)982701080" 
! rtpbin.recv_rtp_sink_0 rtpbin. ! queue ! rtpvp8depay ! vp8dec ! x264enc ! mux. 
udpsrc port=40401 caps="application/x-rtp,media=(string)audio,clock-rate=(int)48000,payload=(int)100,encoding-name=(string)OPUS,ssrc=(uint)906623489" ! 

# the part I am trying to convert opus to aac
rtpbin.recv_rtp_sink_1 rtpbin. ! queue ! rtpopusdepay ! opusdec ! fdkaacenc ! mux. 

mpegtsmux name=mux ! hlssink location=storage/recordings/take-3540_question-1996/webcam-029ad85b-7a43-45a5-888f-f5ce873b108f%06d.ts playlist-location=storage/recordings/take-3540_question-1996/webcam-029ad85b-7a43-45a5-888f-f5ce873b108f.m3u8 target-duration=4 
udpsrc address=127.0.0.1 port=40463 ! rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_src_0 ! udpsink host=127.0.0.1 port=23257 bind-address=127.0.0.1 bind-port=40463 sync=false async=false udpsrc address=127.0.0.1 port=40499 ! rtpbin.recv_rtcp_sink_1 rtpbin.send_rtcp_src_1 ! udpsink host=127.0.0.1 port=42134 bind-address=127.0.0.1 bind-port=40499 sync=false async=false

有什么想法吗?

我用 avenc_aac 而不是 fdkaacenc 修复了这个问题。更不用说你应该在 avenc_aac 之前使用 audioconvert

我试图转换为 aac 的命令部分:

rtpopusdepay ! opusdec ! audioconvert ! avenc_aac.

更多: avenc_aac 是存在于 linux、mac 和 windows 中的 gstreamer ffmpeg 插件的一部分。 fdkaacenc 是 gstreamer 错误插件的一部分,可能在所有系统中都不相同。这就是为什么使用 avenc_aac 更合适的原因。所以在mac和linux中都可以执行。