【问题标题】:WebRTC video Android and iOS client with H264 decoding capabilities具有 H264 解码能力的 WebRTC 视频 Android 和 iOS 客户端
【发布时间】:2018-06-22 21:26:09
【问题描述】:

我们正在寻找可以帮助我们开发能够正确解码 H264 的 Android 和 iOS 客户端应用程序的人。该应用程序可以以任何方式开发,只要它可以集成到我们现有的 Android 和 iOS 应用程序中。主要要求是在 iOS 和 android 设备上渲染一个 h264 WebRTC 流

我们已经使用 Janus WebRTC Gateway 和 Streaming 插件开发了信号机制。视频流使用具有硬件 H264 编码的标准 UVC 相机和具有以下管道的 Gstreamer 发送到 Janus:

gst-launch-1.0 -v v4l2src device=/dev/video1 !视频/x-h264,配置文件=基线,宽度=1280,高度=720,帧率=30/1! h264解析! rtph264pay 配置间隔=1 pt=126 ! udpsink 主机=x.x.x.x 端口=xxxx

可以使用计算机上的浏览器或在 Android 上使用 Firefox 或在 iOS 上使用 Safari 查看流。但是,在 Android 上使用 Native WebRTC 库或 ReactNative 不会显示任何视频。

这是报价 SDP 的示例:

{
 "type":"offer",
 "sdp":
    "v=0
    no=- 1515855541838524 1515855541838524 IN IP4 188.166.53.100
    ns=Mountpoint 99
    nt=0 0
    na=group:BUNDLE video
    na=msid-semantic: WMS janus
    nm=video 9 RTP/SAVPF 126
    nc=IN IP4 188.166.53.100
    na=sendonly
    na=mid:video
    na=rtcp-mux
    na=ice-ufrag:Ip+m
    na=ice-pwd:nKEVyaCWWbgGSz1FHuohS7
    na=ice-options:trickle
    na=fingerprint:sha-256 D2:B9:31:8F:DF:24:D8:0E:ED:D2:EF:25:9E:AF:6F:B8:34:AE:53:9C:E6:F3:8F:F2:64:15:FA:E8:7F:53:2D:38
    na=setup:actpass
    na=rtpmap:126 H264/90000
    na=fmtp:126 profile-level-id=42e01f;packetization-mode=1
    na=rtcp-fb:126 nack
    na=rtcp-fb:126 goog-remb
    na=ssrc:309447223 cname:janusvideo
    na=ssrc:309447223 msid:janus janusv0
    na=ssrc:309447223 mslabel:janus
    na=ssrc:309447223 label:janusv0
    na=candidate:1 1 udp 2013266431 188.166.53.100 58606 typ host
    na=candidate:2 1 udp 2013266431 10.18.0.5 36151 typ host
    na=candidate:3 1 udp 2013266431 10.0.20.1 34608 typ host
    na=end-of-candidates
    n"
}

ReactNative 代码可以在这里找到:https://github.com/Nefalas/VideoWebRTC 我在三星 Galaxy S7 上对其进行了测试,但没有呈现视频,但我收到以下消息:

视频/avc 的配置文件 2130706433 无法识别

任何帮助将不胜感激!如果您能够快速找到解决方案,我们随时准备回报您的努力。

【问题讨论】:

    标签: android ios webrtc h.264 decoder


    【解决方案1】:

    Firefox 在 Android 上附带软件 H.264 编解码器,而 Chrome 和 Android 的本机 WebRTC 库没有。这就是为什么 Firefox 可以解码您的流,但本机库或 React Native(我假设它依赖于 Chrome 引擎)不能。

    Chrome 和原生 WebRTC 库确实支持 Android 上的某些硬件 H.264 编码器,但您的特定设备似乎没有。不幸的是,在这种情况下,没有可供 Chrome 或原生 WebRTC 使用的软件编解码器。

    编辑: Galaxy S7 应该有 WebRTC 支持的硬件 H.264 解码器,所以问题可能与原始 H.264 流的参数有关。尽管如此,当设备上没有支持的硬件 H.264 编码器/解码器时,本机 WebRTC 库以及 Chrome 将无法呈现流。

    【讨论】:

    • 流是从相机硬件编码的,也许这就是问题所在。我看到 Chrome 只接受约束基线配置文件,也许相机输出不同的格式。我得检查一下。但是事件,是否有可能实现 Firefox 使用的软件编解码器 OpenH264,作为 Native WebRTC 源代码中的一个选项?
    • 理论上应该是可能的,我认为甚至有一个问题悬而未决,但我目前找不到。
    【解决方案2】:

    我认为您的问题是由 Chrome for Android 中有关 H.264 的错误引起的

    Chrome Android does not offer/answer H.264 Constrained Baseline Profile

    这个问题可能会在 Chrome Android M65 中得到解决。 See this 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多