WebRTC H.264 没有 x264enc 的图片

问题描述 投票:0回答:1

我正在尝试使用 WebRTC 将一些视频流式传输到浏览器。为了实现这一点,我有一个 gstreamer 实例,它对视频进行编码并通过 RTP 将其发送到服务器,该服务器只需将其打包到 WebRTC 中即可显示。如果我使用 VP8 (

vp8enc
),这将按预期工作。但是,当使用 H.264 时,我的浏览器不会解码任何帧:

gst-launch-1.0 videotestsrc ! videoscale ! video/x-raw,width=640,height=360 ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=6001 # < my forwarding server

此外,如果我在 Khadas VIM4 上运行管道并使用其硬件 H.264 编码器 (

amlvenc
) 而不是使用完全相同的管道的
x264
,否则将显示视频(至少在 Firefox 中)。

这两个编码器(都输出 H.264 视频)之间可能有什么区别,或者我如何找到此问题的原因?我尝试查看浏览器WebRTC调试页面,但这并没有真正帮助我......

video-streaming gstreamer h.264
1个回答
0
投票

问题很可能是由于 SPS/PPS 没有随来自

x264enc
的每个 IDR 帧一起发送,而
amlvenc
很可能默认情况下会这样做。

如果是这种情况,您可以尝试调整两件事:

  1. config-interval=-1
    设置在您的
    rtph264pay
    上。请参阅 config-interval 的文档。
  2. 强制
    x264enc
    在每个 IDR 帧中发出 SPS/PPS。似乎该选项不是通过 gstreamer 选项直接公开的,但您可以尝试通过
    x264
    设置名为
    repeat-headers
    的底层
    option-string
    选项。因此,请尝试将
    option-string=\"repeat-headers=1\"
    添加到您的
    x264enc
    节点。请参阅 option-string 和相关
    x264
    选项 repeat-headers

我认为其中任何一个都应该有帮助,如果没有,那么您还可以检查 SDP 中的

a=fmtp:96 profile-level-id=42e01f; packetization-mode=1
行,看看两个编码器是否使用截然不同的配置文件,但我认为情况不应该如此。

© www.soinside.com 2019 - 2024. All rights reserved.