使用 gstreamer-1.0 的 H264 RTP 流

2024-02-12

我尝试从带有摄像头模块的 Raspberry Pi 3 到视频标签制作 H264 RTP 流。

使用以下代码启动流

raspivid -t 0 -h 720 -w 1080 -fps 25 -hf -b 2000000 -o - | \

gst-launch-1.0 -v fdsrc \
           ! h264parse \
           ! rtph264pay \
           ! gdppay \
           ! udpsink host="192.168.0.11" port=5000

然后我提供一个带有视频标签的简单网页:

<video id="videoTag" src="h264.sdp" autoplay>
        <p class="warning">Your browser does not support the video tag.</p>
</video>

src 引用以下 SDP 文件:

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

当我加载网页时没有任何反应,并且 js 控制台完全是空的。

所以我尝试用VLC查看流,并得到以下错误:

[00007efd80c03ea8] es demux error: cannot peek
[00007efd80c03ea8] es demux error: cannot peek
[00007efd80c03ea8] live555 demux error: no data received in 10s, aborting

我以为根本没有UDP通信,所以我从远程机器上测试了它:

gst-launch-1.0 udpsrc port=5000 \
               caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" \
               ! fakesink dump=true

ans收到UDP数据包。所以我向前研究并发现了这一点:

https://cardinalpeak.com/blog/the-many-ways-to-stream-video-using-rtp-and-rtsp/ https://cardinalpeak.com/blog/the-many-ways-to-stream-video-using-rtp-and-rtsp/

现在很明显,我需要 2 个端口,其中一个用于传输数据并建立 RTP 控制协议。但是我不知道如何使用 gstreamer 做到这一点。

最糟糕的是当我跑步时:

gst-inspect-1.0 | grep -i rtcp

我什么也没得到。

如何使用 RTP 协议使用 gstreamer-1.0 启动视频流到网页内的视频标签?

update

Using 视频测试源作为 gstreamer videosouce 并删除gdppay(它导致无效的 RTP 负载错误)我能够使用 VLC 和以下 gstreamer 代码从远程客户端查看视频流:

gst-launch-1.0 udpsrc port=5000 \
               caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" \
               ! rtph264depay \
               ! avdec_h264 \
               ! autovideosink

首先你需要提供更多信息:哪个浏览器(尝试chrome,据说safari也有更好的流支持)..

对于 SDP,我认为您缺少 h264 的信息? 是的,gdppay 仅适用于内部“仅 GStreamer”流媒体(gdp 表示“GStreamer 数据协议”,其他人无法理解:))。

如果您确实希望 GStreamer 传输 RTSP,您可以使用 gstreamerrtsp服务器实现 https://gstreamer.freedesktop.org/modules/gst-rtsp-server.html- 例如,它位于单独的存储库中,并且包含在 Ubuntu 中的某些软件包中。

如果你只想要rtp,那么你做得正确 - 正如你所看到的,这种方法适用于例如vlc..但是是什么让你认为sdp可以在HTML5中工作(我只是问我没有这方面的最新信息) ?

您也可以使用 netcat 进行测试 - 对于此类调试来说它很好。 你可以这样伪造一个 rtp 客户端:

nc -u -l 5000 

这会将流量转出。

I read here https://stackoverflow.com/q/1735933/3876138HTML5 中的 rtp/rtsp 存在问题,但谁知道也许现在它已经可以工作了..

您可以尝试 hls - 它通常用于流式传输,并且对 GStreamer 1.6 及更高版本有更好的支持。(提示:使用 hlssink)。

这里有一些用于处理hls的js:https://github.com/dailymotion/hls.js https://github.com/dailymotion/hls.js

你也可以尝试 ogg/vorbis/theora 之类的东西(听起来很疯狂,但你可以尝试一下,我在某处读到它适合流媒体)..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 gstreamer-1.0 的 H264 RTP 流 的相关文章

  • 在 MediaElement.js 中的视频末尾停止而不是倒带

    我想知道如何在视频结束时停止 MediaElement js 播放器 我想知道如何在视频结束时停止 mediaelement js 播放器 我希望保留最后一帧 而不是像现在一样倒带显示第一帧 是否可以改变这种行为 我为这个问题编写了一个修复
  • 如何将基于 Qt4.6 Phonon 的媒体应用程序移植到 Qt 5.1?

    我有一个基于 Qt 4 6 的应用程序 它使用 QtWebView 加载带有标签的 HTML 页面 以便在 Windows 平台上播放网络多媒体源 我没有使用默认的 PHONON 播放引擎 而是构建了另一个 PHONON 后端引擎来处理媒体
  • 如何在 iOS 和 macOS 上的 Safari 中使用网络摄像头录制视频?

    我已经发布了几条路径 1 录制视频https caniuse com feat html media capture https caniuse com feat html media capture但它仅适用于 iOS 并且无法自定义 我
  • 在 C# 中读取并发送 mp4 文件

    我使用以下代码从服务器读取 mp4 文件并通过 http 发送它 我的服务器端是 mvc4 控制器 有趣的是 视频在 Chrome 中渲染得很好 但在 ios 设备上没有得到任何东西 所以我认为这可能是响应流标头问题 我缺少什么吗 var
  • 视频作为网站背景? HTML 5

    我想使用视频作为背景 而不是自动拉伸到整个屏幕 背景 的图像 我还想旋转视频和图像 以便以任何顺序显示随机视频 图像 如果知道如何延迟视频播放 以便视频在网站加载后 30 秒只播放一次 那就太好了 thx 看看我的 jquery video
  • 自动播放视频的 canvas.drawimage 仅在视频元素可见时有效

    我试图通过将视频绘制到画布上来在视频上添加一些滤镜 问题是 当视频元素不在视图中时 它会停止绘制 理想情况下 我想将视频元素全部隐藏起来 我认为它只影响 Chrome 浏览器 另外 似乎如果您停止并用鼠标启动它 问题就会消失 functio
  • VideoJs 在 Firefox 中的 Flash 回退问题

    我尝试将 videoJs 添加到我的网站来播放 MP4 文件 所有这些在 Chrome 中都能完美运行 但当我转到 Firefox 不支持 MP4 文件 时 Flash 播放器停留在黑屏上 按钮不执行任何操作 简单的问题 为什么 我不明白
  • Android 上的 GStreamer

    谁能给我一些关于让 GStreamer 在 Android 上工作的提示 我以前从未使用过它 我想将它与 FFmpeg 一起使用 我已经编译了 FFmpeg 并且在 Android 上运行良好 我只是想使用 GStreamer 来帮助完成一
  • Flask 无法播放 html 中的视频

    我有一个 Flask 应用程序 应该在加载页面时播放视频 但它只显示在左上角 并且不会从视频的第一帧开始改变 我已经尝试将其插入 html 代码但它不起作用 extends base html block content
  • 学习 GObject 和 Glib 的材料 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我对 C 很满意 但需要学习GObject and Glib for gstreamer 我在网上找到
  • 如何将视频转换为base64数据

    我有一个应用程序 可以从相机或图库中获取视频并将其转换为 Base64 数据 并将该数据发送到服务器 但问题是每当我转换 Base64 数据时 videodata 变量中的数据都不是正确的 为此我使用了下面的代码 FileInputStre
  • 将 CIFilter 与 AVFoundation 结合使用 (iOS)

    我正在尝试将滤镜应用于在 iOS 上使用 AVFoundation 创建的视频合成 滤镜可以是模糊 像素化 棕褐色等 我需要实时应用效果并能够将复合视频渲染到磁盘 但我很高兴从其中之一开始 不幸的是 我似乎无法弄清楚这一点 这是我能做的 我
  • 通过 Websockets 进行 WebRTC 视频聊天

    我正在尝试使用 webRTC 和 WebSockets 进行信号发送来开发视频聊天应用程序 我的问题是 我不知道创建 RTCPeerConnection 并通过 webSocket 连接两个对等点 2 个浏览器 的过程是什么 至少在本地 我
  • HTML 5 视频自定义控件

    与许多 Web 开发人员一样 我期待着利用新的 HTML 5 进行流式传输视频
  • webrtc - 视频出现斑点,但它仍然是黑色的

    我使用 chrome 21 运行我的 webrtc 代码 如果我在同一个 chrome 中打开两个选项卡 然后打开其中包含 webrtc 代码的页面 一个选项卡用于发送视频流 一个选项卡用于接收视频流 效果很好 但是 如果我使用两种隐身模式
  • 检测视频何时缓冲,如果缓冲则显示 gif

    我想知道是否有办法在视频缓冲时显示 gif 我正在使用 HTML5 视频标签 其中有一种方法可以检测视频何时缓冲 如果没有 是否有替代方法 我看过 如何检测视频何时缓冲 https stackoverflow com questions 1
  • gstreamer 中的无缝视频循环

    我正在尝试使用 gstreamer 循环播放视频 它是 python 绑定 第一次尝试是hook EOSmessage并为管道生成搜索消息 import gi gi require version Gst 1 0 from gi repos
  • 如果使用jquery,如何在html5中查看显示分钟和秒的CurrentTime

    我想在显示器上看到当前时间分钟和秒的视频 var id main video player alert id get 0 currentTime worked i see 12 324543356 var minnow id get 0 c
  • 从 html5

    我正在寻找一种方法来根据用户代理字符串将控件属性添加到视频标签 我不希望在 iPad 和 Android 之外的任何浏览器或设备上出现控件属性 所以我认为用户代理是最好的识别方法 因为 ipad 和 android 一词出现在各自的 UA
  • Android 从 C++ 端播放原始音频

    我需要能够在 Android 系统的 C 端以自定义文件格式传输音频 我正在致力于移植自定义媒体播放器 并且需要能够打开自定义文件并从中传输音频 这很重要 因为我认为从性能角度来看将整个播放器移植到 JAVA 是不可行的 并且通过 JNI

随机推荐