用Chrome看Youtube视频高分辨率60fps时卡顿、丢帧问题的解决方法

在博主的Core 2 Duo老爷机上看Youtube高清60fps视频时会出现明显的丢帧情况,通过视频详细信息(stats for nerds)可以看到1080p 60fps时dropped frames不断增长,同时cpu占用率双框齐满,很明显这html5视频播放器并没有使用硬件解码视频!开始以为是Chrome本身设置问题,开关了下硬件加速相关选项,重启再试问题依旧。后来搜索了一下发现貌似是由于Chrome本身的什么原因(很多人说firefox和高版本IE都没问题),导致Youtube发送的视频是vp8、vp9编码格式的(同样在详细信息中可查到),而这两种格式是不支持硬件解码的,所以既占满了CPU,又疯狂丢帧!
于是,解决这个问题的方法就是想办法让Youtube传输可以硬件解码的视频格式,所幸有人提供了这样的Chrome插件:h264ify: https://chrome.google.com/webstore/detail/h264ify/aleakchihdccplidncghkekgioiakgal,安装上以后再开Youtube视频就会发现发来的是avc编码格式的数据了,同时CPU占用骤减,丢帧现象明显改善。

64位Unity集成亲加(gotye)即时通讯SDK时的editor动态库设置DllNotFoundException

最近在测试亲加的语音聊天SDK(版本:gotyeapi_ex_v3.0_20170121_u3d.zip),由于直接提供了Unity版本的插件实现,简化了用Unity引擎开发的App集成时的难度,尤其还提供了Windows平台的实现,可在Editor环境下直接测试大部分功能,这是大部分平台相关SDK所不具备的!在实际测试中,发现了一些官方文档中没有说明的小问题,特记录于此。
首先,下载的zip并没有像官方文档中描述的一样,只有一个unitypackage,这点影响不大,直接解开zip中的内容,复制所有cs文件到项目中即可,后面根据官方文档上的指引,windows平台需要将对应32位或64位版本的Plugins中的dll复制到Unity安装路径的Editor下,也就是Unity编辑器执行文件所在的位置。这点要注意并不是常规的项目中的Plugins路径!操作完成后,项目中加入初始化代码,然后运行,出现了官方文档中提到的“win64下的U3D的DLL找不到”的问题:

DllNotFoundException: gotyeapi
gotye.GotyeAPI..ctor () (at Assets/gotye/GotyeAPI.cs:52)
(wrapper remoting-invoke-with-check) gotye.GotyeAPI:.ctor ()
gotye.GotyeAPI.GetInstance () (at Assets/gotye/GotyeAPI.cs:122)

阅读全文:»

64位Win8下安装TL-WN322G+ V1.0驱动

TLWN322G+V1

驱动文件:http://www.k-res.net/dl/TLWN322GPV1.rar(已失效,有需要的朋友请留言吧)

压缩包中包含的是网上找到的64位win7驱动TP-Link官方早已放弃对此款无线网卡的支持,只有最新版本的3.0等才有官方支持win8的驱动,另外包中还包含使用同样芯片的ATHEROS AR5007UG 32/64位驱动,标称支持Win8,有兴趣的朋友也可以试试(Win8插上TL-WN322G+V1后自动搜索驱动就会被识别为这款!)

下面说下安装原版WN322G+时的一个小问题:直接从设备管理器中更新无法识别的黄叹号USB 2.0 WLAN设备的驱动时会提示“哈希值不在指定的目录文件中”,开始以为是64bit Win7的驱动已经无法在Win8使用,折腾了很久后发现其实是Win8的一个驱动验证机制导致的,好在通过特殊启动方式可以关闭,方法如参考文章中所示:

阅读全文:»

使用StartSSL的免费SSL证书为Windows远程桌面RDS服务指定受信任的证书

首先,简单说明一下这个大标题所要解决的问题,就是这个:
QQ截图20150807221006
经常使用Windows远程桌面(AKA: mstsc3389RDP…)的朋友对这个截图的画面一定不会感到陌生,记不清从哪个版本开始的,迈克尔索芙特公司为这个远程桌面服务加入了SSL (TLS 1.0)加密功能,而且是默认开启的,这就导致了这个连接时需要“验明正身”的过程。而正式可信的SSL证书都是需要缴纳一定的“保护费”来获得的,安全级别越高,费用也就越高,所以这里默认启用的加密证书是以自签名的方式颁发的,因此自然会弹出这个不可信的警告了。
对于一般用户而言,这个不可信的证书其实也没什么大不了的,无视它,在mstsc里关闭服务器身份验证失败警告,信任它,直接添加自己为可信的证书颁发机构,又或者直接在组策略里关掉加密,都可以直接pass掉这个问题,但如果是正规应用的话(或者是像我这样有强迫症的一般用户),当然还是要加上正规身份证的好了。
这里介绍的方法就是如何用当下提供免费SSL证书的StartSSL.com,为Windows RDS(主要针对非服务器版操作系统)添加一个受信的正规远程桌面RDS服务加密证书:
阅读全文:»

IAsyncOperation does not contain a definition for GetAwaiter…

最近研究MS的UWP,发现虽然平台统一了,但是.net的API却变化很大,很多以前的常用的系统库函数、类都被砍掉了,比如读写文件的System.IO.FileStream,UWP下要改用StorageFile,结合异步操作async, await倒还算方便,但看完文档后一试:

StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(SAVE_FILE, CreationCollisionOption.ReplaceExisting);

就报了错:

error CS4036: ‘IAsyncOperation‘ does not contain a definition for ‘GetAwaiter’ and no extension method ‘GetAwaiter’ accepting a first argument of type ‘IAsyncOperation‘ could be found (are you missing a using directive for ‘System’?)

虽然看提示也发现了原来是缺少”using System;”,究其原因,原来是这样:
await关键字的出现会触发编译器调用WindowsRuntimeSystemExtensions.GetAwaiter,是CreateFileAsync返回的泛型类IAsyncOperation的扩展方法(从而获得TaskAwaiter来进行await),而WindowsRuntimeSystemExtensions是存在于System命名空间下的,所以对System的using是必不可少的。

CentOS 7 yum update中断重启后提示kernel panic-not syncing:VFS:Unable to mount root fs on unknown-block

今天更新VMWare上的CentOS 7时,不小心手滑在安装进行到一半左右时关掉了ssh连接,结果再回来时yum就不好了,显示提示有中断的操作,然后又是multilib,一通cleanup之后yum是不提示异常了,结果reboot后直接kernel panic异常,系统无法启动!

好在bootloader里的rescue还是可以进的,搜索了一下测试了下,最简单的解决方法是先

sudo yum remove kernel

sudo yum install kernel

然后再重新启动正常的kernel就可以进系统了,不过感觉由于yum update时中断导致的某些软件丢失或是版本不对的问题还是存在,等到用时再逐一解决吧。

Android Studio中项目NDK原生部分整合方式

UPDATE 2016.11.14:
目前的新版Android Studio 2.2已经可以完美支持NDK原生代码整合,通过cmake以及lldb实现c/c++代码调试,并且支持代码补全等功能!

自从Android Studio出现以后,我就很少再使用Eclipse+ADT的组合做Android开发了,更快的反应速度和更人性化的操作方式以及智能感知方面等等的优势,确实体现出了Google最初宣传Android Studio时的大部分特点,不过这些种种优势目前还只是体现在Java应用开发部分,而对于需要用到C/C++的Android NDK开发时,目前还没有很好的支持,当然,参考目前Android Studio的版本迭代速度来看,这应该也只是时间问题,当初ADT刚出的时候也是问题多多,包括后来的CDT+NDK支持,最初也只是支持原生代码的编译生成so,过了很久很久的某次update才加入了原生代码的可视化调试功能(当时也是历尽万难才测试成功的,还只是很简单的混合ndk项目…)。

最近看到了ndk又更新到了r10b版本,而且又据说新版的Android Studio中已经加入了一些ndk支持,于是正好一次测试一下(Android Studio beta 0.8.14, android-ndk32-r10b-windows-x86_64):

阅读全文:»

VS结合VisualGDB搭建OpenWrt交叉编译远程调试开发环境

由于此开发环境涉及3设备协同工作,因此先说明一下整体开发环境的配置以及每部分所负责的功能:
1.Windows PC
这里我用的是64位Win7,作为VS的安装环境Windows自然是必不可少的,本机主要用于结合VisualGDB插件完成项目创建,上传编译机编译并部署执行程序到测试机完成gdbserver远程调试(自然是背后gdb前脸VS的全图形可视化调试)
2.Linux PC
这个我这里是CentOS Linux release 7.2.1511 64bit,安装于VMWare虚拟机上(当然也可以用真机,效果更佳!),作为交叉编译OpenWrt执行程序的编译机,由VisualGDB通过ssh连接同步Win机上的项目源码,make文件等并进行编译,同时还作为gdb客户端连接OpenWrt调试服务端并由VisualGDB传递gdb调试操作间接实现Win端的VS图形化调试
3.OpenWrt Router
这个我这里使用的是联想的Y1S路由器,MT7620A mips架构,作为整个开发环境的目标平台,接收Linux编译后的执行程序,并负责启动gdbserver作为远程调试的服务端

整体环境介绍完了,首先要做的是搭建起Linux机上的OpenWrt命令行开发环境(Y1S对应的是OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2),并且保证可以使用原始gdb的方式成功进行命令行模式的远程调试,这个就不赘述了,网上有很多相关教程。补充一点,在gdb调试过程中可能会遇到(OpenWrt上线./gdbserver :9876 /mnt/sda1/kcamd启动调试进程):

./scripts/remote-gdb 192.168.99.1:9876 ./build_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/kcam/kcamd

This GDB was configured as “–host=x86_64-linux-gnu –target=mipsel-openwrt-linux-uclibc”.

(gdb) b main
Breakpoint 1 at 0x400cac: file main.cpp, line 29.
(gdb) c
Continuing.
warning: `/usr/lib/libstdc++.so.6′: Shared library architecture unknown is not compatible with target architecture mips:isa32r2.
warning: `/lib/libgcc_s.so.1′: Shared library architecture unknown is not compatible with target architecture mips:isa32r2.
warning: Could not load shared library symbols for 5 libraries, e.g. /lib/libuci.so.
Use the “info sharedlibrary” command to see the complete listing.
Do you need “set solib-search-path” or “set sysroot”?

Breakpoint 1, (gdb) n
Remote ‘g’ packet reply is too long: 00000000f8ffffffecdee77740b4ff7701000000f46dff7ffc6dff7f2034847fec6eff7f000101819bffaaacf0ffffff00031c7fffffffff00000000c826e677da6eff7f1c094000406dff7f0098e477f8e0a0000e00000000004400dc7a430087040000900c40000000000000000000a013e877786aff7f786aff7f4c27e67713ff0001a070230029000000a0d1e17724008050ac0c4000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000
(gdb)

阅读全文:»

纠结了1天多,终于把iAntares MacOSX 10.6.5 v3.2装上并成功驱动了几乎所有设备

屏幕快照-2011-04-17-下午10.57.32屏幕快照-2011-04-17-下午11.28.59

光是来来回回的装系统试参数和驱动就进行了不下20多次,这部分细节以后有空再整理,先记录一下最后纠结的这个RTL8187L卡皇无线网卡的驱动设置问题!

 

阅读全文:»

体验了一下Visual Studio 2012和Windows Phone 8 SDK 记录一下模拟器的联网问题

qq20121104141755

VS2012直接在MS的网站上就可以下载ISO,WP8 SDK直接搜索比较容易找到的是在线安装的版本,下载速度比较慢的话可以直接这里下载ISO直装版:

中文 http://go.microsoft.com/fwlink/?LinkID=257234&clcid=0x804 英文 http://go.microsoft.com/fwlink/?LinkID=257234&clcid=0x409

整个开发环境搭建比较轻松,需要说明的一点就是虽然安装VS2012并不需要Win8,但是WP8 SDK要求系统必须为Win8而且是要64位和一个忘了叫什么名字的CPU技术,因为WP8的emulator是基于Win8的Hyper-V虚拟机的。

还有一点要注意的就是VS和WP8 SDK的语言对应问题, 阅读全文:»