我们正在寻找可以帮助我们开发能够正确解码 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/
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我从用户Hirolau那里找到了这段代码:defsum_to_n?(a,n)a.combination(2).find{|x,y|x+y==n}enda=[1,2,3,4,5]sum_to_n?(a,9)#=>[4,5]sum_to_n?(a,11)#=>nil我如何知道何时可以将两个参数发送到预定义方法(如find)?我不清楚,因为有时它不起作用。这是重新定义的东西吗? 最佳答案 如果您查看Enumerable#find的文档,您会发现它只接受一个block参数。您可以将它发送两次的原因是因为Ruby可以方便地让您根据它的“并行赋
RSpec似乎按顺序匹配方法接收的消息。我不确定如何使以下代码工作:allow(a).toreceive(:f)expect(a).toreceive(:f).with(2)a.f(1)a.f(2)a.f(3)我问的原因是a.f的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。 最佳答案 RSpecspy是测试这种情况的一种方式。要监视一个方法,用allowstub,除了方法名称之外没有任何约束,调用该方法,然后expect确切的方法调用。例如:allow(a).toreceive(:f)a.f(2)a.f(1)
我有一个模块stat存在于目录结构中:lib/stat_creator/stat/在lib/stat_creator/stat.rb中,我在lib/stat_creator/stat/目录中有我需要的文件,以及:moduleStatCreatormoduleStatendend当我使用该模块时,我将这些类称为StatCreator::Stat::Foo.new现在我想要一个存在于应用程序中的根Stat类。我在app/models中制作了我的Stat类,并在routes.rb中进行了设置。但是,如果我转到Rails控制台并尝试在应用程序/模型中使用Stat类,例如:Stat.by_use
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上