拼命寻找可以从实时源(而不是文件)流式传输的 RTSP 服务器
Desperately looking for a RTSP server that can stream from a live source (not from a file)
我需要一个可以在配置的端口(例如 8554)上侦听的 RTSP 服务器,然后,例如,如果我 运行 FFmpeg 具有:
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -intra -an -f rtsp -rtsp_transport tcp rtsp://192.168.1.10:8554/test
然后 RTSP 服务器将录制视频,要播放它,我只需要 运行 它:
ffplay -i rtsp://192.168.1.10:8554/test
我需要 RTSP 服务器支持 TCP t运行sport 和 H264 视频编码器和 OPUS 音频编码器和来自 实时视频 的流(不是来自文件)+ 程序应该是 未许可的 。
这个server很好用,但不支持OPUS。
Live555 支持 H264 和 OPUS,但仅支持来自文件 (VOD) 的流。
我发现了一些其他服务器可以直接从 /dev/video0 流式传输,但这对我来说也不是一个好的解决方案。
Wowza 和 Red5Pro 确实满足了上述所有要求,除了它们是许可程序。
对支持上述所有要求的 RTSP 服务器有什么建议吗?
编辑:
我已经尝试过 Gstreamer,看起来很有希望,但我仍然没有成功。
但是,我很确定我的方法是正确的(也许我还不知道如何使用管道)。
- 我已经构建了 gst-rtsp-server,版本 1.13.91。
- 那我运行
./test-record "( decodebin name=depay0 ! videoconvert ! rtspsink )"
- 我运行
netstat -anp
我看的很清楚,服务器在tcp端口8554上监听。
- 现在是流式传输到服务器的时候了。我用 Gstreamer 试过一次,用 FFmpeg 试过一次。
Gstreamer
gst-launch-1.0 videotestsrc ! x264enc ! rtspclientsink location=rtsp://127.0.0.1:8554/test
FFmpeg
ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -qp 10 -an -f rtsp -rtsp_transport tcp rtsp://127.0.0.1:8554/test
在这两种情况下,我都可以在 wireshark 中看到 RTP 数据包,
再次调用 netstat -anp
,我看到:
tcp 0 0 0.0.0.0:8554 0.0.0.0:* LISTEN 14386/test-record
tcp 0 0 127.0.0.1:8554 127.0.0.1:46754 ESTABLISHED 14386/test-record
tcp 0 0 127.0.0.1:46754 127.0.0.1:8554 ESTABLISHED 19479/ffmpeg
所以我可以肯定地理解我正在流式传输(或流式传输某些内容...)。但是,当我尝试播放视频时,我遇到了失败(我尝试使用 Gstreamer、FFplay 和 VLC 播放 - 都失败了...):
Gstreamer
gst-launch-1.0 rtspsrc location=rtsp://127.0.0.1:8554/test latency=300 ! decodebin ! autovideoconvert ! autovideosink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Progress: (open) Opening Stream
Progress: (connect) Connecting to rtsp://127.0.0.1:8554/test
Progress: (open) Retrieving server options
Progress: (open) Retrieving media info
ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Could not get/set settings from/on resource.
Additional debug info:
gstrtspsrc.c(7507): gst_rtspsrc_retrieve_sdp (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0:
Server can not provide an SDP.
ERROR: pipeline doesn't want to preroll.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
FFplay
ffplay -i rtsp://127.0.0.1:8554/test
[rtsp @ 0x7fb140000b80] method DESCRIBE failed: 405 Method Not Allowed
rtsp://127.0.0.1:8554/test: Server returned 4XX Client Error, but not one of 40{0,1,3,4}
VLC
vlc rtsp://127.0.0.1:8554/test
VLC media player 3.0.8 Vetinari (revision 3.0.8-0-gf350b6b)
[0000000000857f10] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
Qt: Session management error: None of the authentication protocols specified are supported
[00007f9fdc000ea0] live555 demux error: Failed to connect with rtsp://127.0.0.1:8554/test
[00007f9fdc001d10] satip stream error: Failed to setup RTSP session
知道我做错了什么吗?
Wowza SE 与 H264、Opus、VP8 兼容,因为它支持 WebRTC。
这个插件提供了一个交钥匙设置,用于通过 Wowza SE 使用 WebRTC、RTMP、RTSP 直播频道。还可以处理所有流类型,包括带有 FFMPEG 的 RTSP,用于按需自适应转码(例如在 WebRTC 和 HLS 之间)。
https://wordpress.org/plugins/videowhisper-live-streaming-integration/
好吧,到目前为止我找到的最接近(几乎)符合我所有要求的 RTSP 服务器可以在这里找到:https://github.com/RSATom/RtspRestreamServer (credits for the RTSP-server are for RSATom)。
这是我正在寻找的所有功能的清单:
- 支持TCP传输。
- 支持 H264 视频编解码器(目前仅针对此编解码器进行硬编解码)。
- 支持 OPUS 音频编解码器(尚不支持,但服务器基于 Gstreamer 库,因此它具有支持 Gstreamer 支持的所有编解码器的所有基础结构 - 我只需要更新代码并使其更通用)。
- 支持来自具有实时流的客户端的 RTSP RECORD 选项。
- 支持来自客户端的 RTSP PLAY 选项。
- URL 和 PORT 应该是可配置的(目前是硬编解码器 - 只需要更新代码并使其更通用)。
- 服务器未授权。
我需要一个可以在配置的端口(例如 8554)上侦听的 RTSP 服务器,然后,例如,如果我 运行 FFmpeg 具有:
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -intra -an -f rtsp -rtsp_transport tcp rtsp://192.168.1.10:8554/test
然后 RTSP 服务器将录制视频,要播放它,我只需要 运行 它:
ffplay -i rtsp://192.168.1.10:8554/test
我需要 RTSP 服务器支持 TCP t运行sport 和 H264 视频编码器和 OPUS 音频编码器和来自 实时视频 的流(不是来自文件)+ 程序应该是 未许可的 。
这个server很好用,但不支持OPUS。
Live555 支持 H264 和 OPUS,但仅支持来自文件 (VOD) 的流。
我发现了一些其他服务器可以直接从 /dev/video0 流式传输,但这对我来说也不是一个好的解决方案。
Wowza 和 Red5Pro 确实满足了上述所有要求,除了它们是许可程序。
对支持上述所有要求的 RTSP 服务器有什么建议吗?
编辑:
我已经尝试过 Gstreamer,看起来很有希望,但我仍然没有成功。 但是,我很确定我的方法是正确的(也许我还不知道如何使用管道)。
- 我已经构建了 gst-rtsp-server,版本 1.13.91。
- 那我运行
./test-record "( decodebin name=depay0 ! videoconvert ! rtspsink )"
- 我运行
netstat -anp
我看的很清楚,服务器在tcp端口8554上监听。 - 现在是流式传输到服务器的时候了。我用 Gstreamer 试过一次,用 FFmpeg 试过一次。
Gstreamer
gst-launch-1.0 videotestsrc ! x264enc ! rtspclientsink location=rtsp://127.0.0.1:8554/test
FFmpeg
ffmpeg -f v4l2 -video_size 640x480 -i /dev/video0 -c:v libx264 -qp 10 -an -f rtsp -rtsp_transport tcp rtsp://127.0.0.1:8554/test
在这两种情况下,我都可以在 wireshark 中看到 RTP 数据包,
再次调用 netstat -anp
,我看到:
tcp 0 0 0.0.0.0:8554 0.0.0.0:* LISTEN 14386/test-record
tcp 0 0 127.0.0.1:8554 127.0.0.1:46754 ESTABLISHED 14386/test-record
tcp 0 0 127.0.0.1:46754 127.0.0.1:8554 ESTABLISHED 19479/ffmpeg
所以我可以肯定地理解我正在流式传输(或流式传输某些内容...)。但是,当我尝试播放视频时,我遇到了失败(我尝试使用 Gstreamer、FFplay 和 VLC 播放 - 都失败了...):
Gstreamer
gst-launch-1.0 rtspsrc location=rtsp://127.0.0.1:8554/test latency=300 ! decodebin ! autovideoconvert ! autovideosink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Progress: (open) Opening Stream
Progress: (connect) Connecting to rtsp://127.0.0.1:8554/test
Progress: (open) Retrieving server options
Progress: (open) Retrieving media info
ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Could not get/set settings from/on resource.
Additional debug info:
gstrtspsrc.c(7507): gst_rtspsrc_retrieve_sdp (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0:
Server can not provide an SDP.
ERROR: pipeline doesn't want to preroll.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...
FFplay
ffplay -i rtsp://127.0.0.1:8554/test
[rtsp @ 0x7fb140000b80] method DESCRIBE failed: 405 Method Not Allowed
rtsp://127.0.0.1:8554/test: Server returned 4XX Client Error, but not one of 40{0,1,3,4}
VLC
vlc rtsp://127.0.0.1:8554/test
VLC media player 3.0.8 Vetinari (revision 3.0.8-0-gf350b6b)
[0000000000857f10] main libvlc: Running vlc with the default interface. Use 'cvlc' to use vlc without interface.
Qt: Session management error: None of the authentication protocols specified are supported
[00007f9fdc000ea0] live555 demux error: Failed to connect with rtsp://127.0.0.1:8554/test
[00007f9fdc001d10] satip stream error: Failed to setup RTSP session
知道我做错了什么吗?
Wowza SE 与 H264、Opus、VP8 兼容,因为它支持 WebRTC。
这个插件提供了一个交钥匙设置,用于通过 Wowza SE 使用 WebRTC、RTMP、RTSP 直播频道。还可以处理所有流类型,包括带有 FFMPEG 的 RTSP,用于按需自适应转码(例如在 WebRTC 和 HLS 之间)。 https://wordpress.org/plugins/videowhisper-live-streaming-integration/
好吧,到目前为止我找到的最接近(几乎)符合我所有要求的 RTSP 服务器可以在这里找到:https://github.com/RSATom/RtspRestreamServer (credits for the RTSP-server are for RSATom)。
这是我正在寻找的所有功能的清单:
- 支持TCP传输。
- 支持 H264 视频编解码器(目前仅针对此编解码器进行硬编解码)。
- 支持 OPUS 音频编解码器(尚不支持,但服务器基于 Gstreamer 库,因此它具有支持 Gstreamer 支持的所有编解码器的所有基础结构 - 我只需要更新代码并使其更通用)。
- 支持来自具有实时流的客户端的 RTSP RECORD 选项。
- 支持来自客户端的 RTSP PLAY 选项。
- URL 和 PORT 应该是可配置的(目前是硬编解码器 - 只需要更新代码并使其更通用)。
- 服务器未授权。