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

[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)

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
webrtc并发测试有哪些好用的工具
我们自己做了一个webrtcServer,目前是200路视频流能够正常,但是超过200路,目前无法测试,因为每个PC机上面启动的Chrome浏览器且编解码根据不通PC机的性能是有区别的,目前我能够找到的PC机是有限的,那么问题就来了: 我如何能够用有限的PC机模拟出多个浏览器,来并发压我的webrtcServer
有没有大神知道如何从webrtc的MediaStream流对象中获知视频编码格式呀
![MediaStream对象](https://img-ask.csdn.net/upload/202002/11/1581416562_197321.png) 我找了它的所有属性和它的方法,硬是没找到哪里可以获取视频流信息。 ![视频轨道属性](https://img-ask.csdn.net/upload/202002/11/1581416712_466469.png) 这个是视频轨道属性的信息。这个里面也没有视频编码格式等相关信息呀。 求大神解救
Android5.0 编译出错,哪位大神帮帮我
mkdir -p out/target/product/generic/obj/STATIC_LIBRARIES/third_party_webrtc_modules_audioproc_debug_proto_gyp_intermediates; cp out/target/product/generic/obj/GYP/shared_intermediates/protoc_out/webrtc/audio_processing/debug.pb.cc out/target/product/generic/obj/STATIC_LIBRARIES/third_party_webrtc_modules_audioproc_debug_proto_gyp_intermediates/debug.pb.cc host Executable: third_party_libvpx_libvpx_obj_int_extract_arm_host_gyp (out/host/linux-x86/obj32/EXECUTABLES/third_party_libvpx_libvpx_obj_int_extract_arm_host_gyp_intermediates/libvpx_obj_int_extract) target thumb C++: third_party_webrtc_modules_rtp_rtcp_gyp <= external/chromium_org/third_party/webrtc/modules/rtp_rtcp/source/rtp_header_parser.cc /home/rock/android-5.0.0_r2/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/bin/../lib/gcc/x86_64-linux/4.6/../../../../x86_64-linux/bin/ld: error: out/host/linux-x86/obj32/EXECUTABLES/third_party_libvpx_libvpx_obj_int_extract_arm_host_gyp_intermediates/third_party/libvpx/source/libvpx/build/make/obj_int_extract.o: file is empty /home/rock/android-5.0.0_r2/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/bin/../sysroot/usr/lib/../lib32/Scrt1.o(.text+0x28): error: undefined reference to 'main' collect2: ld returned 1 exit status make: *** [out/host/linux-x86/obj32/EXECUTABLES/third_party_libvpx_libvpx_obj_int_extract_arm_host_gyp_intermediates/libvpx_obj_int_extract] 错误 1 make: *** 正在等待未完成的任务.... 哪位大神可以帮帮我。
webrtc在android平台下声音传输异常
我在根据Google的demo做了一个android平台下的基于webrtc技术的p2p视频通信。编译运行后,视频成功打通,但是声音传输却并不正常。我给两端换了不同的手机测试,发现有的手机声音较大,有的很小,大多数是没有声音。不知道有没有做这方面开发的大牛,给指点一下,拜谢了先!!!
webrtc 通过coturn服务器网页视频 4g和wifi不行 局域网测试可以视频
coturn服务器有数据产生! 但是视频没有办法显示 求大神指点
WebRTC库在Android端声音问题
我使用webRTC库开发音视频聊天app,运行成功后图像能够联通,但是没有声音或者声音小 AudioSource audioSource = factory.createAudioSource(new MediaConstraints()); localMS.addTrack(factory.createAudioTrack("ARDAMSa0", audioSource));
Webrtc如何添加进去x265编码器。编译上面如何编译
Webrtc如何添加进去x265编码器。编译上面如何编译,webrtc源码支持的是ffmpeg的h265解码,但是编码的话,总感觉自己用ninja编译不进去
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 =
做一个TURNSERVER穿透服务器
我想做一个NAT穿透,用COTURN搭建一个TURNSERVER,配合WEBRTC使用,我现在的方法搭建TURNSERVER的话,都会有一个问题,就是连接不稳定,隔段时间就会无法连接,必须重启本地才能连接。而且不支持移动网络。我基本是门外汉,所以付费求助。https://docs.unrealengine.com/zh-CN/Platforms/PixelStreaming/Hosting/index.html这个是具体需求,软件的文档,大家看一下,如果可以帮忙做,要积分或者RMB都可以商量。加微信15077118199或者直接回答都可以
webrtc中voiceengine在vs2010中编译出错
![图片说明](https://img-ask.csdn.net/upload/201507/14/1436881013_436597.png) 如上图所示,提示MoFreeMediaType和MoInitMediaType无法识别,这两个函数都在dmort.h这个头文件中,但我包含该头文件也还是不行。同样的工程在VS2005中编译就能通过,不会报上述错误,希望有大神可以帮忙解决下!
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)
webrtc框架下得isac语音译码问题
看了了webrtc源代码的isac编译码程序,自己写了一个控制台程序,读取一个pcm int16的话音文件,然后用isac编码,最后译码,译码后语音明显有破音和过载,与原语音比较差异很明显,始终找不到原因,忘高手指教。以下是我写的源代码。 #include "stdafx.h" #include "isac.h" #include "utility.h" #include "math.h" #include "windows.h"; int _tmain(int argc, _TCHAR* argv[]) { ISACStruct* ISAC_main_inst; WebRtc_Word16 stream_len = 0; IsacSamplingRate sampFreqKHz = kIsacWideband; WebRtc_Word16 declen; WebRtc_Word16 speechType[1]; *speechType = 1; WebRtc_UWord16 payload[600]; WebRtc_Word16 decoded[1920]; WebRtc_Word16 decodeout[1920]; WebRtc_UWord16 payloadRCU[600]; WebRtc_Word16 rcuStreamLen = 0; int samplesIn10Ms = 160, cur_framesmpls = 0; const char Infilename[] = "D:\\matlab code\\fileout.pcm"; const char Outfilename[] = "D:\\matlab code\\fileout_decode.pcm"; FILE *filein, *fileout; short shortdata[160]; memset(shortdata, 0, 160); memset(decoded, 0, 1920); filein = fopen(Infilename, "r"); fileout = fopen(Outfilename, "w"); fclose(fileout); fileout = fopen(Outfilename, "a+"); //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ int err = WebRtcIsac_Create(&ISAC_main_inst); WebRtcIsac_SetEncSampRate(ISAC_main_inst, (sampFreqKHz == 16) ? kIsacWideband : kIsacSuperWideband); WebRtcIsac_SetDecSampRate(ISAC_main_inst, (sampFreqKHz == 16) ? kIsacWideband : kIsacSuperWideband); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ fseek(filein, 0, SEEK_END); int fsize = ftell(filein); int samplenum = floor((double)fsize / 2); int blocknum = floor((double)samplenum / samplesIn10Ms/3); fseek(filein, 0, SEEK_SET); if (WebRtcIsac_DecoderInit(ISAC_main_inst) < 0) { printf("cannot initialize decoder\n"); return -1; } if (WebRtcIsac_EncoderInit(ISAC_main_inst, 0) < 0) { printf("cannot initialize encoder\n"); return -1; } if (WebRtcIsac_ControlBwe(ISAC_main_inst, 36000, 30, 1) < 0) { printf("cannot configure BWE\n"); return -1; } BottleNeckModel packetData; packetData.arrival_time = 0; packetData.sample_count = 0; packetData.rtp_number = 0; stream_len = 0; for (int i = 0; i < blocknum; i++) { cur_framesmpls = 0; stream_len = 0; fseek(filein, i*samplesIn10Ms * 3 * 2, SEEK_SET); //+++++++++++read file and encode while (stream_len == 0) { int k = 0; int size = fread(shortdata, sizeof(short), samplesIn10Ms, filein); k++; fseek(filein, i*samplesIn10Ms * 3 * 2 + samplesIn10Ms*2*k, SEEK_SET); cur_framesmpls += samplesIn10Ms; //-------- iSAC encoding --------- stream_len = WebRtcIsac_Encode(ISAC_main_inst, shortdata, (WebRtc_Word16*)payload); if (stream_len < 0) { // exit if returned with error //errType=WebRtcIsac_GetErrorCode(ISAC_main_inst); fprintf(stderr, "\nError in encoder\n"); getchar(); exit(EXIT_FAILURE); } } rcuStreamLen = WebRtcIsac_GetRedPayload(ISAC_main_inst, (WebRtc_Word16*)payloadRCU); //++++++++++++++test parameters++++++++ //WebRtc_Word32 sendbottleneck; //WebRtcIsac_GetUplinkBw(ISAC_main_inst, &sendbottleneck); //WebRtcIsac_UpdateUplinkBw(ISAC_main_inst, 9); WebRtc_Word16 bweindex, framelen; WebRtcIsac_ReadBwIndex((WebRtc_Word16*)payload, &bweindex); WebRtcIsac_UpdateUplinkBw(ISAC_main_inst, bweindex); WebRtcIsac_ReadFrameLen(ISAC_main_inst, (WebRtc_Word16*)payload, &framelen); //=========================updata bw======================================== //get_arrival_time(cur_framesmpls, 10000, 16000, &packetData, //sampFreqKHz * 1000, sampFreqKHz * 1000); /* /* if (WebRtcIsac_UpdateBwEstimate(ISAC_main_inst, payload, stream_len, 1, 0, 480) < 0) { printf(" BWE Error at client\n"); return -1; }*/ //======================= iSAC decoding =========================== declen = WebRtcIsac_Decode(ISAC_main_inst, payload, stream_len, decoded, speechType); if (declen <= 0) { //errType=WebRtcIsac_GetErrorCode(ISAC_main_inst); fprintf(stderr, "\nError in decoder.\n"); getchar(); exit(1); } //+++++++++++++++++++++write file to the out file /*for (int i = 0; i < declen; i++) { WebRtc_Word16 bit1 = (int16_t)decoded[i] >> 15 & 0x0001; WebRtc_Word16 bit2 = (int16_t)decoded[i] >> 13 & 0x0002; WebRtc_Word16 bit3 = (int16_t)decoded[i] >> 11 & 0x0004; WebRtc_Word16 bit4 = (int16_t)decoded[i] >> 9 & 0x0008; WebRtc_Word16 bit5 = (int16_t)decoded[i] >> 7 & 0x0010; WebRtc_Word16 bit6 = (int16_t)decoded[i] >> 5 & 0x0020; WebRtc_Word16 bit7 = (int16_t)decoded[i] >> 3 & 0x0040; WebRtc_Word16 bit8 = (int16_t)decoded[i] >> 1 & 0x0080; WebRtc_Word16 bit9 = (int16_t)decoded[i] <<1 & 0x0100; WebRtc_Word16 bit10 = (int16_t)decoded[i] <<3 & 0x0200; WebRtc_Word16 bit11 = (int16_t)decoded[i] << 5 & 0x0400; WebRtc_Word16 bit12 = (int16_t)decoded[i] << 7 & 0x0800; WebRtc_Word16 bit13 = (int16_t)decoded[i] << 9 & 0x1000; WebRtc_Word16 bit14 = (int16_t)decoded[i] << 11 & 0x2000; WebRtc_Word16 bit15 = (int16_t)decoded[i] << 13 & 0x4000; WebRtc_Word16 bit16 = (int16_t)decoded[i] << 15 & 0x8000; decodeout[i] = bit1 | bit2 | bit3 | bit4 | bit5 | bit6| bit7 | bit8 | bit9 | bit10 | bit11 | bit12| bit13 | bit14 | bit15 | bit16; }*/ fwrite(decoded, sizeof(WebRtc_Word16), declen, fileout); } fclose(filein); fclose(fileout); return 0; }
关于如何在java客户端通过webrtc实现音频通话
求大神指教! 现在服务是好的,PC客户端需要通过webrtc与服务通讯,实现音频通话,求支撑库和DEMO。 网上都是需要自己下载编译,有没有拿来主义。 不要浏览器的。 当然,如果你能让它在java客户端运行也可以。
Rtc Android端视频存储与上传
基于WebRtc开发, Android端视频存储与上传怎么实现?
webrtc的一些问题,有没有大佬帮忙提供下方法?
现在有个需求是:固话的模拟信号转换为数字信号,然后通过webrtc接入传输到网页,实现固话和网页的通讯。有没有大佬提供下思路啊,webrtc怎么接入转换后的数字信号呢?其中实现通讯还需要哪些技术呢?
android webrtc视频通话的时候,如何截图
如题,有人和我说了一个思路,在渲染的时候保存图片就行了。 但我完全找不到视频帧在哪里,该怎样保存? 所以后来我试了下集成ffmpeg来截图,但是由于jni和C++几乎零基础, 不知道从何入手了.
webrtc音频采集传输问题
phonertc或者webrtc在安卓机顶盒上采集到的声音,传给对方,对方听不到或者声音断断续续
WebRTC音视频编解码异常中断
WebRTC实现视频会议时,发现接听方的音视频异常中断,查看日志发现音视频的解码器被异常销毁了。 具体日志如下: ``` 11-08 14:06:16.811 18846-18846/com.goldnetsh.mesh I/SurfaceView: Changes: creating=false format=false size=false visible=false left=false top=false mUpdateWindowNeeded=true mReportDrawNeeded=true redrawNeeded=false forceSizeChanged=false mVisible=true mRequestedVisible=true, this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:16.811 18846-18846/com.goldnetsh.mesh I/SurfaceView: Cur surface: Surface(name=null)/@0x17aa4b, this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:16.818 18846-18846/com.goldnetsh.mesh I/SurfaceView: New surface: Surface(name=null)/@0xf88c28, vis=true, frame=Rect(0, 136 - 720, 1096), this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:16.818 18846-18846/com.goldnetsh.mesh I/SurfaceView: surfaceRedrawNeeded, this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:16.818 18846-18846/com.goldnetsh.mesh I/SurfaceView: finishedDrawing, this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:22.732 18846-20178/com.goldnetsh.mesh I/fm: Increasing Opus encoder quality to 60.00 %. 11-08 14:06:28.837 18846-20178/com.goldnetsh.mesh I/fm: Increasing Opus encoder quality to 70.00 %. 11-08 14:06:34.934 18846-20178/com.goldnetsh.mesh I/fm: Increasing Opus encoder quality to 80.00 %. 11-08 14:06:40.931 18846-20178/com.goldnetsh.mesh I/fm: Increasing Opus encoder quality to 90.00 %. 11-08 14:06:42.990 18846-18846/com.goldnetsh.mesh I/SurfaceView: updateWindow -- onWindowVisibilityChanged, visibility = 8, this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:42.990 18846-18846/com.goldnetsh.mesh I/SurfaceView: Changes: creating=false format=false size=false visible=true left=false top=false mUpdateWindowNeeded=false mReportDrawNeeded=false redrawNeeded=false forceSizeChanged=false mVisible=true mRequestedVisible=false, this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:42.990 18846-18846/com.goldnetsh.mesh I/SurfaceView: Cur surface: Surface(name=null)/@0x17aa4b, this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:42.993 18846-18846/com.goldnetsh.mesh I/SurfaceView: New surface: Surface(name=null)/@0xf88c28, vis=false, frame=Rect(0, 136 - 720, 1096), this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:42.993 18846-18846/com.goldnetsh.mesh I/SurfaceView: Callback --> surfaceDestroyed, this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:42.993 18846-18846/com.goldnetsh.mesh I/SurfaceView: surfaceDestroyed callback +, this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:43.003 18846-18846/com.goldnetsh.mesh I/SurfaceView: surfaceDestroyed callback -, this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:43.004 18846-20209/com.goldnetsh.mesh I/DefaultContextFactory: eglDestroyContext = 152, this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:43.005 18846-18846/com.goldnetsh.mesh I/SurfaceView: updateWindow -- onDetachedFromWindow, this = fm.video.AndroidOpenGLView{c08a40c V.E...... ........ 0,88-720,1048} 11-08 14:06:43.067 18846-20639/com.goldnetsh.mesh I/fm: Destroying audio packetizer: OPUS:8000:1 11-08 14:06:43.067 18846-20639/com.goldnetsh.mesh I/fm: Destroying audio encoder: OPUS:8000:1 11-08 14:06:58.231 18846-20218/com.goldnetsh.mesh I/fm: Destroying audio decoder: OPUS:8000:1 11-08 14:06:58.233 18846-20218/com.goldnetsh.mesh I/fm: Destroying audio decoder: PCMU:8000:1 11-08 14:06:58.233 18846-20218/com.goldnetsh.mesh I/fm: Destroying audio decoder: PCMA:8000:1 11-08 14:06:58.526 18846-20218/com.goldnetsh.mesh I/fm: Destroying video decoder: VP8:90000 11-08 14:06:58.529 18846-20218/com.goldnetsh.mesh I/fm: Destroying video decoder: RED:90000 11-08 14:06:58.529 18846-20218/com.goldnetsh.mesh I/fm: Destroying video decoder: ULPFEC:90000 ```
Android 悬浮窗获取点击拖拽事件
之前参照网上例子写过一个demo,实现在Activity中点击最小化按钮,将该Activity finish,并启动servie生成一个悬浮按钮,可点击也可拖拽; 最近工作需要也做一个相似的悬浮窗,悬浮按钮生成了,App被Home也能存在,不会 消失,但该悬浮按钮却没法捕获点击和拖拽事件。 这两个代码几乎一摸一样,请大神们帮忙看下是哪里出的问题,谢谢! 代码如下: package com.example.menqi.myapplication; import android.app.Service; import android.content.Context; import android.content.Intent; import android.graphics.PixelFormat; import android.os.IBinder; import android.util.DisplayMetrics; import android.view.Gravity; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; public class MyService extends Service { private WindowManager mWindowManager; private WindowManager.LayoutParams mLayoutParams; /** * float的布局view */ private View mFloatView; private ViewGroup glSurfaceView; private int mFloatWinWidth,mFloatWinHeight;//悬浮窗的宽高 //private int mFloatWinMarginTop,mFloatWinMarginRight; public MyService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. return null; } @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { createWindowManager(); createFloatView(); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); removeFloatView(); } private void createWindowManager() { // 取得系统窗体 mWindowManager= (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); //计算得出悬浮窗口的宽高 DisplayMetrics metric =new DisplayMetrics(); mWindowManager.getDefaultDisplay().getMetrics(metric); int screenWidth = metric.widthPixels; mFloatWinWidth = screenWidth *1/3; mFloatWinHeight=mFloatWinWidth*4/3; //mFloatWinMarginTop= (int)this.getResources().getDimension(R.dimen.rkcloud_av_floatwin_margintop); //mFloatWinMarginRight= (int)this.getResources().getDimension(R.dimen.rkcloud_av_floatwin_marginright); // 窗体的布局样式 // 获取LayoutParams对象 mLayoutParams=new WindowManager.LayoutParams(); // 确定爱悬浮窗类型,表示在所有应用程序之上,但在状态栏之下 //TODO? 在android2.3以上可以使用TYPE_TOAST规避权限问题 mLayoutParams.type= WindowManager.LayoutParams.TYPE_TOAST;//TYPE_PHONE mLayoutParams.format= PixelFormat.RGBA_8888; mLayoutParams.flags= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL; // 悬浮窗的对齐方式 mLayoutParams.gravity= Gravity.LEFT| Gravity.TOP; // 悬浮窗的位置 mLayoutParams.x=70; mLayoutParams.y=210; mLayoutParams.width=mFloatWinWidth; mLayoutParams.height=mFloatWinHeight; } //开始触控的坐标,移动时的坐标(相对于屏幕左上角的坐标) private int mTouchStartX, mTouchStartY, mTouchCurrentX, mTouchCurrentY; //开始时的坐标和结束时的坐标(相对于自身控件的坐标) private int mStartX, mStartY, mStopX, mStopY; //判断悬浮窗口是否移动,这里做个标记,防止移动后松手触发了点击事件 private boolean isMove; /** * 创建悬浮窗 */ private void createFloatView() { LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); mFloatView= inflater.inflate(R.layout.floatlayout, null); glSurfaceView= (ViewGroup)mFloatView.findViewById(R.id.VOIPFloatView); //glSurfaceView.setPreserveEGLContextOnPause(true); glSurfaceView.setKeepScreenOn(true); mWindowManager.addView(mFloatView,mLayoutParams); mFloatView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v,MotionEvent event) { int action = event.getAction(); /*if(MotionEvent.ACTION_DOWN == action) { mStartX=mLastX= (int) event.getRawX(); mStartY=mLastY= (int) event.getRawY(); }else if(MotionEvent.ACTION_UP == action) { int dx = (int) event.getRawX() -mStartX; int dy = (int) event.getRawY() -mStartY; if(Math.abs(dx) >5|| Math.abs(dy) >5) { return true; } }else if(MotionEvent.ACTION_MOVE == action) { int dx = (int) event.getRawX() -mLastX; int dy = (int) event.getRawY() -mLastY; mLayoutParams.x=mLayoutParams.x- dx; mLayoutParams.y=mLayoutParams.y+ dy; mWindowManager.updateViewLayout(mFloatView,mLayoutParams); mLastX= (int) event.getRawX(); mLastY= (int) event.getRawY(); } return false;*/ switch (action) { case MotionEvent.ACTION_DOWN: isMove = false; mTouchStartX = (int) event.getRawX(); mTouchStartY = (int) event.getRawY(); mStartX = (int) event.getX(); mStartY = (int) event.getY(); break; case MotionEvent.ACTION_MOVE: mTouchCurrentX = (int) event.getRawX(); mTouchCurrentY = (int) event.getRawY(); mLayoutParams.x += mTouchCurrentX - mTouchStartX; mLayoutParams.y += mTouchCurrentY - mTouchStartY; mWindowManager.updateViewLayout(mFloatView, mLayoutParams); mTouchStartX = mTouchCurrentX; mTouchStartY = mTouchCurrentY; break; case MotionEvent.ACTION_UP: mStopX = (int) event.getX(); mStopY = (int) event.getY(); if (Math.abs(mStartX - mStopX) >= 1 || Math.abs(mStartY - mStopY) >= 1) { isMove = true; } break; } //如果是移动事件不触发OnClick事件,防止移动的时候一放手形成点击事件 return isMove; } }); mFloatView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ToVOIPActivity(); MyService.this.stopSelf(); } }); /*VideoRendererGui.setView(glSurfaceView, new Runnable() { @Override public void run() { if(WebRtcHelperEx.getInstance().isWebRtcChanelAlive()) { WebRtcHelperEx.getInstance().updateVideoUI(WebRtcHelperEx.latestLocalVideoSize,WebRtcHelperEx.latestRemoteVideoSize); } } }); if(WebRtcHelperEx.getInstance().isWebRtcChanelAlive()) { LogEx.d(TAG,"createFloatView: webrtc instance is alive and we will call resetRenders"); WebRtcHelperEx.getInstance().resetRenders(); WebRtcHelperEx.getInstance().updateVideoUI(WebRtcHelperEx.VIDEOSIZE_SMALL,WebRtcHelperEx.VIDEOSIZE_BIG); }*/ } private void removeFloatView() { if(mFloatView != null && mWindowManager != null) { mWindowManager.removeView(mFloatView); } } /** * 单击后回到@WebRTCActivity以切换为大尺寸页面 */ private void ToVOIPActivity() { //TODO跳转到Activity Intent intentToActivity = new Intent(this, Main2Activity.class);//WebPhoneIncomingCallActivity来电页面 intentToActivity.setFlags(FLAG_ACTIVITY_NEW_TASK); startActivity(intentToActivity); } } layout <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/VOIPFloatView" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageButton android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/avcallfloat" android:scaleType="centerInside" /> </FrameLayout> </RelativeLayout> </RelativeLayout>
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
win10系统安装教程(U盘PE+UEFI安装)
一、准备工作 u盘,电脑一台,win10原版镜像(msdn官网) 二、下载wepe工具箱  极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件,   选择安装到U盘(按照操作无需更改) 三、重启进入pe系统   1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入启动项选择(技嘉主板是F12)     选择需要启
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
Nginx 软件层面加强Nginx性能优化的面试问答和解决方案
Nginx 软件层面加强Nginx性能优化的面试问答和解决方案 去年我去爱卡汽车面试PHP,一轮和二轮面的都不错,在三轮面到Nginx的时候很多问题当时不知道怎么回答,确实没有深入学习过,花了一段时间的学习,终于能解答Nginx高性能优化的问题了,10月24号为了获得程序员勋章,发布了半个优化笔记,浏览到了1000+,受到这个鼓舞,我抽时间在仔细整理下关于Nginx性能优化的问题,我们从软件说起。...
【管理系统课程设计】美少女手把手教你后台管理
【文章后台管理系统】URL设计与建模分析+项目源码+运行界面 栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码) 1. 这是一个什么系统? 1.1 学习后台管理系统的原因 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往药...
11月19日科技资讯|华为明日发布鸿蒙整体战略;京东宣告全面向技术转型;Kotlin 1.3.60 发布
「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。扫描上方二维码进入 CSDN App 可以收听御姐萌妹 Style 的人工版音频哟。 一分钟速览新闻点! 6G 专家组成员:速率是 5G 的 10 至 100 倍,预计 2030 年商用 雷军:很多人多次劝我放弃WPS,能坚持下来并不是纯粹的商业决定 ...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n
化繁为简 - 腾讯计费高一致TDXA的实践之路
导语:腾讯计费是孵化于支撑腾讯内部业务千亿级营收的互联网计费平台,在如此庞大的业务体量下,腾讯计费要支撑业务的快速增长,同时还要保证每笔交易不错账。采用最终一致性或离线补...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
Java学习笔记(七十二)—— Cookie
概述 会话技术: 会话:一次会话中包含多次请求和响应 一次会话:浏览器第一次给服务器发送资源请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:Cookie,把数据存储到客户端 服务器端会话技术:Session,把数据存储到服务器端 Cookie 概念:客户端会话技术,将数据存储到客户端 快速入门: 使用步骤: 创建C
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆  每天早上8:30推送 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯
程序员该看的几部电影
##1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
@程序员,如何花式构建线程?
作者 |曾建责编 | 郭芮出品 | CSDN(ID:CSDNnews)在项目和业务的开发中,我们难免要经常使用线程来进行业务处理,使用线程可以保证我们的业务在相互处理之间可以保证原子性...
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布了 2019年国民经济报告 ,报告中指出:年末中国大陆总人口(包括31个
强烈推荐10本程序员在家读的书
很遗憾,这个鼠年春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终
Linux自学篇——linux命令英文全称及解释
man: Manual 意思是手册,可以用这个命令查询其他命令的用法。 pwd:Print working directory 显示当前目录 su:Swith user 切换用户,切换到root用户 cd:Change directory 切换目录 ls:List files 列出目录下的文件 ps:Process Status 进程状态 mk
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
文章目录1. 前言2. 数据下载3. 数据处理4. 数据可视化 1. 前言 今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。 2月6日追记:本文发布后,腾讯的数据源多次变更u
智力题(程序员面试经典)
NO.1  有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸。给你一台称重精准的天平,怎么找出比较重的那瓶药丸?天平只能用一次。 解法 有时候,严格的限制条件有可能反倒是解题的线索。在这个问题中,限制条件是天平只能用一次。 因为天平只能用一次,我们也得以知道一个有趣的事实:一次必须同时称很多药丸,其实更准确地说,是必须从19瓶拿出药丸进行称重。否则,如果跳过两瓶或更多瓶药
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
2020年的1月,我辞掉了我的第一份工作
其实,这篇文章,我应该早点写的,毕竟现在已经2月份了。不过一些其它原因,或者是我的惰性、还有一些迷茫的念头,让自己迟迟没有试着写一点东西,记录下,或者说是总结下自己前3年的工作上的经历、学习的过程。 我自己知道的,在写自己的博客方面,我的文笔很一般,非技术类的文章不想去写;另外我又是一个还比较热衷于技术的人,而平常复杂一点的东西,如果想写文章写的清楚点,是需要足够...
别低估自己的直觉,也别高估自己的智商
所有群全部吵翻天,朋友圈全部沦陷,公众号疯狂转发。这两周没怎么发原创,只发新闻,可能有人注意到了。我不是懒,是文章写了却没发,因为大家的关注力始终在这次的疫情上面,发了也没人看。当然,我...
Java坑人面试题系列: 包装类(中级难度)
Java Magazine上面有一个专门坑人的面试题系列: https://blogs.oracle.com/javamagazine/quiz-2。 这些问题的设计宗旨,主要是测试面试者对Java语言的了解程度,而不是为了用弯弯绕绕的手段把面试者搞蒙。 如果你看过往期的问题,就会发现每一个都不简单。 这些试题模拟了认证考试中的一些难题。 而 “中级(intermediate)” 和 “高级(ad
Spring Boot 2.x基础教程:使用JdbcTemplate访问MySQL数据库
在第2章节中,我们介绍了如何通过Spring Boot来实现HTTP接口,以及围绕HTTP接口相关的单元测试、文档生成等实用技能。但是,这些内容还不足以帮助我们构建一个动态应用的服务端程序。不论我们是要做App、小程序、还是传统的Web站点,对于用户的信息、相关业务的内容,通常都需要对其进行存储,而不是像第2章节中那样,把用户信息存储在内存中(重启就丢了!)。 对于信息的存储,现在已经有非常非常多...
基于Python的人脸自动戴口罩系统
目录 1、项目背景 2、页面设计 3、器官识别 4、退出系统 1、项目背景 2019年新型冠状病毒感染的肺炎疫情发生以来,牵动人心,举国哀痛,口罩、酒精、消毒液奇货可居。 抢不到口罩,怎么办?作为技术人今天分享如何使用Python实现自动戴口罩系统,来安慰自己,系统效果如下所示: 本系统的实现原理是借助 Dlib模块的Landmark人脸68个关键点检测库轻松识别出人脸五官
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。 再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。 下文是原回答,希望能对你能有所启发。 如果我说,这个世界上人真的分三六九等,...
相关热词 c# 为空 判断 委托 c#记事本颜色 c# 系统默认声音 js中调用c#方法参数 c#引入dll文件报错 c#根据名称实例化 c#从邮件服务器获取邮件 c# 保存文件夹 c#代码打包引用 c# 压缩效率
立即提问