0

我正在尝试将 RTSP 流写入共享内存,然后将其写入 .mkv 文件。

我使用此命令直接在 .mkv 文件中写入流:

gst-launch-1.0 rtspsrc location=rtsp://admin:admin@192.168.88.248:554/h264 ! rtph264depay ! h264parse ! matroskamux ! filesink location= file.mkv

有用。

现在我添加共享内存:

gst-launch-1.0 rtspsrc location=rtsp://admin:admin@192.168.88.248:554/h264 ! shmsink socket-path=/tmp/foo shm-size=2000000

gst-launch-1.0 shmsrc socket-path=/tmp/foo ! rtph264depay ! h264parse ! matroskamux ! filesink location=file.mkv

我收到消息:

输入缓冲区需要设置 RTP 上限。

好的,我写

gst-launch-1.0 rtspsrc location=rtsp://admin:admin@192.168.88.248:554/h264 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" ! shmsink socket-path=/tmp/foo shm-size=2000000

我再次收到此消息。

我究竟做错了什么?

4

1 回答 1

0

您需要在 shmsrc 之后设置上限,例如以下是我的接收管道:

gst-launch-1.0 -v rtspsrc location=rtsp://192.168.1.150:8554/VBoxVideo !shmsink socket-path=/tmp/foo shm-size=2000000 等待连接=false

您必须记下上述 shmsink 的上限,以下是我对 shmsink 的上限:

/GstPipeline:pipeline0/GstShmSink:shmsink0.GstPad:sink: caps = "application/x-rtp\,\ media\=(string)video\,\ payload\=(int)96\,\clock-rate\=( int)90000\,\ encoding-name\=(string)H264\,\ packetization-mode\=(string)1\,\ profile-level-id\=(string)64002a\,\ sprop-parameter-sets\ =(string)\"J2QAKqwbKgHgCJ+WEAAAPoAADqYOAAEZABGQve6wgA\\=\\=\\,KP4Briw\\=\"\,\ a-tool\=(string)GStreamer\,\ a-type\=(string)broadcast\, \ a-framerate\=(string)30\,\ a-ts-refclk\=(string)local\,\ a-mediaclk\=(string)sender\,\ ssrc\=(uint)4083957277\,\clock -base\=(uint)1018840792\,\ seqnum-base\=(uint)13685\,\ npt-start\=(guint64)0\,\ play-speed\=(double)1\,\ play-scale \=(双)1"

现在,要使用 shmsrc,

gst-launch-1.0 -vm shmsrc socket-path=/tmp/foo do-timestamp=true is-live=true num-buffers=1000 !“应用程序/x-rtp,媒体=(字符串)视频,有效负载=(整数)96,分组模式=(字符串)1”!rtph264depay!h264解析!mp4 多路复用器!文件接收器位置=file.mp4

注意:我已经设置了上面的上限,还请注意我设置了 um-buffers=1000,因为我使用的是 mp4mux,我需要发送和 eos 才能播放文件。

所以在你的情况下:

gst-launch-1.0 -v rtspsrc location=rtsp://admin:admin@192.168.88.248:554/h264 ! shmsink socket-path=/tmp/foo shm-size=2000000

记下 shmsink0 管道中的上限,然后在您的管道中使用它:

gst-launch-1.0 shmsrc socket-path=/tmp/foo is-live=true num-buffers=1000 ! caps ! rtph264depay ! h264parse ! mp4mux ! filesink location=file.mp4
于 2018-03-07T09:59:55.220 回答