我需要一个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,它看起来很有希望,但我仍然没有成功。然而,我很确定我走的是正确的道路(也许我还不知道如何使用管道)。
石膏
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
知道我哪里做错了吗?
目前为止,我找到的最接近的RTSP服务器(几乎)符合我的所有要求,可以在这里找到:https://github.com/RSATom/RtspRestreamServer(RTSP服务器的学分用于RSATom)。
以下是我正在寻找的所有功能的清单:
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向输出文件添加时间戳,但出现此错误。 我犯错的地方? 感谢所有回复:)