Tuesday 26 May 2009

Skype codec selection

Ever wondered how to manually choose which codecs Skype uses when you make an audio call? Well here's how (by selecting the Skype codecs you don't want to use):
  • On Windows/Mobile you set this registry key (HKEY_LOCAL_MACHINE/SOFTWARE/Skype/Phone/Audio/DisableCodecs) to contain the codec's you don't want Skype to use (e.g. for Pocket PC you might want to disable higher CPU codecs: "ILBC G729 EG711U")
  • On Linux/OSX you add the disabled codecs inside these tags: <DisableCodecs> <\DisableCodecs> in the config.xml file (usually found in ~/.Skype/your_skype_username/config.xml). They need to be put into the (usually existing) <Call> tag which is within the <Lib> tag.
  • Furthermore you can actually force the use of a particular codec by using the <ForceCodec> tag/Reg key in the relevant place.
Skype has a wide range of codecs (e.g: SILK_WB_V3, SILK_NB_V3, ILBC, G729, EG711U, SVOPC, SILK, ISAC) which seems to get expanded every so often. Note: That disabling G729 may interfere with use of SkypeOut. Skype generally does a good job of automatically selecting the appropriate codec and its rate - unless you use this tweak - so be aware that Skype may not perform optimally when it's range of codecs is impaired.

There's also other fun stuff you can tweak - like adding a <video> section and make Skype use a particular resolution (you'll need to convert this to an appropriate Registry entry on Windows):
<captureheight>480</captureheight>
<capturewidth>640</capturewidth>

For an interesting read on Skype see columbia.edu, and for papers on performance see Politecnico di Bari and Politecnico di Torino.

[Updated: 16mar2012: More on location of Codec config tags]

Monday 18 May 2009

Weird MagicCam error message from Google talk video device

Have you ever seen this error when attempting to run some capture software on OSX? (Note: The current process label in the error message is dependent upon which app you're running - in my case its one called vic):
[000:029] MagicCam 0: Current process: vic, Flash is loaded: no
[000:029] Error(magiccammac.cc:276): MagicCam 0: MagicCamOpen: Not an allowed process!

It is coming from the Google Talk's virtual video devices (but it's probably not actually causing any trouble directly - see below) - which are installed here:
/Library/QuickTime/Google Camera Adapter 0.component
And the MacCam related functions are in these two files:
/Library/QuickTime/Google Camera Adapter 0.component/Contents/MacOS/Google Camera Adapter 0
Run strings on it:
strings "/Library/QuickTime/Google Camera Adapter 0.component/Contents/MacOS/Google Camera Adapter 0" | grep -i magiccam)
and you get:
/Volumes/BuildData/PulseData/data/recipes/320452156/base/branches/googletalkplugin_release_branch/googleclient/talk/magicflute/magiccam/magiccammac.cc

Anyway it's not actually harmful and generally if you've a problem this is unlikely to be the cause of it. You can just [re]move the files as necessary to get rid the messages though your problem may well be somewhere else but at least you can eliminate it as a possible cause.

Friday 1 May 2009

Just setup Time Capsule as my IPv6 gateway

So Apple have taken a lead in the drift towards IPv6 adoption (though it seems we really are getting to the end IPv4 as we know it) - their Time Capsule (TC) uses IPv6 out of the box for administration when using the AirPort Utility (Using a proprietary encrypted protocol AACP). It also has facilities for setup of an IPv6 [6in4] tunnel using IPv6 in IPv4 encapsulation (specifically IP protocol 41) as specified in RFC4213.

So to get connected to the Global IPv6 Internet (such as it is...) you need to go get a free tunnel endpoint from Hurricane Electric (or others) then use the AirPort Utility and select 'Manual Setup', then go to 'Advanced' and 'IPv6' then select 'IPv6 mode:' as tunnel and select 'Configure IPv6:' as Manually. The enter the addresses as given by your IPv6 tunnel provider. In the LAN IPv6 Address enter an address that has the same IPv6 prefix as the others but with a different host id - the bit after the "::/64" - just choose a number (well up to 8 hex digits separated by ':'s - no "::" prefix used if exactly 8 digits are used for host_id) which will form your TC's [Global] IPv6 address (e.g. your_prefix::FE:ED:CO:FF:EE). It's probably best to disable incoming connections as you could open your machine to IPv6 attacks.

If you're on a public IP address space then you're all set, however if like most of us your TC is behind a DSL router/NAT then you'll need to make hole in your firewall/NAT so Porotocol 41 gets in and out. If you're lucky enough to have a Linux based DSL router then this how to do it - login to you router. If you've got a Netgear router then you can enable telnet access by going to http://your_router/setup.cgi?todo=debug. And then telnet to the router and type the following (which I found here) - given your TC has the address 192.168.0.2:
iptables -t nat -A PREROUTING -i ppp0 -p 41 -j DNAT --to 192.168.0.2
iptables -t filter -A FORWARD -i ppp0 -p 41 -d 192.168.0.2 -j ACCEPT

You may not need to do the above on some routers - all tht may be necessary is enable pings on the external interface.

[update 2aug09]: If you've got a Thompson router then see my new blog entry.

And you should now be able to access the world of IPv6.... Check out these for starters ipv6.google.com, the old Kame dancing turtle, and quite a few others...oh and these too...

[updated/corrected 6in4 - 18nov09]