高性能的可视电话软件
NetTalk效率很高,比我所见的一些可视通话软件要好(如AVPHONE,注:在此并无破坏AVPHONE所在公司形象之意图,仅将软件作客观上的比较)
全图形界面
全图形的界面使得操作方便快捷
AVIOMgr模块
AVIOMgr是一个可视通信的通用模块,在NetTalk中是一个独立的模块,对它进行一些简单的处理,可以做成静态库、动态库或ActiveX控件,以用于其他软件。
AVIOMgr封装了包括:视频采集、视频压缩、音频采集、音频压缩、音频播放、数据传输、命令控制等一系列与可视通讯有关的功能。一切对AVIOMgr的控制和AVIOMgr的信息反馈仅通过几个简单的消息和几个简单的函数调用就能完成。
VFW函数族中某些函数的疑惑:
capDriverConnect
capDriverDisconnect
这两个函数的调用必须在同一个线程内,而且似乎还必须同在主线程内,否则就会造成capDriverDisconnect的调用失败,具体是何原因还不太清楚。
疑惑
waveIn函数族中某些函数的疑惑:
如果用回调机制,那么很可能在结束录音时(调用waveInReset的时候)出现死锁,导致程序无法正常退出,MSDN中在对waveInProc的说明中提到这一点,并列出了一系列不能调用的函数,可我并没有调用它列举的函数,却依然在某些机子上出现死锁现象,不解(后改用线程通知机制)
对Socket(UDP)编程的一些看法:
sendto\rcevfrom是阻塞型的函数,通过WSASelect 等函数的调用,可以把这两个函数变成非阻塞的(异步),这需要创建用来接收消息的窗口,在调用WSASelect 的时候,隐含地创建了一个线程。而我却习惯于用阻塞型的,创建一个线程,其中有一个循环,不断调用 rcevfrom。有些书上说异步的效率要高一些,当我觉得我这种方法的效率不会低。以前做过的第三只眼远程控制软件和NetTalk 均采用这种结构,并未发现任何性能上的不足。
new的失败
当一个线程经常反复调用new/delete或者用new分配大块内存时,需要特别注意new的运行结果,不要总以为NEW是成功的,有时候也会失败,在NetTalk中就发现了这种情况。(已解决)
VCM函数族中某些函数的疑惑:
ICDecompress函数在某些情况下(具体很难描述)会失败,在MSDEV中出现0xc0000005 access violation的debug错误,不解。后来仅调整了几个函数的调用顺序就解决了。
115软件工厂对软件、代码及文档保留所有权