使用 gst-rtsp-server 流式传输 H264 文件

Posted

技术标签:

【中文标题】使用 gst-rtsp-server 流式传输 H264 文件【英文标题】:Streaming H264 file using gst-rtsp-server 【发布时间】:2016-08-14 01:56:10 【问题描述】:

GStreamer 大家庭,

假设我是 GStreamer 的初学者。我正在尝试使用 gst-rtsp-server 流式传输记录的 H264 文件。所以我可以从 VLC 播放器播放/暂停/查找视频。

这是我到目前为止所做的:

使用以下管道从 IP 摄像机的 RTP H264 流中录制 H264 编码视频:

gst-launch-1.0.exe -e -v rtspsrc location=rtsp://192.168.16.155/live.sdp ! rtph264depay ! h264parse ! mp4mux ! filesink location=record/video.h264

然后,我使用以下管道流式传输录制的 video.h264:

gst-launch-1.0.exe -v filesrc location=record/video.h264 ! qtdemux ! h264parse ! rtph264pay config-interval=1 pt=96 ! udpsink host=127.0.0.1 port=5000

我可以通过设置如下所示的 SDP 文件在 VLC 播放器中查看录制的视频。

v=0 m=video 5000 RTP/AVP 96 c=IN IP4 127.0.0.1 a=rtpmap:96 H264/90000

但是,我无法暂停或寻找视频。即使 VLC 播放器未连接到端口 5000,上述管道也会继续播放视频。

顺便说一句.. 我尝试使用 gst-rtsp-server 的 test-mp4 示例流式传输 video.h264,但 VLC 播放器超时连接。 test-mp4 控制台输出仅显示一条消息,即“在 rtsp://127.0.0.1:8554/test 处准备好流。

谁能指出我正确的方向,使用 GStreamer 流式传输录制的视频,并通过 RTSP 从 VLC 播放器播放/暂停/搜索控制?

谢谢, 手臂

【问题讨论】:

【参考方案1】:

对于test-mp4: - 请记住,您必须使用 mp4 视频。 - IIRC,mp4 文件必须包含视频和音频(因为test-mp4 中的管道将同时播放)。 - 运行 test-mp4 后,检查服务器的 IP(运行 test-mp4 的机器)。在这种情况下,您将环回流式传输到同一台 PC,因此您可以使用环回 IP 127.0.0.1 - 然后,在客户端,打开 VLC 并选择 Open Network Stream,然后输入 rtsp URL:rtsp://<Server IP>:8554/test 例如,如果服务器 IP 为 192.168.1.1,则 URL 为rtsp://192.168.1.1:8554/test

对于 rtsp 服务器: - 只需按照 test-mp4 中的示例 - 但请记住以下几点: + 您必须编写应用程序才能使用 rtsp-server,不能与 gst-launch 一起使用 + 所有支付元素(本例中为 rtph264pay)必须设置为 name=pay*,其中 * 是一个数字(pay0、pay1、pay2...)

【讨论】:

Matilda,我正在使用的 IP 摄像机使用 H264encoder 对视频进行编码。所以我有 H264 文件,其中包含音频和视频。将 test-mp4 示例代码更改为 H264 视频/音频文件中的哪些内容? 您的 IP 摄像机可以同时编码视频和音频,但您录制文件的第一个命令只是视频。因此输出视频文件不包含音频。您可以通过运行 test-mp4 与普通 mp4 视频进行比较来进行检查,它应该可以正常工作。 仅在 test-mp4 样本中流式传输视频后工作。谢谢玛蒂尔达。【参考方案2】:

如果您遇到同样的问题,我可以通过 RTSP/RTP 流式传输录制的 H264 视频文件。

修改test-mp4示例的rtsp管道启动字符串如下图: "filesrc location=\"%s\" ! qtdemux " "! h264parse ! rtph264pay pt=96 name=pay0 " ")"

【讨论】:

如果源只是一个原始的 h264 文件,我该怎么办?我尝试使用简单的命令test-launch "( filesrc location=h264.raw ! h264parse ! rtph264pay pt=96 name=pay0 )",不幸的是,vlc 用vdpau_avcodec generic error: decoder profile not supported: 7 回复我

以上是关于使用 gst-rtsp-server 流式传输 H264 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVFoundation 在 iOS 上播放套接字流式传输的 h.264 电影

在 Internet Explorer 9 中使用 HTML5 实时流式传输 h.264

通过 gstreamer udpsink 流式传输 h.264 时如何解决图像问题

如何使用 NVidia NVEnc 硬件编码器通过 UDP 流式传输 H.264 视频?

将 h.264 流包装在 mp.4 容器中并使用 nodejs 流式传输

如何(伪)流式传输 H.264 视频 - 以跨浏览器和 html5 方式?