WP7截图工具诞生攻坚实录(三)

接上篇《首款WindowsPhone 7 PC端实时截图工具诞生攻坚实录(二) 》

        前两天看xda上的一篇帖子,是牛人fiinix对我的WP7实时截图工具做了优化《WP7 Screen recorder (Based on "The DllImport Project")》 ,把1帧每秒的截屏提高到了3帧每秒,画面流畅了不少。

fiinix主要的优化点:
1、没有采用jpeg进行压缩,这样可以节省压缩的时间;
2、采用普通Socket代替Http协议来提交数据,提高性能。我采用的是Http协议,由于Http协议每次都要建立连接、传输数据、断开连接
3、把截图、发送等放到单独的线程中执行,线程间通过信号量进行通信,提高性能。
这个帖子是fiinix的优化说明:http://forum.xda-developers.com/showthread.php?t=1093169&page=8

        fiinix是一个瑞典佬,看到fiinix的帖子中写的“Zomg, the Chinese could not program good fps,So i super optimized the shit code of theirs.”,一个“the Chinese”听得出他对中国人的不屑,“shit code of theirs”→“他们的那些狗屎代码”,我代表了一次中国人。估计他看到我的作品的时候,心里肯定在想“那帮老土的中国佬先于我做出这个工具来了?”,然后就开始找我作品暂未优化的部分心里自我安慰的说“这帮狗屎中国佬的代码效率还是太低了,还是我们伟大的西方国民牛逼”。呵呵,鬼佬,不用醋意大发,在windows phone开发方面我这个中国佬和你们一起站在了世界开发的最前沿,这不是个案,中国的牛X的人有的是,和他们比我只是一个小鸟,希望以后你们不要再用“the Chinese”统称中国人,以后再碰到中国人和你交流技术,请喊他们的中文名字,请我叫“yang zhongke”,就像我叫你fiinix一样!

       还是聊技术吧,fiinix的优化还是效果不错的,本来我还是打算优化的,有人做了我就不做了,抛砖引玉成功,以后就“用玉”了,哈哈。

      我还有一个优化想法,我说出来,有人能做出来最好了。我想起来有一项VNC技术可以用来进行远程控制,VNC的效率非常高,原理也很简单,也就是监听鼠标、键盘等事件,高效率的每次只传输变化的部分。我还找了一个开源的Windows CE版的VNC服务器端在Windows CE上编译、运行通过了。但是移植到Windows Phone上总是报GDI相关的错,由于调试也比较麻烦(只能调用Win32的MessageBox方法来进行调试),个人业余时间也不多,后面还有其他的备课任务,因此我就放弃了。但是有一个问题要解决,那就是网络的问题。因为运行在手机上的是VNC的服务器,如果只是通过USB连接电脑,电脑上无法建立到手机服务器上网络连接,因为这时候手机和电脑完全不是一个网段,只能手机连接电脑的Socket服务器(我不是网络方面的专家,不知这样表述是不是正确),必须他们同时连到wifi才是在一个网段,这也是我放弃Windows Phone版VNCServer的原因。期待有牛人能够继续下去。我只做了一个优化,就是每次手机向服务器发截屏之前检查这次的截屏是否和上次一致(很土但是效率还挺高的流逐位比较的方法),如果一致的话就不发送,这样能降低截屏监控客户端给手机CPU的压力。
  

五、感想
    经过这个工具的开发我有如下的感想:
    1)任何事情都终将解决。“Mango之前无法多任务”、“WP7中无法调用Native代码”等这些难题都被高人解决了。经常有学生问“老师,能不能实现***功能”,我一般开头第一句就是“只要有钱有时间没有实现不了的,开发人员是万能的”,所以如果你学习、工作中遇到了难题,在时间、成本可控的前提下,可以攻坚一下,对于技术控来说,搞定一个难题是可以狠狠得瑟一把的事情。
    2)学习任何的技术都要尽可能的研究它的本质,不能仅仅局限于“会用就行”。比如只有熟悉了Silverlight中SynchronizationContext、Dispatcher、DispatcherTimer等之间的内在联系以及Silverlight的异步调度机制,处理难题的时候才有思路。前几天有人在博客园上写了篇文章“学ASP.net不要只会拖控件”,我非常赞同,如果只会拖控件,而不理解Http协议、HTML等这些东西,很容易就被WebForm控件绕晕,遇到一个难题就只能去各个论坛求爷爷告奶,而如果知道Http协议、HTML等这些东西,那么完全可以自己分析出解决问题的办法。
    3)艺多不压身。任何行业都是如此。我上大学的时候通过研究过Com、为了录《C语言也能干大事》的视频我研究了C/C++,没想到这次开发截图工具就用上了这些技术,如果我不懂C/C++、Com,那么编写Com组件那块就是不可能完成的任务了。有人说“学那么多技术有什么用?又不来钱!”,说这种话的人根本没有学到啥技术,很多人工作两三年还是三四千块钱,而我那些学得比较好的学生刚毕业就拿到7、8K(如果你没有别的更好的发大财的道儿或者还没有赚到比7、8K这个“基本温饱工资”更多的话,就建议你不要说“我认识某某人不是搞技术人家照样身价千万”、“7、8K也算高薪?”这样不疼不痒的话了
    4)不要瞧不起自己,在条件允许的情况下尝试一下自己的想法,不要认为“比我聪明的人有的是,他们没解决我怎么可能解决?”,成功不是光靠聪明就可以解决的,世界上能把想法付诸行动的人不多。我当初想:“没人做一个PC端截图工具,是不是技术上做不出来呀?但是我想可以!”,我想可以,所以我就尝试了一把,就做出来世界上第一款Windows Phone的PC端截图工具,气死了鬼佬。争取你也能找到这种Happy的感觉。
   
    最后请我再总结这篇文章中的核心点:
    1)Windows Phone底层是Windows CE。
    2)Windows Phone7中可以通过调用ComBridge调用本地代码,这样如果想调用C/C++代码或者调用PInvoke只要编写Com组件即可。使用这种方法编写的程序无法通过Marketplace审核。最新消息“Mango中将不可以通过Interop调用本地代码”,希望早日有牛人解决这个问题。
    3)程序在后台运行的时候消息泵是暂停的,所以WebClient、DispatcherTimer等都会暂停。
   
    暂时买不了真机的朋友也可以安装WP7开发工具来通过仿真器来体验一下,当然和真机感觉没得比了。想学习WP7开发的朋友可以买一款WP7真机,现在真机非常便宜,1500元左右就能上手一款,绝对抄底的最佳时机,而且用真机开发有一个好处,就是可以在Windows XP下进行开发,只要修改WPDT的一个配置文件就可以在Windows XP上安装WPDT了,具体搜索“Windows XP 安装Windows Phone SDK”。   

posted @ 2011-06-27 00:27  杨中科  阅读(5324)  评论(24编辑  收藏  举报