WebRTC视频Android和iOS客户端具有H264解码功能

时间:2018-01-13 18:08:27

标签: android ios webrtc h.264 decoder

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

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

  

gst-launch-1.0 -v v4l2src device = / dev / video1! video / x-h264,profile = baseline,width = 1280,height = 720,framerate = 30/1! h264parse! rtph264pay config-interval = 1 pt = 126! udpsink host = x.x.x.x port = xxxx

可以使用计算机上的浏览器或Android上的Firefox或iOS上的Safari查看流。但是,使用Native WebRTC库或Android上的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上测试了它并且没有渲染视频,但我收到以下消息:

  

无法识别的个人资料2130706433 for video / avc

任何帮助将不胜感激!如果您能够快速找到解决方案,我们愿意为您的努力付出代价。

3 个答案:

答案 0 :(得分:0)

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将无法呈现流。

答案 1 :(得分:0)

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

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

Chrome Android M65可能会解决此问题。 See this了解更多信息。

答案 2 :(得分:0)

使用本地本机实现,该流在某些手机上可用,而在其他手机(例如三星)上不可用。您可以调试以获得更好的结果。