The problem with QR codes is they aren't big enough. They're big enough for 95% of transactions, but the first time you have to move 1 MB across that channel, you'll be SoL. And you don't have control over it. If I know one of the addresses in your offline system, I can send you a couple 100 kB transactions, and effectively DoS your offline solution.
QR codes can hold enough data. I've put some thought into this and have a working prototype. QR codes can hold up to 2KBs of data with standard readers. In practice, i expect a casual setup will be able to read 1KB QR codes. As far as data encoding goes, Base91 seems to be optimal for compatibility, so 364 bytes are available in an easily readable QR code. It's not high bandwidth by any means, but more than fine for today's usage. It may even be a feature for people using Armory now.
I can see how audio is a good solution coming from people with DSP experience. I just like how QR codes are easy enough for most people to understand.
I'm not sure I understand your point about DoS, the online computer will be creating the transaction, just use coin control to select non-DoS'd inputs. The 1 MB block limit will make DoS impractical for most until it's lifted. The blockchain will continue to have anti-DoS measures beyond the 1 MB block limit being lifted, so most users should be fine after that as well.
QR code + Webcams:
+ QR codes are easy to generate
+ Plenty of existing software for scanning QR codes
+ Many laptops come with webcam, and can also be purchased inexpensively
- Requires manually moving cameras and screens around to get QR codes into view
- QR codes may not hold enough data: may need to use multiple codes
- Need to design webcam-based UI, with feedback and possible UI for flipping&scanning multiple QR codes
- Webcam support on all platforms is flaky (but it could be up to the user to get their webcam supported)
In my prototype I just use screen reading, no need to deal with drivers. I'm sure adding direct web cam capture capabilities you could push the QR codes to 2 KB. It's just that JMF is not a Java library I look forward to working with.
Multiple QR codes are not really a problem, in my prototype I allocated space to store information about the payload. Once you setup cameras in good positions it's easy enough to cycle through QR codes. You can easily read a QR code in under a second. It's easy enough to automatically split the data and re-assembles data to/from QR codes.
Here are some numbers showing how I handle payloads up 30 KB:
16 base91 bytes in metadata total (1 byte each for block index and count), leaves 1008 bytes for data
base 91 vs base 256 efficiency is a little over 35%
that gives 358 bytes of data per 1KB QR code
up to 91 QR codes can be created for a single payload containing 30 KB of data
I'm sure by reworking the protocol a bit I could get it close to the limits of QR code technology and whatever users are willing to put up with.