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

标签 android ios webrtc h.264 decoder

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

我们已经使用 Janus WebRTC 网关和 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 来查看流。但是,在 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 我已经在 Samsung Galaxy S7 上对其进行了测试,但没有呈现任何视频,但我收到以下消息:

Unrecognized profile 2130706433 for video/avc

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

最佳答案

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

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

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

关于android - 具有 H264 解码功能的 WebRTC 视频 Android 和 iOS 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48242816/

相关文章:

ios - 从锁定屏幕接听电话时 Callkit 和 Webrtc 无音频

android - 如何更改滑动刷新布局android中的可交换区域长度

java - Dagger 2.11 : Local Singleton when using @ContributesAndroidInjector

java - BebopVideoView 到 Mat

ios - mvvmcross MvxActionBasedTableViewSource 作为分组表

ios - 使用 NSCoding Swift 保存对象时出现异常

iphone - 在 iOS4 中,让 NSTimer 与 NSRunLoop 一起运行会禁用触摸/手势输入

Android ViewPager 适配器 - 每次都强制 getPageWidth

javascript - Webrtc 远程视频流不工作

ios - CallKit 可以在交换通话后重新激活声音