QT使用linphone win32 sdk 拨打网络电话没有声音
  • qt版本:QT MSVC 5.7.0
    • linphone版本:liblinphone 4.1.1

问题描述:调用liblinphone接口注册成功,拨打电话回调显示已经到了【LinphoneCallStreamsRunning】这一步了,可以推测是拨通了电话并开始进行音频流传输了,但是没有任何声音,看了一下应用程序输出,在开头发现警告:

Could not find a suitable soundcard !

没有发现合适的声卡?于是我用linphone自带的获取音频设备接口进行查找:

    //获得声音设备列表
    const char**soundDevices =  linphone_core_get_sound_devices(linphoneCore);
    int n = 0;
    while(soundDevices[n] != NULL) {
        auto sound = soundDevices[n];
        QString out = QString("get_sound_devices. index=%1,sound=%2").arg(n++).arg(sound);
        qDebug() << out;
    }

soundDevices是个空的,第一个就是NULL,不死心,于是先后用qt和windows api的方法去查找电脑的声卡设备,都可以找到:

"扬声器 (Synaptics SmartAudio HD"这个扬声器,

为什么linphone的接口就找不到呢?为什么我的电话拨通之后没有声音呢?(我的电脑声卡是好的,也可以播放出声音)

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
路由器下接手机使用linphone拨打ippbx下的话机出现单通
路由器打开wifi功能,手机使用linphone注册到ippbx下,拨打ippbx下的话机,主叫单通,听不到被叫声音。
想使用linphone的BLF功能(检测其他用户的状态)
我再公司实习做一个linphone产品的技改,这次任务是要实现一个能检测其他用户状态的功能,我再网上搜了很久才找到linphone里面有一个示例程序buddy status.c文件,但是不知道怎么使用。请各位好汉帮忙,代码如下,也不是很长: [buddy_status.c(源代码网址,应该比我清晰)](http://www.linphone.org/docs/liblinphone/group__buddy__tutorials.html "") ```c++ /* buddy_status Copyright (C) 2010 Belledonne Communications SARL This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef IN_LINPHONE #include "linphonecore.h" #else #include "linphone/linphonecore.h" #endif #include <signal.h> static bool_t running=TRUE; static void stop(int signum){ running=FALSE; } static void notify_presence_recv_updated (LinphoneCore *lc, LinphoneFriend *friend) { const LinphonePresenceModel* model = linphone_friend_get_presence_model(friend); const LinphoneAddress* friend_address = linphone_friend_get_address(friend); LinphonePresenceActivity *activity = linphone_presence_model_get_activity(model); char *activity_str = linphone_presence_activity_to_string(activity); printf("New state state [%s] for user id [%s] \n" ,activity_str ,linphone_address_as_string (friend_address)); } static void new_subscription_requested (LinphoneCore *lc, LinphoneFriend *friend, const char* url) { const LinphoneAddress* friend_address = linphone_friend_get_address(friend); printf(" [%s] wants to see your status, accepting\n" ,linphone_address_as_string (friend_address)); linphone_friend_edit(friend); /* start editing friend */ linphone_friend_set_inc_subscribe_policy(friend,LinphoneSPAccept); /* Accept incoming subscription request for this friend*/ linphone_friend_done(friend); /*commit change*/ linphone_core_add_friend(lc,friend); /* add this new friend to the buddy list*/ } static void registration_state_changed(struct _LinphoneCore *lc, LinphoneProxyConfig *cfg, LinphoneRegistrationState cstate, const char *message){ printf("New registration state %s for user id [%s] at proxy [%s]" ,linphone_registration_state_to_string(cstate) ,linphone_proxy_config_get_identity(cfg) ,linphone_proxy_config_get_addr(cfg)); } LinphoneCore *lc; int main(int argc, char *argv[]){ LinphoneCoreVTable vtable={0}; char* dest_friend=NULL; char* identity=NULL; char* password=NULL; LinphoneFriend* my_friend=NULL; /* takes sip uri identity from the command line arguments */ if (argc>1){ dest_friend=argv[1]; } /* takes sip uri identity from the command line arguments */ if (argc>2){ identity=argv[2]; } /* takes password from the command line arguments */ if (argc>3){ password=argv[3]; } signal(SIGINT,stop); //#define DEBUG #ifdef DEBUG linphone_core_enable_logs(NULL); /*enable liblinphone logs.*/ #endif /* Fill the LinphoneCoreVTable with application callbacks. All are optional. Here we only use the both notify_presence_received and new_subscription_requested callbacks in order to get notifications about friend status. */ vtable.notify_presence_received=notify_presence_recv_updated; vtable.new_subscription_requested=new_subscription_requested; vtable.registration_state_changed=registration_state_changed; /*just in case sip proxy is used*/ /* Instantiate a LinphoneCore object given the LinphoneCoreVTable */ lc=linphone_core_new(&vtable,NULL,NULL,NULL); /*sip proxy might be requested*/ if (identity != NULL) { /*create proxy config*/ LinphoneProxyConfig* proxy_cfg = linphone_proxy_config_new(); /*parse identity*/ LinphoneAddress *from = linphone_address_new(identity); LinphoneAuthInfo *info; if (from==NULL){ printf("%s not a valid sip uri, must be like sip:toto@sip.linphone.org \n",identity); goto end; } if (password!=NULL){ info=linphone_auth_info_new(linphone_address_get_username(from),NULL,password,NULL,NULL,NULL); /*create authentication structure from identity*/ linphone_core_add_auth_info(lc,info); /*add authentication info to LinphoneCore*/ } // configure proxy entries linphone_proxy_config_set_identity(proxy_cfg,identity); /*set identity with user name and domain*/ linphone_proxy_config_set_server_addr(proxy_cfg,linphone_address_get_domain(from)); /* we assume domain = proxy server address*/ linphone_proxy_config_enable_register(proxy_cfg,TRUE); /*activate registration for this proxy config*/ linphone_proxy_config_enable_publish(proxy_cfg,TRUE); /* enable presence satus publication for this proxy*/ linphone_address_destroy(from); /*release resource*/ linphone_core_add_proxy_config(lc,proxy_cfg); /*add proxy config to linphone core*/ linphone_core_set_default_proxy(lc,proxy_cfg); /*set to default proxy*/ /* Loop until registration status is available */ do { linphone_core_iterate(lc); /* first iterate initiates registration */ ms_usleep(100000); } while( running && linphone_proxy_config_get_state(proxy_cfg) == LinphoneRegistrationProgress); } if (dest_friend) { my_friend = linphone_friend_new_with_address(dest_friend); /*creates friend object from dest*/ if (my_friend == NULL) { printf("bad destination uri for friend [%s]\n",dest_friend); goto end; } linphone_friend_enable_subscribes(my_friend,TRUE); /*configure this friend to emit SUBSCRIBE message after being added to LinphoneCore*/ linphone_friend_set_inc_subscribe_policy(my_friend,LinphoneSPAccept); /* Accept incoming subscription request for this friend*/ linphone_core_add_friend(lc,my_friend); /* add my friend to the buddy list, initiate SUBSCRIBE message*/ } /*set my status to online*/ linphone_core_set_presence_model(lc, linphone_presence_model_new_with_activity(LinphonePresenceActivityOnline, NULL)); /* main loop for receiving notifications and doing background linphone core work: */ while(running){ linphone_core_iterate(lc); /* first iterate initiates subscription */ ms_usleep(50000); } /* change my presence status to offline*/ linphone_core_set_presence_model(lc, linphone_presence_model_new_with_activity(LinphonePresenceActivityOffline, NULL)); linphone_core_iterate(lc); /* just to make sure new status is initiate message is issued */ linphone_friend_edit(my_friend); /* start editing friend */ linphone_friend_enable_subscribes(my_friend,FALSE); /*disable subscription for this friend*/ linphone_friend_done(my_friend); /*commit changes triggering an UNSUBSCRIBE message*/ linphone_core_iterate(lc); /* just to make sure unsubscribe message is issued */ end: printf("Shutting down...\n"); linphone_core_destroy(lc); printf("Exited\n"); return 0; } ```
利用liblinphone拨打移动电话或固定电话,如何获取被叫方接听状态
我在Ubuntu上基于linphone提供的liblinphone库开发了自己的voip软件。可以通过sip服务器拨打sip电话一切正常,但是在拨打移动电话或固定电话时(注:我的sip服务器为IPPBX,并通过有线电话或无线固定态作为IPBPX的中继),能够拨通,通话,挂断。但是,我想在本地拨通远端移动电话或固定电话后,获取远端挂断电话的原因,如远端响铃远端电话在接听前直接挂断了,远端响铃远端无任何操作直到超时挂断,还有远端响铃远端被接听通话完成后挂断。目前在本地拨打sip电话是这些不同的情况都能够被区分,但是在本地拨打移动电话或固定电话是,以上列举出的三种情况不能被区分出来,也就是说在本地拨通远端移动电话或固定电话后,我无发直到远端在挂断电话前有没有接听,有没有与远端进行通话。请大牛们帮忙分析给点意见,谢谢。
使用linphone做的软电话通话音量太小
将应用安装到手机,通话的时候音量太小,使用微信等软件通话(类似打电话不是语音)也是一样,想问下大家有什么办法解决这个音量的问题吗?
linphone android有马赛克有没有人做过,具体怎么解决?
我现在做开源项目linphone,可是马赛克比较严重,一直解决不了,加上代码量比较大,实在是不好做,有高手请指点一二,拜托了。
linphone交叉编译问题
编译linphone时报错: ...... videodec.c: In function ‘skip_rfc2429_header’: videodec.c:192:7: warning: variable ‘gob_num’ set but not used [-Wunused-but-set-variable] int gob_num; ^ CC pixconv.lo CC sizeconv.lo CC nowebcam.lo CC h264dec.lo CC jpegwriter.lo CC videoout.lo CC msvideo.lo CC rfc3984.lo CC mire.lo CC extdisplay.lo CC layouts.lo CC videostream.lo CXXLD libmediastreamer.la /usr/bin/ld: .libs/mscommon.o: Relocations in generic ELF (EM: 40) /usr/bin/ld: .libs/mscommon.o: Relocations in generic ELF (EM: 40) /usr/bin/ld: .libs/mscommon.o: Relocations in generic ELF (EM: 40) /usr/bin/ld: .libs/mscommon.o: Relocations in generic ELF (EM: 40) /usr/bin/ld: .libs/mscommon.o: Relocations in generic ELF (EM: 40) /usr/bin/ld: .libs/mscommon.o: Relocations in generic ELF (EM: 40) /usr/bin/ld: .libs/mscommon.o: Relocations in generic ELF (EM: 40) .libs/mscommon.o: error adding symbols: File in wrong format collect2: error: ld returned 1 exit status Makefile:555: recipe for target 'libmediastreamer.la' failed make[5]: *** [libmediastreamer.la] Error 1 make[5]: Leaving directory '/home/linphone_install4/sources/linphone-3.4.3/mediastreamer2/src' Makefile:489: recipe for target 'all' failed make[4]: *** [all] Error 2 make[4]: Leaving directory '/home/linphone_install4/sources/linphone-3.4.3/mediastreamer2/src' Makefile:422: recipe for target 'all-recursive' failed make[3]: *** [all-recursive] Error 1 make[3]: Leaving directory '/home/linphone_install4/sources/linphone-3.4.3/mediastreamer2' Makefile:327: recipe for target 'all' failed make[2]: *** [all] Error 2 make[2]: Leaving directory '/home/linphone_install4/sources/linphone-3.4.3/mediastreamer2' Makefile:440: recipe for target 'all-recursive' failed make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory '/home/linphone_install4/sources/linphone-3.4.3' Makefile:365: recipe for target 'all' failed make: *** [all] Error 2 root@ubuntu:/home/linphone_install4/sources/linphone-3.4.3# 这是什么原因导致的呢?还请不吝赐教!非常感谢!
linphone语音质量相关的几个问题
有两个问题: 1.在linphone下如何开启VAD(静音抑制)功能? 2.linphone中的回声消除(echo-cancellation)和回声门限(echo-limiter)两者的区别是什么?其相对应的各项配置参数代表啥意思? echo-cancellation的: ![图片说明](https://img-ask.csdn.net/upload/201504/13/1428884947_910894.png) echo-limiter的: ![图片说明](https://img-ask.csdn.net/upload/201504/13/1428884919_565128.png) 希望各位大神帮忙~本菜感激不尽!!
android linphone 在mediastreamer2新建filter进行h264硬件编码
打算分三步骤进行: 1.新建一个简单的filter 2.在步骤1建立的filter中调用硬件编码的函数(需要引入第三方硬件编码so库) 3.在步骤1建立的filter编写具体的硬件编码实现的代码 现在遇到了下面问题: 在第2步骤的调用第三方硬件编码so库时出现问题,用ndk进行编译时总是出现undefined reference to 'xxx'的错误,我是在下面位置添加的第三方so库的。 botrophone-androidV1.4可视电话+Hisi+Filter\submodules\linphone\mediastreamer2\build\android\Android.mk文件 255行 LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -lGLESv2 -llog -ldl -L$(LOCAL_PATH)/../include/lib2 -lhi_common -lhi_ecs -lhi_mpi -lsample_common
使用LibLinphone发送dtmf进行IVR菜单选择问题
我用LibLinphone作为库开发实现sip电话的android APP,遇到了一个问题:我这里用FreeSwitch做SIP服务器,当我拨通电话听到IVR菜单时,我拨号发送dtmf信息时并没有实现菜单选择的功能,没有任何反映! 我下载了Linphone应用可以实现IVR菜单选择功能,但我使用Linphone源码在eclipse中直接运行后执行IVR菜单选择功能时仍然没有任何反映,不知是为什么,有没有大神能给小弟点提示,多谢!!!!!!!!!!!!
linphone编译Build of ffmpeg for arm failed有大神知道怎么解决吗
BUILD SUCCESSFUL Total time: 3 seconds mkdir -p /home/long/Desktop/linphone-android2/submodules/externals/build/ffmpeg/arm && \ cd /home/long/Desktop/linphone-android2/submodules/externals/build/ffmpeg/arm && \ /home/long/Desktop/linphone-android2/submodules/externals/ffmpeg/configure --target-os=linux --enable-cross-compile --enable-runtime-cpudetect --disable-everything --disable-doc --disable-ffplay --disable-ffmpeg --disable-ffprobe --disable-ffserver --disable-avdevice --disable-avfilter --disable-avformat --disable-swresample --disable-network --enable-decoder=mjpeg --enable-encoder=mjpeg --enable-decoder=mpeg4 --enable-encoder=mpeg4 --enable-decoder=h264 --enable-decoder=h263p --enable-encoder=h263p --enable-decoder=h263 --enable-encoder=h263 --disable-static --enable-shared --build-suffix=-linphone-arm --arch=arm --sysroot=/home/long/long/android-ndk-r9d/platforms/android-19/arch-arm --cross-prefix=/home/long/long/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi- --enable-pic && \ make -j 1 \ || ( echo "Build of ffmpeg for arm failed." ; exit 1 ) Out of tree builds are impossible with config.h in source dir. If you think configure made a mistake, make sure you are using the latest version from Git. If the latest version fails, report the problem to the ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net. Include the log file "config.log" produced by configure as this will help solving the problem. Build of ffmpeg for arm failed. make: *** [/home/long/Desktop/linphone-android2/submodules/externals/build/ffmpeg/arm/libavcodec/libavcodec-linphone-arm.so] Error 1 long@ubuntu:~/Desktop/linphone-android2$ ^C long@ubuntu:~/Desktop/linphone-android2$ echo "Build of ffmpeg for arm failed." Build of ffmpeg for arm failed. 明明说编译成功了、但是下面还报错。也没有出现.so文件
linphone 编译最后遇到的问题,关于make all之后出现的gettext的问题
编译linphone,按照源码中的readme文件一步步执行,使用brew安装依赖工具, 最后一步make all之后报错找不到GNU gettext tools,然后brew install gettext.回到原来的目录,执行 make veryclean,再次make all,最后还是报相同的错误。。。。。。请问有了解这个的大神吗? 求助啊~~~~
LinPhone android 开发 不能启动 LinphoneService..真心求助!
在 Activity 里面 启动服务的时候报错,????? ![图片说明](https://img-ask.csdn.net/upload/201607/28/1469716331_89695.png) 07-28 22:21:52.362 4836-4836/com.rjxxkj.zhiqu W/ResourceType: Requesting resource 0x7f080006 failed because it is complex 07-28 22:21:52.362 4836-4836/com.rjxxkj.zhiqu D/AndroidRuntime: Shutting down VM 07-28 22:21:52.363 4836-4836/com.rjxxkj.zhiqu E/AndroidRuntime: FATAL EXCEPTION: main Process: com.rjxxkj.zhiqu, PID: 4836 java.lang.RuntimeException: Unable to create service org.linphone.LinphoneService: android.content.res.Resources$NotFoundException: String resource ID #0x7f080006 at android.app.ActivityThread.handleCreateService(ActivityThread.java:2887) at android.app.ActivityThread.-wrap4(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x7f080006 at android.content.res.Resources.getText(Resources.java:312) at android.content.res.Resources.getString(Resources.java:400) at android.content.Context.getString(Context.java:409) at org.linphone.LinphoneService.onCreate(LinphoneService.java:135) at android.app.ActivityThread.handleCreateService(ActivityThread.java:2877) at android.app.ActivityThread.-wrap4(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1427)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5417)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
android实现P2P视频监控技术方案
现在来了个P2P视频监控项目,需要跨外网,已经了解过webRTC、openfire、linphone技术,总感觉走错了方向,大神们这个项目应该往哪走呢。
Voip后台实现过程中的问题,底层用sip的库,求支援求帮助求分析解决
公司目前在做一个voip网络电话的项目,底层的库是用的sip。我是负责写上层app的,底层的库都是封装在.a的静态库里面。我看不到底层的实现内容。 我以前有实现过在后台一直运行,但是这个项目怎么弄都弄不出来,有各种问题。由于公司的帐号是个人帐号,需要上架审核。我有以下问题,希望大家有会的能帮忙回答一下。谢谢大家。我现在是用xcode5,然后是用ios7的4s来写程序测试。 1、这个类似网络电话的app,如果需要上架的话,能实现怎么样的后台?通过在info.plist里的UIBackgroundModes那边设置voip,是可以实现无限后台(就是程序内的任何操作都不会停止)还是间歇性会挂起然后有消息(比如来电消息)时才唤醒程序?哪种方式才可以通过app的审核? 2、无限后台有可以在后台通过一直放静音文件实现,也可以通过设置地理信息在后台实现。这两种方式因为要审核的话不会通过,因为不是音乐应用和定位应用。所以只考虑voip。 voip能实现吗? 我试过这两种方法: 都在info.plist里设置了voip项的。 第一种是在applicationDidEnterBackground:里面写了以下代码。 UIApplication *app = [UIApplication sharedApplication];         __block    UIBackgroundTaskIdentifier bgTask;         bgTask = [app beginBackgroundTaskWithExpirationHandler:^{             dispatch_async(dispatch_get_main_queue(), ^{                 if (bgTask != UIBackgroundTaskInvalid)                 {                     bgTask = UIBackgroundTaskInvalid;                 }             });         }];         dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{             dispatch_async(dispatch_get_main_queue(), ^{                 if (bgTask != UIBackgroundTaskInvalid)                 {                     bgTask = UIBackgroundTaskInvalid;                 }             });         }); 这种情况下,如果手机连着电脑来运行程序,程序退到后台后程序会一直运行,丝毫不停止,控制台的信息会一直打印输出。但是,当不连着电脑时,单独在手机上点开运行,程序就会在后台过了一会就挂起,当重新点开程序时和第一次打开程序一样,从头开始运行,就是没有在后台一直跑。 第二种是在applicationDidEnterBackground:里面写了以下代码。 BOOL backgroundAccpeted = [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{         UIApplication *app = [UIApplication sharedApplication];     __block    UIBackgroundTaskIdentifier bgTask;     bgTask = [appbeginBackgroundTaskWithExpirationHandler:               ^{         [app endBackgroundTask:bgTask];         bgTask = UIBackgroundTaskInvalid;     }];     }]; UIApplication *app = [UIApplication sharedApplication];     __block    UIBackgroundTaskIdentifier bgTask;     bgTask = [app beginBackgroundTaskWithExpirationHandler:               ^{         [app endBackgroundTask:bgTask];         bgTask = UIBackgroundTaskInvalid;     }];          dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{         while (1)         {             NSLog(@"%d",temptest);             sleep(1);             temptest++;         }     }); 这种情况下,不管是手机连着电脑运行还是手机单独运行都是相同的情况。当进入后台后,前三分钟都是一直在运行的,但一旦到了三分钟之后,程序会被暂停,暂停时间大概7-10分钟,过了暂停时间程序会又自己在后台运行起来,就是接着刚刚暂停的位置继续跑,就是比如前三分钟一个int值跑到了175这样,继续在后台运行时会接着跑176.177...。然后这时候能跑1分钟,接着又暂停,7-10分钟之后又在底层自己跑起来。依次循环。不管过多久,只要点开程序就会从暂停的地方继续运行,不会像第一种情况一样整个程序从头开始运行。当程序在后台处于暂停状态时,点开后会继续跑。就是间断性,那7-10分钟暂停的话,有来电信息我是接受不到的,但是如果在那跑起来的1分钟内是可以接收到的。 以上两种方式有什么问题吗? 3、我网上查了挺多资料的了,当然可能有些重要的我没查到。 用voip后台,是需要配合TCP/IP socket来实现的。但是说实在的我看不大懂要怎么去实现这样的后台运行,因为处理tcp连接信息是在底层控制的。我看到资料说需要设置NSURL,NSStream,CFStream中的一样,所以我该怎么设置,需要在底层那边修改还是我在程序内就能自己编写? 我查了资料,是这么写的 CFReadStreamRef readStream;
CFWriteStreamRef writeStream;

//用CFStreamCreatePairWithSocket 在已有的socket 上创建输入输出流
CFStreamCreatePairWithSocket(NULL, m_socket, &readStream, &writeStream);

//设置属性kCFStreamNetworkServiceTypeVoIP
CFReadStreamSetProperty(readStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);
CFWriteStreamSetProperty(writeStream, kCFStreamNetworkServiceType, kCFStreamNetworkServiceTypeVoIP);

CFReadStreamOpen(readStream);
CFWriteStreamOpen(writeStream); 这些代码应该写在哪个地方?是底层吗?还是在程序内就可以写? 资料上说系统接管一个socket流,然后这个流上有信息过来会唤醒程序10秒。?是需要这样实现的吗?具体应该怎么实现? 底层是sip,我这边上层可以切换是udp还是tcp/ip协议,当使用udp的时候底层会在控制台有这样的输出 ortp-message-keep alive: 0 ortp-message-eXosip: Keep Alive sent on UDP! ortp-message-eXosip: Reseting timer to 10s before waking up! 当使用tcp的时候会有这样的输出 ortp-message-keep alive: 0 ortp-message-tcp_tl_keepalive socket node:61.142.220.193:5060 , socket 21 [pos=0], connected ortp-message-eXosip: Reseting timer to 10s before waking up! 是不是底层已经设置好了可以voip后台运行?这些信息大概会10s打印输出一次。 4、还有ios7在设置-通用-后台应用程序刷新里面有显示就是在后台可以运行的一些程序,我用上面问题2中提到的两种情况去运行后,程序不会在这里面显示出来。而一些类似于印象笔记,line,linphone这样的程序就会在这里面显示,这些程序是不是也设置了voip程序,我要如何做才能在这里面显示出来? 5、如果我用APNS可以和VOIP scoket后台一起使用吗? 其实我最想让程序能一直无限后台运行,不会暂停,又担心这样不能通过审核。 哪位知道的朋友请帮助我一下。我找了很多帖子,很多问答区,很多这样的问题都是没有人回答的,我不知道是不是知道的人太少了。当然我这个问答贴可能也没有人回答。 如果你看完了这么一大串问题,不回答也没关系,谢谢你把问题看完。 但是我还是好希望有人能给我处理的办法啊。谢谢啊。
相见恨晚的超实用网站
搞学习 知乎:www.zhihu.com 简答题:http://www.jiandati.com/ 网易公开课:https://open.163.com/ted/ 网易云课堂:https://study.163.com/ 中国大学MOOC:www.icourse163.org 网易云课堂:study.163.com 哔哩哔哩弹幕网:www.bilibili.com 我要自学网:www.51zxw
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
引言 本文主要是记录一下面试字节跳动的经历。 三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体
源码阅读(19):Java中主要的Map结构——HashMap容器(下1)
(接上文《源码阅读(18):Java中主要的Map结构——HashMap容器(中)》) 3.4.4、HashMap添加K-V键值对(红黑树方式) 上文我们介绍了在HashMap中table数组的某个索引位上,基于单向链表添加新的K-V键值对对象(HashMap.Node&lt;K, V&gt;类的实例),但是我们同时知道在某些的场景下,HashMap中table数据的某个索引位上,数据是按照红黑树
c++制作的植物大战僵尸,开源,一代二代结合游戏
    此游戏全部由本人自己制作完成。游戏大部分的素材来源于原版游戏素材,少部分搜集于网络,以及自己制作。 此游戏为同人游戏而且仅供学习交流使用,任何人未经授权,不得对本游戏进行更改、盗用等,否则后果自负。 目前有六种僵尸和六种植物,植物和僵尸的动画都是本人做的。qq:2117610943 开源代码下载 提取码:3vzm 点击下载--&gt; 11月28日 新增四种植物 统一植物画风,全部修
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成喔~) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 顺便拉下票,我在参加csdn博客之星竞选,欢迎投票支持,每个QQ或者微信每天都可以投5票,扫二维码即可,http://m234140.nofollow.ax.
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
深度学习图像算法在内容安全领域的应用
互联网给人们生活带来便利的同时也隐含了大量不良信息,防范互联网平台有害内容传播引起了多方面的高度关注。本次演讲从技术层面分享网易易盾在内容安全领域的算法实践经验,包括深度学习图
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 欢迎 改进 留言。 演示地点跳到演示地点 html代码如下`&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt;music&lt;/title&gt; &lt;meta charset="utf-8"&gt
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐厅的约会 餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”我楞了一下,心里想女朋友今天是怎么了,怎么突然问出这么专业的问题,但做为一个专业人士在女朋友面前也不能露怯啊,想了一下便说:“我先给你讲讲我前同事老王的故事吧!” 大龄程序员老王 老王是一个已经北漂十多年的程序员,岁数大了,加班加不动了,升迁也无望,于是拿着手里
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程实用技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法,并会持续更新。
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
"狗屁不通文章生成器"登顶GitHub热榜,分分钟写出万字形式主义大作
GitHub 被誉为全球最大的同性交友网站,……,陪伴我们已经走过 10+ 年时间,它托管了大量的软件代码,同时也承载了程序员无尽的欢乐。 万字申请,废话报告,魔幻形式主义大作怎么写?兄dei,狗屁不通文章生成器了解一下。这个富有灵魂的项目名吸引了众人的目光。项目仅仅诞生一周,便冲上了GitHub趋势榜榜首(Js中文网 -前端进阶资源教程)、是榜首哦
推荐几款比较实用的工具,网站
1.盘百度PanDownload 这个云盘工具是免费的,可以进行资源搜索,提速(偶尔会抽风????) 不要去某站买付费的???? PanDownload下载地址 2.BeJSON 这是一款拥有各种在线工具的网站,推荐它的主要原因是网站简洁,功能齐全,广告相比其他广告好太多了 bejson网站 3.二维码美化 这个网站的二维码美化很好看,网站界面也很...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
Spring Security 实战干货:基于注解的接口角色访问控制
1. 前言 欢迎阅读 Spring Security 实战干货[1] 系列文章 。在上一篇 基于配置的接口角色访问控制[2] 我们讲解了如何通过 javaConfig 的方式配置接口的角色访问控制。其实还有一种更加灵活的配置方式 基于注解 。今天我们就来探讨一下。DEMO 获取方式在文末。 2. Spring Security 方法安全 Spring Security 基于注解的安全...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
相关热词 c# 图片上传 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
立即提问