查看 janus webrtc 视频流时出现问题

Posted

技术标签:

【中文标题】查看 janus webrtc 视频流时出现问题【英文标题】:Problem viewing janus webrtc video stream 【发布时间】:2020-06-12 13:02:14 【问题描述】:

我正在尝试使用 ffmpeg 和 janus-gateway 在本地网络中流式传输视频。我将 h264 视频直接通过管道传输到 ffmpeg,然后从那里将其作为 rtp 流传输到 janus。然后 Janus 完成其余的工作。

问题是,当我尝试使用 janus 中包含的 streamingtest html 页面打开流时,我可以选择流,但我什么也看不到。在我启动 janus 的控制台上,它会引发多个错误,开头为:“SDP 缺少必填信息”

显然 SDP 缺少一些这样的授权:

a=ice-ufrag:? 
a=ice-pwd:?

我猜这是演示页面上的 javascript 的问题。

当我加载页面并单击开始按钮时,它会按预期执行所有操作,并且还没有错误。 它用我的流填充可用流列表,当我在 Firefox 中使用网络分析器时,我可以看到,janus 正在向页面的 javascript 发送正确的 SDP。该 SDP 包含有关流的正确信息以及 ice 授权信息。

当我然后选择流并单击开始按钮时,javascript 会向 janus 发送一个包含 SDP 的请求,但这个 SDP 与之前收到的完全不同,并且确实缺少 ice 授权信息。它还有一堆完全错误的信息。例如,这个 SDP 是针对 VP8 视频的,而我的流以及之前收到的正确 SDP 实际上是 H264 视频。

请问有人可以发布一个简单的例子来接收来自 janus 的单个 webrtc 视频流吗?

我一直在寻找一个示例,但除了不适合我的演示和完全不相关的 webrtc 视频会议或聊天室示例之外,没有找到任何对我没有任何用处的示例。

我所要做的就是以尽可能低的延迟甚至零延迟从树莓派到本地托管在同一个树莓派的 html 网页获取一个信号 H264 视频流。

我尝试过使用 hls,但延迟太高,有人建议使用 webrtc...

【问题讨论】:

你有没有想过如何让 Janus 工作? @dwvldg 不,不幸的是我无法解决这个问题。如果您想在同一设备上本地托管网页并且不需要 php uv4l 也将是一个更好的解决方案,因为它将所有内容组合到一个程序中...... 是的,唯一的问题是我需要来自同一 LAN 上不同设备的流。我试图从 ARM 设备上的浏览器流式传输,但我想我只会使用 x86 和 google chrome,因为那时我知道编解码器受支持等等。 在这种情况下,您可能会使用不同的东西,例如 rtp/rtsp 进行流式传输。您实际上可以使用 ffmpeg 或 vlc 之类的程序来做到这一点。然后你只需要在接收设备上打开另一个程序,打开流并传递视频......还是我误解了你想要做什么? 不,那是我想做的。但是我们有一个完整的 web 应用程序,其中包含我们希望与视频流一起拥有的其他功能,因此 vlc/ffmpeg 将无法工作。我们已经构建了选择 HLS 流或 WebRTC 的选项。 HLS 在大多数情况下都可以工作,但在一种情况下,我们希望尽可能低的延迟,因此 WebRTC。我已经用 x86 计算机进行了测试,所以我知道这绝对有效。 【参考方案1】:

我遇到了类似的问题

经过“一天的战斗” - 我在我的 janus-webrtc 安装基于 tvbox 的 UserLAnd (https://github.com/virtimus/tinyHomeServer) 上使用 reolink 网络摄像头工作:

在 reolink 网络管理员(设置/录音/编码)中:

录制音频 - 是的 分辨率2560*1920 帧率 8 最大比特率 1024 h264 配置文件高(这对我很重要)

janus.plugin.streaming.jcfg:

reolink-rtp: 
    type = "rtp"
    id = 999
    description = "Reolink RTP"
    audio = true
    audioport = 5051
    audiopt = 111
    audiortpmap = "opus/48000/2"    
    video = true
    videoport = 5052
    videopt = 96
    videortpmap = "H264/90000"
    videofmtp = "profile-level-id=42e028;packetization-mode=1"
    #videofmtp = "profile-level-id=420032;packetization-mode=1"
 

ffmpeg 命令(双前向视频/音频):

ffmpeg -i 'rtsp://admin:[password]@192.168.2.148:554/h264Preview_01_main' -an -c:v copy -flags global_header -bsf dump_extra -f rtp rtp://localhost:5052 -vn -codec:a libopus -f rtp rtp://localhost:5051

【讨论】:

【参考方案2】:

没关系。

我现在已经切换到对视频流使用 uv4l 并托管显示视频流的实际网页。

这几乎是开箱即用的,并且相对容易实施。

【讨论】:

以上是关于查看 janus webrtc 视频流时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Web 浏览器上使用带有 Janus 或 WebRTC 的 GStreamer 进行实时视频流

为 webrtc 实现 Janus 网关

使用Janus网关的远程视频流未在本机显示

使用 Janus 直播网络摄像头

Janus介绍

Janus介绍