WebRTC库在Android端声音问题 5C

我使用webRTC库开发音视频聊天app,运行成功后图像能够联通,但是没有声音或者声音小
AudioSource audioSource = factory.createAudioSource(new MediaConstraints());
localMS.addTrack(factory.createAudioTrack("ARDAMSa0", audioSource));

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
webrtc在android平台下声音传输异常

我在根据Google的demo做了一个android平台下的基于webrtc技术的p2p视频通信。编译运行后,视频成功打通,但是声音传输却并不正常。我给两端换了不同的手机测试,发现有的手机声音较大,有的很小,大多数是没有声音。不知道有没有做这方面开发的大牛,给指点一下,拜谢了先!!!

webrtc音频采集传输问题

phonertc或者webrtc在安卓机顶盒上采集到的声音,传给对方,对方听不到或者声音断断续续

Android使用Webrtc进行降噪增益,如何适配64位so

Android使用Webrtc进行降噪增益编译成32位so测试正常,但是编译64位so报错,arm64-v8a的so文件报错,是需要64位的源码编译吗还是需要改什么东西,附错误信息,急求大神解答。 *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 2019-05-21 17:21:06.190 13887-13887/? A/DEBUG: Build fingerprint: 'Nokia/Panda_00CN/PDA:9/PPR1.180610.011/00CN_2_15B:user/release-keys' 2019-05-21 17:21:06.190 13887-13887/? A/DEBUG: Revision: '0' 2019-05-21 17:21:06.190 13887-13887/? A/DEBUG: ABI: 'arm64' 2019-05-21 17:21:06.190 13887-13887/? A/DEBUG: pid: 12202, tid: 13878, name: Thread-35 >>> com.xx.xx<<< 2019-05-21 17:21:06.190 13887-13887/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x5b5cb298 2019-05-21 17:21:06.190 13887-13887/? A/DEBUG: x0 000000005b5cb294 x1 0000000000000003 x2 00000000000000ff x3 0000000000000003 2019-05-21 17:21:06.191 13887-13887/? A/DEBUG: x4 0000000000001f40 x5 0000000000000003 x6 0000000000001f40 x7 0000000000000000 2019-05-21 17:21:06.191 13887-13887/? A/DEBUG: x8 0000000000000003 x9 0000000008000000 x10 0000000000430000 x11 0000007183dfc688 2019-05-21 17:21:06.191 13887-13887/? A/DEBUG: x12 0000007209bb8410 x13 dff7b546ac046781 x14 0000007206b68000 x15 0000007206b68000 2019-05-21 17:21:06.191 13887-13887/? A/DEBUG: x16 000000715ae2cc88 x17 000000715ae09e7c x18 0000000000000000 x19 000000005b5cb100 2019-05-21 17:21:06.191 13887-13887/? A/DEBUG: x20 0000000000000000 x21 00000000000000ff x22 0000000000001f40 x23 0000000000000003 2019-05-21 17:21:06.191 13887-13887/? A/DEBUG: x24 0000000000000018 x25 0000007159f2a588 x26 000000714082b4a0 x27 0000000000000001 2019-05-21 17:21:06.191 13887-13887/? A/DEBUG: x28 0000000000000000 x29 0000007159f28ee0 2019-05-21 17:21:06.191 13887-13887/? A/DEBUG: sp 0000007159f28eb0 lr 000000715ae08da0 pc 000000715ae09e84 2019-05-21 17:21:06.262 413-9844/? E/AudioALSAPlaybackHandlerBase: -getHardwareBufferInfo(), pcm_get_htimestamp fail, ret = -1, pcm_get_error = 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: backtrace: 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #00 pc 0000000000006e84 /data/app/com.xx.xx-U5O1pzNUtbiwoTPGd6O-UA==/split_config.arm64_v8a.apk (offset 0x1c000) (WebRtcAgc_InitDigital+8) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #01 pc 0000000000005d9c /data/app/com.xx.xx-U5O1pzNUtbiwoTPGd6O-UA==/split_config.arm64_v8a.apk (offset 0x1c000) (WebRtcAgc_Init+48) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #02 pc 0000000000033534 /data/app/com.xx.xx-U5O1pzNUtbiwoTPGd6O-UA==/oat/arm64/base.odex (offset 0x33000) (com.xx.xx.util.AgcNsUtils.init+164) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #03 pc 000000000055cd88 /system/lib64/libart.so (art_quick_invoke_stub+584) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #04 pc 00000000000cf740 /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #05 pc 00000000002823b8 /system/lib64/libart.so (art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::ShadowFrame*, unsigned short, art::JValue*)+344) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #06 pc 000000000027d480 /system/lib64/libart.so (bool art::interpreter::DoCall<true, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+752) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #07 pc 000000000052fa0c /system/lib64/libart.so (MterpInvokeVirtualQuickRange+420) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #08 pc 0000000000553194 /system/lib64/libart.so (ExecuteMterpImpl+30100) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #09 pc 00000000002146b8 /data/app/com..xx.xx-U5O1pzNUtbiwoTPGd6O-UA==/oat/arm64/base.vdex (com.xx.xx.AgcNsUtils.prepare+44) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #10 pc 0000000000255e70 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.1181525464+496) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #11 pc 000000000025b9f0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+216) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #12 pc 000000000027c358 /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+920) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #13 pc 000000000052f6f0 /system/lib64/libart.so (MterpInvokeVirtualQuick+584) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #14 pc 0000000000553114 /system/lib64/libart.so (ExecuteMterpImpl+29972) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #15 pc 00000000002bc446 /data/app/.xx.xx-U5O1pzNUtbiwoTPGd6O-UA==/oat/arm64/base.vdex (com.xx.xx.AudioRecorder.a+26) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #16 pc 0000000000255e70 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.1181525464+496) 2019-05-21 17:21:06.263 13887-13887/? A/DEBUG: #17 pc 000000000025b9f0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+216) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #18 pc 000000000027c358 /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+920) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #19 pc 000000000052d9e0 /system/lib64/libart.so (MterpInvokeDirect+296) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #20 pc 000000000054f494 /system/lib64/libart.so (ExecuteMterpImpl+14484) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #21 pc 00000000002bc388 /data/app/com.allinone.callerid-U5O1pzNUtbiwoTPGd6O-UA==/oat/arm64/base.vdex (com.allinone.callerid.util.recorder.AudioRecorder.a) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #22 pc 0000000000255e70 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.1181525464+496) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #23 pc 000000000025b9f0 /system/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::CodeItemDataAccessor const&, art::ShadowFrame*, art::JValue*)+216) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #24 pc 000000000027c358 /system/lib64/libart.so (bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*)+920) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #25 pc 000000000052dba4 /system/lib64/libart.so (MterpInvokeStatic+204) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #26 pc 000000000054f514 /system/lib64/libart.so (ExecuteMterpImpl+14612) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #27 pc 00000000002bbfe8 /data/app/com.allinone.callerid-U5O1pzNUtbiwoTPGd6O-UA==/oat/arm64/base.vdex (com.allinone.callerid.util.recorder.e.run+12) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #28 pc 0000000000255e70 /system/lib64/libart.so (_ZN3art11interpreterL7ExecuteEPNS_6ThreadERKNS_20CodeItemDataAccessorERNS_11ShadowFrameENS_6JValueEb.llvm.1181525464+496) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #29 pc 000000000051cde0 /system/lib64/libart.so (artQuickToInterpreterBridge+1032) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #30 pc 0000000000565efc /system/lib64/libart.so (art_quick_to_interpreter_bridge+92) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #31 pc 000000000025cfa8 /system/framework/arm64/boot.oat (offset 0x114000) (java.lang.Thread.run+72) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #32 pc 000000000055cd88 /system/lib64/libart.so (art_quick_invoke_stub+584) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #33 pc 00000000000cf740 /system/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+200) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #34 pc 00000000004633d0 /system/lib64/libart.so (art::(anonymous namespace)::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::(anonymous namespace)::ArgArray*, art::JValue*, char const*)+104) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #35 pc 0000000000464498 /system/lib64/libart.so (art::InvokeVirtualOrInterfaceWithJValues(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, jvalue*)+424) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #36 pc 000000000048f808 /system/lib64/libart.so (art::Thread::CreateCallback(void*)+1120) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #37 pc 0000000000083114 /system/lib64/libc.so (__pthread_start(void*)+36) 2019-05-21 17:21:06.264 13887-13887/? A/DEBUG: #38 pc 00000000000233bc /system/lib64/libc.so (__start_thread+68) 2019-05-21 17:21:06.455 413-9844/? E/AudioALSAPlaybackHandlerBase: -getHardwareBufferInfo(), pcm_get_htimestamp fail, ret = -1, pcm_get_error =

webrtc音视频通话,除了在华为手机上正常,其他手机均是远程视频黑屏情况

情况和问题描述: 最近在开发webrtc的音视频通话功能,本使用org.webrtc:google-webrtc:1.0.28513/这个版本开发,但是却发现远程视频显示不出来,过程没有任何报错,信令交互一切正常,我很疑惑,就将版本调整至org.webrtc:google-webrtc:1.0.24465@aar;让我惊喜的是在华为手机上正常了,远程和本地视频一切正常;但在1+、小米和红米等手机上无法正常显示出远程视频;本以为是没有video的candidate造成,但是经过华为手机反复测试和看log后发现,即使没有video的candidate都能正常显示出远程视频,所以我将这点给排除了;然后经过反反复复的测试和调整,华为手机只要不要用太新的webrtc版本就能正常,但其他手机均不正常;我在这个问题上已经纠结了两个星期,希望有大能能够帮助我。 这个问题实在很奇怪,没有报错,信令正常,交互正常,最终流能通,但就是无法显示远程视频;是解析的问题呢,还是渲染的问题,还是其他问题。很疑惑了,希望业界大佬指教!!! 正常截图: ![图片说明](https://img-ask.csdn.net/upload/201909/17/1568702658_848334.jpg) 异常截图: ![图片说明](https://img-ask.csdn.net/upload/201909/17/1568702684_763667.jpg) 然后经过log的反复查看,发现了以下的一个log,怀疑也可能有关系,本人webrtc小白,贴出讨论,虚心请教 ![图片说明](https://img-ask.csdn.net/upload/201909/17/1568702792_787513.png)

android webrtc视频通话的时候,如何截图

如题,有人和我说了一个思路,在渲染的时候保存图片就行了。 但我完全找不到视频帧在哪里,该怎样保存? 所以后来我试了下集成ffmpeg来截图,但是由于jni和C++几乎零基础, 不知道从何入手了.

webrtc编译Android版本编译参数is_clang=false时,编译报错,is_clang=true时,编译成功。

[2274/3376] LINK ./rgba_to_i420_converter FAILED: rgba_to_i420_converter exe.unstripped/rgba_to_i420_converter python "../../build/toolchain/gcc_link_wrapper.py" --output="./rgba_to_i420_converter" --strip="../../buildtools/third_party/eu-strip/bin/eu-strip" --unstripped-file="./exe.unstripped/rgba_to_i420_converter" -- ../../third_party/llvm-build/Release+Asserts/bin/clang++ -Wl,--fatal-warnings -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,-z,defs -Wl,--as-needed -fuse-ld=gold -Wl,--icf=all -Wl,--exclude-libs=libgcc.a -Wl,--exclude-libs=libvpx_assembly_arm.a --target=aarch64-linux-android -Wl,-mllvm,-enable-machine-outliner=never -Wl,--warn-shared-textrel -Wl,-O2 -Wl,--gc-sections -nodefaultlibs --sysroot=../../third_party/android_ndk/platforms/android-21/arch-arm64 -nostdlib -Wl,--warn-shared-textrel -pie -Bdynamic -Wl,-z,nocopyreloc -Wl,--dynamic-linker,/system/bin/linker64 -L../../third_party/android_ndk/sources/cxx-stl/llvm-libc++/libs/arm64-v8a -o "./exe.unstripped/rgba_to_i420_converter" -Wl,--start-group @"./rgba_to_i420_converter.rsp" -Wl,--end-group ../../third_party/android_ndk/platforms/android-21/arch-arm64/usr/lib/crtbegin_dynamic.o -lc -lgcc_s -lm -lrt -landroid_support ../../third_party/android_ndk/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/lib/gcc/aarch64-linux-android/4.9.x/libgcc.a -ldl -llog -lGLESv2 ../../third_party/android_ndk/platforms/android-21/arch-arm64/usr/lib/crtend_android.o /usr/bin/ld.gold: fatal error: obj/rtc_tools/rgba_to_i420_converter/converter.o: unsupported ELF machine number 183 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Rtc Android端视频存储与上传

基于WebRtc开发, Android端视频存储与上传怎么实现?

关于如何在java客户端通过webrtc实现音频通话

求大神指教! 现在服务是好的,PC客户端需要通过webrtc与服务通讯,实现音频通话,求支撑库和DEMO。 网上都是需要自己下载编译,有没有拿来主义。 不要浏览器的。 当然,如果你能让它在java客户端运行也可以。

基于chrome的webrtc在web端能不能实现分辨率动态调整,回音消除等等?

基于chrome的webrtc在web端能不能实现分辨率动态调整,回音消除等等? 1.还是必须要经过中转服务器对媒体流进行处理,能不能在web段进行处理呢? 2.如果有中转服务器,可以对媒体流进行二次处理吗?比如二次编码,自适应编码? 3.视频传输机制,chrome有没有做?还是传输方面,服务器端还要进行优化?谢谢各位大神!

webrtc中voiceengine在vs2010中编译出错

![图片说明](https://img-ask.csdn.net/upload/201507/14/1436881013_436597.png) 如上图所示,提示MoFreeMediaType和MoInitMediaType无法识别,这两个函数都在dmort.h这个头文件中,但我包含该头文件也还是不行。同样的工程在VS2005中编译就能通过,不会报上述错误,希望有大神可以帮忙解决下!

webview作为浏览器使用webrtc时报错

error: b.exports ## detail: "Failed to parse SessionDescription. Failed to parse audio codecs correctly." message: "something wrong with your network , please try late." name: "INTERNAL_ERROR" no: 30001

移动端WebRTC实时视频

最近在研究P2P实时视频,信令服务器与stun服务器都是部署在公网上(阿里云),最终测出来的结果为同一个局域网的两台移动设备可以链接进行通信;移动4G与WiFi,移动4G与联通4G,移动4G与电信4G,联通4G与电信4G都是可以通的; 后又经测试发现,联通4G与WiFi,电信4G与WiFi,WiFi与WiFi偶尔可以通信,但是大多数是不通的,测试中NAT给电信4G或者联通4G分配的内网外网IP映射是一只变化的,经查电信4G与联通4G分配是多IP,而移动的4G给分配的公网IP一直是一个(在p2p连接使用中),而电信,联通4G给分配的公网IP一直是变化的,请教各位大神,本人小白,能否给指点下电信和联通的分配的公网IP怎么一直是变化的能否更改stun配置来给固定分配一个可直接两客户端直接建立连接的公网IP,或者只考虑锥型路由器用stun穿透,不考虑turn,各位大神给指点下

webRTC手机端视频保存到本地

目前我有一个需求,希望通过浏览器的方式录视频、音频并且保存在本地,需求的代码原型地址: https://www.webrtc-experiment.com/RecordRTC/,目前在PC端(FireFox)已经可以完全实现相关需求, 当我在手机端(FirxFox + 安卓)使用时只保存了音频,视频流丢失。各位大神,能指点一下方向,调了好久都没有找到问题所在。感谢!

iOS WebRTC视频语音不同网段下点对点连接

我需要做WebRTC,在网上找了DEMO,测试了一下。在同一网段下能视频聊天,但是我将一个手机使用4G是就无法连接。问是STUN穿墙的原因吗?

关于webrtc,在同一网络的时候能正常工作,非同一网络的时候就不显示对方的视频。

后台用的java websocket和tomcat8. stun用的stun:stun.l.google.com:19302。 在宿舍里两个电脑之间能正常视频通信,但一台在学校一台在宿舍时就会看不到对方的视频。 奇怪的是此时对方视频上已经有了src=blob。。。的源信息。 请问这可能是什么地方的问题? 先行谢过各位看完的朋友。 这个网站上传到了https://csckaigi.chinanorth.cloudapp.chinacloudapi.cn/kaigi/。 因为用日语表示的,所以解释一下用法。 第一个用户点击つくる按钮创建房间,输入名字,就可以进入房间。 第二个用户输入房间号(可以在下方的房间列表上看到房间号,没有的话点击链接刷新),同样输入名字,就可以进入房间。这时应该双方可以互相看到对方的视频。

Android视频通话消除回声

项目中有用到视频通话,采用了RTMP双向推流拉流实现,但是会出现较大回声和噪音,使用了WebRTC的 ACME模块不知道是没接好还是什么原因,没有效果,想问下有Jspeex或者Speex处理回声经验的大佬吗,求指导

关于icecandidate和webrtc的sdp的一些问题

<div class="post-text" itemprop="text"> <p>Suppose there has 3 users A , B , C . And i am use Ajax rather than websockets to send and get messages.</p> <p>Question blow:</p> <p>1, In this case I just need that (B and C) can see A ,and don't need that A can see (B and C). I have added A's sdp(offer) to B . So is it necessary for A to add B's sdp(answer)? </p> <p>2, I have found there has so many(about 17) icecandidate generated when A createOffer(). and I don't know how to handle these icecandidate . should B (and C) add these all icecandidate one by one for 17 times ? </p> <p>3, As I said 3 users. This is a one-to-many application. How to implement it? my main question is how to deal the sdp and icecandidate of each one.Does A need to add others' sdp and icecandidate .</p> <p>here is the icecandidates blow:</p> <pre class="lang-js prettyprint-override"><code>{"candidate":"candidate:1754064501 1 udp 2122255103 2001::5ef5:79fd:8c8:c74e:f166:22f 52522 typ host generation 0","sdpMid":"audio","sdpMLineIndex":0} {"candidate":"candidate:1026183099 1 udp 2122194687 192.168.2.100 52523 typ host generation 0","sdpMid":"audio","sdpMLineIndex":0} {"candidate":"candidate:1754064501 2 udp 2122255102 2001::5ef5:79fd:8c8:c74e:f166:22f 52524 typ host generation 0","sdpMid":"audio","sdpMLineIndex":0} {"candidate":"candidate:1026183099 2 udp 2122194686 192.168.2.100 52525 typ host generation 0","sdpMid":"audio","sdpMLineIndex":0} {"candidate":"candidate:1754064501 1 udp 2122255103 2001::5ef5:79fd:8c8:c74e:f166:22f 52526 typ host generation 0","sdpMid":"video","sdpMLineIndex":1} {"candidate":"candidate:1026183099 1 udp 2122194687 192.168.2.100 52527 typ host generation 0","sdpMid":"video","sdpMLineIndex":1} {"candidate":"candidate:1754064501 2 udp 2122255102 2001::5ef5:79fd:8c8:c74e:f166:22f 52528 typ host generation 0","sdpMid":"video","sdpMLineIndex":1} {"candidate":"candidate:1026183099 2 udp 2122194686 192.168.2.100 52529 typ host generation 0","sdpMid":"video","sdpMLineIndex":1} {"candidate":"candidate:638524037 1 tcp 1518275327 2001::5ef5:79fd:8c8:c74e:f166:22f 0 typ host tcptype active generation 0","sdpMid":"audio","sdpMLineIndex":0} {"candidate":"candidate:1940501323 1 tcp 1518214911 192.168.2.100 0 typ host tcptype active generation 0","sdpMid":"audio","sdpMLineIndex":0} {"candidate":"candidate:638524037 2 tcp 1518275326 2001::5ef5:79fd:8c8:c74e:f166:22f 0 typ host tcptype active generation 0","sdpMid":"audio","sdpMLineIndex":0} {"candidate":"candidate:1940501323 2 tcp 1518214910 192.168.2.100 0 typ host tcptype active generation 0","sdpMid":"audio","sdpMLineIndex":0} {"candidate":"candidate:638524037 1 tcp 1518275327 2001::5ef5:79fd:8c8:c74e:f166:22f 0 typ host tcptype active generation 0","sdpMid":"video","sdpMLineIndex":1} {"candidate":"candidate:1940501323 1 tcp 1518214911 192.168.2.100 0 typ host tcptype active generation 0","sdpMid":"video","sdpMLineIndex":1} {"candidate":"candidate:638524037 2 tcp 1518275326 2001::5ef5:79fd:8c8:c74e:f166:22f 0 typ host tcptype active generation 0","sdpMid":"video","sdpMLineIndex":1} {"candidate":"candidate:1940501323 2 tcp 1518214910 192.168.2.100 0 typ host tcptype active generation 0","sdpMid":"video","sdpMLineIndex":1} null </code></pre> <p>and here is my application's code: you will find that i use a temp button which call "Get Answer" to let A to get sdp and icecandidate (has Commented out) of B or C </p> <pre class="lang-js prettyprint-override"><code>var getUserMedia = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia); //use Google's stun server var iceServer = { "iceServers": [{ "url": "stun:stun.l.google.com:19302" }] }; var PeerConnection = (window.PeerConnection || window.webkitPeerConnection00 || window.webkitRTCPeerConnection || window.mozRTCPeerConnection); var pc = new PeerConnection(iceServer); var iceTimes = 1; function getAnswer(cid) { teacherLoop(cid); /*for(i=1;i&lt;4;i++) { $.ajax({ url:'/get_webrtc_info.php', type:'POST', async:false, data:{role:'get_answer_ice',times:i,"cid": cid}, success:function(msg) { var msg = JSON.parse(msg); pc.addIceCandidate(new RTCIceCandidate(msg)); } }); }*/ } //start live function startLive(cid) { pc.onicecandidate = function(event){ $.ajax({ url:"/webrtc.php", type:'POST', async:false, data:{ "event": "__ice_candidate", "times": iceTimes, "cid": cid, "data": { "candidate": JSON.stringify(event.candidate) } }, }); iceTimes++; }; $(".course-item-play-block").slideDown(); getUserMedia.call(navigator, { "audio": true, "video": true }, function(stream){ var myselfVideoElement = document.getElementById('video'); myselfVideoElement.src = URL.createObjectURL(stream); pc.addStream(stream); pc.createOffer(function(desc){ pc.setLocalDescription(desc); $.ajax({ url:'/webrtc.php', type:'POST', async:false, data:{ "event": "__offer", "cid": cid, "data": { "sdp": JSON.stringify(desc) } }, success:function() { //var timer = setInterval(teacherLoop,4000); } }); }); }, function(error){ // }); } function joinLive(cid) { $(".course-item-play-block").slideDown(); pc.onaddstream = function(event) { var remote_video = document.getElementById('video'); remote_video.src = URL.createObjectURL(event.stream); } pc.onicecandidate = function(event){ $.ajax({ url:"/webrtc.php", type:'POST', async:false, data:{ "event": "__ice_candidate_answer", "times": answerIceTimes, "cid": cid, "data": { "candidate": JSON.stringify(event.candidate) } }, }); answerIceTimes++; }; studentLoop(cid) getIce(cid) } function getIce(cid) { for(i=1;i&lt;17;i++) { $.ajax({ url:'/get_webrtc_info.php', type:'POST', async:false, data:{role:'get_ice',times:i,"cid": cid}, success:function(msg) { var msg = JSON.parse(msg); pc.addIceCandidate(new RTCIceCandidate(msg)); } }); } } function teacherLoop(cid) { $.ajax({ url:'/get_webrtc_info.php', type:'POST', data:{role:'teacher',"cid": cid}, success:function(msg) { var msg = JSON.parse(msg); pc.setRemoteDescription(new RTCSessionDescription(msg)); } }); } function studentLoop(cid) { $.ajax({ url:'/get_webrtc_info.php', type:'POST', async:false, data:{role:'student',"cid": cid}, success:function(msg) { var msg = JSON.parse(msg); pc.setRemoteDescription(new RTCSessionDescription(msg)); pc.createAnswer(function(answer) { pc.setLocalDescription(new RTCSessionDescription(answer), function() { $.ajax({ url:'/webrtc.php', type:'POST', async:false, data:{ "event": "__answer", "cid": cid, "data": { "sdp": JSON.stringify(answer) } }, success:function() { //var timer = setInterval(student,4000); //studentLoop() } }); }); }); }); } </code></pre> <pre class="lang-html prettyprint-override"><code>&lt;div class="block course-item-play-block"&gt; &lt;h3&gt;Living:&lt;/h3&gt; &lt;video id="video" autoplay&gt;&lt;/video&gt; &lt;/div&gt; &lt;?php if ($isTeacher) {?&gt; &lt;div class="btn edit-course-btn common-btn common-btn-6x18 common-btn-blue" onclick="startLive(&lt;?=$Data['cid']?&gt;)"&gt;Start Live&lt;/div&gt; &lt;div class="btn edit-course-btn common-btn common-btn-6x18 common-btn-blue" onclick="getAnswer(&lt;?=$Data['cid']?&gt;)"&gt;Get Answer&lt;/div&gt; &lt;?php }else{?&gt; &lt;div class="btn edit-course-btn common-btn common-btn-6x18 common-btn-blue" onclick="joinLive(&lt;?=$Data['cid']?&gt;)"&gt;Join Live&lt;/div&gt; &lt;?php }?&gt; </code></pre> </div>

请教一下webrtc相关的问题

具体情况是这样的,我们公司主要是做音视频这方面的,cs架构,有自己的设备,一般就是把设备卖出去,然后pc客户端这边能看见设备拍摄的一些画面之类的,然后公司领导看见别的公司也做音视频,bs架构的,用的是webrtc的技术,视频传回来的流没什么延迟,比我们的效果要好,还有就是客户那边也要求说想要bs这种架构的,不用安装下载,方便一些,我们公司领导就心动了,然后让我了解,我纯小白,代码也不会写= = 刚入职,以前也没做过音视频这方面,真是一点点都不懂。 都有什么公司用这个webrtc技术啊,市场占比高嘛?开发成本、优缺点什么的都是什么啊,自己也查过一些资料,要不就是看不懂,要不就是复制粘贴,有没有哪个大神可以指教一下。

iOS webRTC视频语音不同网段下无法连接

使用WebRTC实现视频聊天,我使用两部手机在同一个WiFi下正常运行。![图片说明](https://img-ask.csdn.net/upload/201806/20/1529490436_732138.png) 其中一部手机切换4G网络是,连接就断开了。![图片说明](https://img-ask.csdn.net/upload/201806/20/1529490499_960268.png)。 在4G网络下,使用webSocket连接服务器没问题。这种情况是否是因为STUN无法穿墙,如何能是两部手机在不同网段下实现连接。这里有大佬有可以穿墙的STUN,可以发一下让我试试。。

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

删库了,我们一定要跑路吗?

在工作中,我们误删数据或者数据库,我们一定需要跑路吗?我看未必,程序员一定要学会自救,神不知鬼不觉的将数据找回。 在 mysql 数据库中,我们知道 binlog 日志记录了我们对数据库的所有操作,所以 binlog 日志就是我们自救的利器。 接下来就来开启程序员自救之路。 想要自救成功,binlog 这把利器一定要好,在自己之前,我们一定要确定我们有 binlog 这把利器,以下就是确保有 bi...

再不跳槽,应届毕业生拿的都比我多了!

跳槽几乎是每个人职业生涯的一部分,很多HR说“三年两跳”已经是一个跳槽频繁与否的阈值了,可为什么市面上有很多程序员不到一年就跳槽呢?他们不担心影响履历吗? PayScale之前发布的**《员工最短任期公司排行榜》中,两家码农大厂Amazon和Google**,以1年和1.1年的员工任期中位数分列第二、第四名。 PayScale:员工最短任期公司排行榜 意外的是,任期中位数极小的这两家公司,薪资...

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

华为初面+综合面试(Java技术面)附上面试题

华为面试整体流程大致分为笔试,性格测试,面试,综合面试,回学校等结果。笔试来说,华为的难度较中等,选择题难度和网易腾讯差不多。最后的代码题,相比下来就简单很多,一共3道题目,前2题很容易就AC,题目已经记不太清楚,不过难度确实不大。最后一题最后提交的代码过了75%的样例,一直没有发现剩下的25%可能存在什么坑。 笔试部分太久远,我就不怎么回忆了。直接将面试。 面试 如果说腾讯的面试是挥金如土...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

现代的 “Hello, World”,可不仅仅是几行代码而已

作者 |Charles R. Martin译者 | 弯月,责编 | 夕颜头图 |付费下载自视觉中国出品 | CSDN(ID:CSDNnews)新手...

!大部分程序员只会写3年代码

如果世界上都是这种不思进取的软件公司,那别说大部分程序员只会写 3 年代码,恐怕就没有程序员这种职业。

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

HTTP与HTTPS的区别

面试官问HTTP与HTTPS的区别,我这样回答让他竖起大拇指!

程序员毕业去大公司好还是小公司好?

虽然大公司并不是人人都能进,但我仍建议还未毕业的同学,尽力地通过校招向大公司挤,但凡挤进去,你这一生会容易很多。 大公司哪里好?没能进大公司怎么办?答案都在这里了,记得帮我点赞哦。 目录: 技术氛围 内部晋升与跳槽 啥也没学会,公司倒闭了? 不同的人脉圈,注定会有不同的结果 没能去大厂怎么办? 一、技术氛围 纵观整个程序员技术领域,哪个在行业有所名气的大牛,不是在大厂? 而且众所...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

程序员为什么千万不要瞎努力?

本文作者用对比非常鲜明的两个开发团队的故事,讲解了敏捷开发之道 —— 如果你的团队缺乏统一标准的环境,那么即使勤劳努力,不仅会极其耗时而且成果甚微,使用...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

立即提问
相关内容推荐