当前位置: 首页 > 知识库问答 >
问题:

拼命寻找可以从实时源(而不是文件)流式传输的RTSP服务器

乐正浩博
2023-03-14

我需要一个RTSP服务器,该服务器可以侦听配置的端口(例如8554),然后,如果我运行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传输和H264视频编码器和OPUS音频编码器和流从现场视频(不是从文件)的程序应该是无许可证的。

>

Live555支持H264和OPUS,但仅支持来自文件的流(VOD)。

我已经找到了一些可以直接从 /dev/video0流式传输的其他服务器,但这对我来说也不是一个好的解决方案。

Wowza和Red5Pro确实满足了上述所有要求,但它们是许可程序。

对支持上述所有要求的RTSP服务器有何建议?

编辑:

我尝试过Gstreamer,它看起来很有希望,但我仍然没有成功。然而,我很确定我走的是正确的道路(也许我还不知道如何使用管道)。

  1. 我已经构建了gst rtsp服务器,版本1.13.91

石膏

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  

所以我可以粗暴地理解我在流式传输(或流式传输某些东西...)。然而,当我试图播放视频时,我失败了(我尝试过使用Gstream er、FFplay和VLC——都失败了...):

石膏

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

知道我哪里做错了吗?

共有2个答案

韦胜泫
2023-03-14

目前为止,我找到的最接近的RTSP服务器(几乎)符合我的所有要求,可以在这里找到:https://github.com/RSATom/RtspRestreamServer(RTSP服务器的学分用于RSATom)。

以下是我正在寻找的所有功能的清单:

  • 支持TCP转接。
  • 支持H264视频编解码器(目前仅此编解码器为硬编解码器)。
  • 支持OPUS音频编解码器(尚不支持,但服务器基于Gstream er库,因此它具有支持Gstream er支持的所有编解码器的所有架构体系-我只需要更新代码并使其更通用)。
  • 支持来自具有Live-Stream的客户端的RTSP RECORD选项。
  • 支持来自客户端的RTSP PLAY选项。
  • URL和PORT应该是可配置的(目前为硬编解码器-只需要更新代码并使其更通用)。
  • 服务器未授权。
白浩荡
2023-03-14

Wowza SE与H264、Opus、VP8配合使用,因为它支持WebRTC。

该插件通过Wowza SE为WebRTC、RTMP、RTSP直播频道提供了一个交钥匙设置。还可以处理所有流类型,包括RTSP和FFMPEG,以便按需自适应转码(例如在WebRTC之间

 类似资料:
  • 我正在发送视频帧的形式的JPEG图像到我的服务器上的RMTP流。在服务器端,我希望将流(ip+端口)连接到ffmpeg,这样它就可以从流中获取图像,并从中创建视频流。 实际上,我的服务器正在监听一个IP和端口来接收帧。这部分完成了。我遇到的问题是如何使用FFMPEG将这些帧转换成视频流。谁能告诉我如何做到这一点吗?我知道是我应该使用的,但我在Google上没有找到它的语法和文档。

  • 问题内容: 这是从Google Cloud Storage下载文件的代码: 这行得通,但是这里的问题是,在流回此方法的客户端之前,它必须先缓冲所有字节。这会导致很多延迟,尤其是当存储在GCS中的文件很大时。 有没有一种方法可以从GCS获取文件并将 其直接流式传输到OutputStream ,这里的OutputStream是用于Servlet的。 问题答案: 只是为了澄清一下,您需要一个还是一个?一

  • 问题内容: 我正在构建一个Web应用程序,该服务器应从服务器 http://lscube.org/projects/feng 播放RTSP / RTP流。 HTML5视频/音频标签是否支持rtsp或rtp?如果没有,最简单的解决方案是什么?也许是VLC插件之类的东西。 问题答案: 从技术上讲“是” (但不是真的) HTML 5的标签与协议无关-不在乎。您将协议作为URL的一部分放在属性中。例如:

  • 问题内容: 我目前正在尝试将直播麦克风音频从Android设备流式传输到Java程序。我首先在两个Android设备之间发送实时音频,以确认我的方法正确。在接收设备上几乎没有任何延迟地可以完美地听到音频。接下来,我将相同的音频流发送到一个小型Java程序,并验证了数据也已正确发送到此处。现在,我想要做的是对这些数据进行编码,并以某种方式在运行Java程序的服务器上对其进行回放。我宁愿在使用HTML

  • 我的PHP Docker容器没有处理文件,而是返回了源代码。 正在返回而不是执行以下内容: 的输出,以显示两个my容器都在各自的端口上运行和侦听: Virtualhost配置,请注意将PHP传递到容器的指令。 Apache日志,显示文件由Apache提供服务。 编辑 我试图在不同的容器中运行Apache、PHP和MariaDB。我首先运行Apache,现在,我试图附加PHP。 最后,我想添加Nex

  • 我正尝试从FFMPEG向输出文件添加时间戳,但出现此错误。 我犯错的地方? 感谢所有回复:)