我想通过 gstreamer 获取 ip 摄像机视频流:
gst-launch-1.0 rtspsrc location=rtsp://user:[email protected]:554/live/ch00_0 ! rtph264depay ! autovideosink
但出现此错误
Установка конвейера в состояние PAUSED…
Конвейер работает и не требует состояния PREROLL…
Установка конвейера в состояние PLAYING…
New clock: GstSystemClock
ОШИБКА: из элемента /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Internal data flow error.
Дополнительная отладочная информация:
gstrtspsrc.c(4206): gst_rtspsrc_loop (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 54503440 ns.
Установка конвейера в состояние PAUSED...
Установка конвейера в состояние READY…
Установка конвейера в состояние NULL…
Освобождение конвейера…
我认为这是一个主要问题
ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Internal data flow error.
我的系统是 gentoo 3.5.7
答案1
您的管道有误。正确的是:
gst-launch-1.0 rtspsrc location=rtsp://user:[email protected]:554/live/ch00_0 ! rtph264depay ! h264parse ! decodebin ! autovideosink
或者
gst-launch-1.0 rtspsrc location=rtsp://user:[email protected]:554/live/ch00_0 ! rtph264depay ! decodebin ! autovideosink
因为您需要在显示之前解码 h264 流。以下是媒体使用的主要链:
解码:编码源 -> 解复用器 -> 解码器 -> 接收器
编码:原始源(即简单的网络摄像头)->编码器->复用器->接收器
另外,检查为 rtspsrc 设置身份验证的方法。我不确定,但也许唯一正确的方法是:rtspsrc location=rtsp://192.168.81.32:554/live/ch00_0 user-id=user user-pw=password