Ask HN: What's preventing us from achieving seamless video communication?
Better video compression? faster network speeds? alternative network protocols?
With all due respect to all the amazing folks working in the domain, as a person working outside the field, the quality of even 1:1 video communication still seems far from ideal.
Wanted to understand a bit what the main underlying hurdles are. Folks say there's less room for improvements with compression after H.264. I'm not sure how much network speeds are a factor given things can get botchy even with wired high bandwidth connections. The audio artifacts definitely impacts the perceived quality so not sure if there's room for improvement here technically.
63 comments
[ 3.5 ms ] story [ 131 ms ] threadISDN was a 64kb/s circuit switched channel end to end, rigidly clocked. Every bit came in on schedule. Voice with no jitter. A friend of mine in Switzerland had ISDN home phones until last month, when Swisscom discontinued it in favor of a VoIP system with worse voice quality.
If there had been a video successor to ISDN, say a 10mb/s circuit, we'd have real time HDTV video chat with no jitter.
Voice and video over IP only work because of horrible kludges to deal with jitter and lag.
If you're depending on 20 things, each having 99% reliability, the system has 82% reliability. Roughly speaking, that's what's happening. There is no silver bullet to fix this. Bringing one layer from 99% to 100% brings the system from 82% to 83%.
If you lose your certification if you write low-quality code, then (hopefully, if the certifiers have the processes in place) you'd not write the code. In that way, we could finally compare the importance of quality in writing a device driver to the importance of quality in designing a bridge.
[1] https://www.nspe.org/resources/licensure/what-pe
You've no right to be angry at the engineer because you wish to drive a semi truck down what you commissioned and budgeted as a footbridge.
There are also software/post-processing implementations of this out there which try to emulate eye contact. The ones I saw 4-5 years ago were definitely uncanny valley but there may be more happening there of late.
This gets even more interesting in multi party situations where there may be 3+ locations with more than one person at each location
Seems like a privacy nightmare. You can’t have a hardware toggle to close the camera nor cover it with a piece of tape.
1: https://puri.sm/posts/lockdown-mode-on-the-librem-5-beyond-h...
A lot of what makes Skype/Facetime/WebRTC/Chrome suck are the compromises and complexity inherent in trying to do the best you can do for when these things don't hold -- and sometimes, those techniques end up adding latency even when you do have a great network connection.
Receiver-side dejitter buffers add latency. Sender-side pacing and congestion control adds latency. In-network queueing (when the sender sends more than the network can accommodate, and packets wait in line at a bottleneck) adds latency. Waiting for retransmissions adds latency. Low frame rates add latency. Encoders that can't accurately hit a target frame size on an individual frame basis add latency. Networks that decrease their available throughput (either because another flow is now competing for the same bottleneck, or the bottleneck link capacity itself deteriorated) cause previously sustainable bitrates to start building up in-network queues, add latency.
And automatic echo cancellation can make audio incomprehensible, no matter how good the compression is (but the alternative is feedback, or making you use a telephone handset).
Another problem is that the systems in place are just incredibly complex. The WebRTC.org codebase (used in Chrome and elsewhere) is something like a half million lines of code, plus another half million of vendored third-party dependencies. The WebRTC.org rate controller (the thing that tries to tune the video encoder to match the network capacity) is very complicated and stateful and has a bunch of special cases and is written in a really general way that makes it hard to reason about.
And the fact that the video encoder and the network transport protocol are usually implemented separately, by separate entities (and the encoder is designed as a plug-in component to serve many masters, of which low-latency video is only one, and often baked into hardware), and each has its own control loop running at similar timescales also makes things suck. Things would work better if the encoder and transport protocol were purpose-designed for each other and maybe with a richer interface between them (I'm not talking about changing the compressed video format itself; just the encoder implementation), BUT, then you probably wouldn't have access to such a competitive market of pluggable H.264 encoders you could slot in to your videoconferencing program, and it wouldn't be so easy for you to swap out H.264 for H.265 or AV1 when those come along. And if you care about the encoder being power-efficient (and implemented in hardware), making your own better encoder isn't easy, even for an already-specified compression format.
Our research group has some results on trying to do this better (and also simpler) in a principled way, and we have a pretty good demo video: https://snr.stanford.edu/salsify . But there's a lot of practical/business reasons why you're using WebRTC or FaceTime and not this.
However every protocol doing this must have fallback from UDP to TCP because there are a surprising amount of corporate firewalls out there that arbitrarily limits the use of UDP.
We worked extensively with webrtc, but are recently switching to our own protocol. The main reason is that webrtc is very complex and generic. You can make a better user experience if you adapt the protocol to target your use case.
Another reason is that we can more easily detect firewalls and give the user feedback about it.
In college, I had one Networks course which discussed IPs, subnets, cidr, UDP, TCP, various higher level protocols, packet headers, etc. There were a couple projects - I think I recall implementing TCP or sliding window. Anyway, that’s the extent of my background knowledge.
Where would one start if they want to dive deeper in video transmission or related topics that provide more than the very basic understanding I have?
I wonder if it would be possible to get Salsify into the browser using something like web-udp[0]. I don't think the lower level access to the encoder information is available to coordinate network usage...
For those who are interested in code, check out the encoder on Github[1].
[0]: https://github.com/osofour/web-udp
[1]: https://github.com/excamera/alfalfa
Noob question: Where do you think Google's BBR https://ai.google/research/pubs/pub45646 and CMU's HFSC https://www.cs.cmu.edu/~hzhang/HFSC/main.html fall short?
--
For folks unaware, Keith created https://mosh.org and is an expert in Computer Networks.
Here's a relevant talk by Keith on Sprout, a new transport protocol for live video on noisy cellular networks that uses probabilistic inference to predict congestion; and Remy, a program that generates transport protocols on-the-fly in response to network conditions: https://youtu.be/UsCOVF0vDe8
And here's a talk at Usenix on Salsify: https://youtu.be/LPj2ffe7Isk news.yc discussion: https://news.ycombinator.com/item?id=16964112
UoCambridge's David McKay on Information Theory, Pattern Recognition, and Neural Networks : https://videolectures.net/course_information_theory_pattern_...
Personally I think it’s a bit of everything:
There’s almost no standardization in signaling protocols. Things like FaceTime and WhatsApp don’t interoperate.
NAT hole punching remains a complex problem. It’s not easy to solve.
Bandwidth is often not stable for long periods of time. Bandwidth drops, latency spikes, packets get lost or retransmitted. WiFi connections are sketchy. Wired connections are better but still packet switched. Cellular wireless systems are overloaded and suffer from multipath fading.
Encoders are insanely complicated to build. Hardware acceleration isn’t easy to implement either. Configuring an encoders parameters for a connection environment is hard and remains a craft and not a science.
The human eye seems to be much more sensitive to artifacts than the human ear. Cameras are hard to tune and expensive. Auto focus white balance etc effect call quality quite badly. Camera placement is still a challenge. Minor changes to lighting and colors can make huge shifts in quality.
This is why video from dedicated conference rooms is way better than video calls from phones or laptops. The state of the art under controlled conditions is really unbelievably amazing.
This experiment has been repeated in many forms by different companies in different settings with no real success. Everyone had solved tech issues, its just that screen resolution keeps increasing. The only area I can think of where video calls have minor success is corporate group meetings and talking to kids/parents but even in those cases people tend to be very selective when to do video calls vs voice-only calls.
As far I can see it is possible and good enough today with Skype, FaceTime and so on plus a good internet connection; yet people prefer email, chat, telephone ... I think that is what is holding it back and because of the lack of demand there is not really big investment in create hardware and software to support it.
I am pretty sure that I can do a high quality FaceTime call with a number of people.
Yet still I prefer doing a regular phone call. As so does just about everyone else. The question you should ask is: Why is that?
It is not a technical problem.
A number of people that could afford $1000+ to be able to use that platform.
I personally wouldn't consider this problem to be technically-solved until an Android that can barely be considered as a mid-ranger can do it.
For the most part, given the margins at the high end, it's not significantly better.
https://en.m.wikipedia.org/wiki/Audio_Video_Bridging
It's too much focus on video, when deficient audio has a greater impact on rapport. Even an old school land line phone gives a more fluid conversation than modern video conferencing.
The trouble is, mainstream conferencing solutions are challenged by customers who expect great audio out of poorly spec'd rooms and microphones. The result is too much 'masking' poor inputs with software that now we all feel totally disconnected with why the system as a whole just isn't working well.
(A small plug for my own focus on audio; cleanfeed.net, which is WebRTC-based with some additional magic)
For what it's worth voice over IP is essentially solved; tools like Mumble can have 1000s of people with top tier quality. I'm not sold at all on why you'd even want video, 90% of most business meetings (in my experience) are screen shares that could be communicated by just sending a link anyway. For personal calls use direct connect peer'd connection; in my experience all of the problems of video calling is going through the enabling server.
E.g. you couldn't buffer 5 seconds.
But the internet can, at its core manage packet delivery within the delays required for real time communication.
More precisely the issue is probably one of supply and demand; that our internet is tuned for content to radiate out from large scale producers of content, flowing down to its consumers. There's far less capacity and focus "laterally" in the network -- between consumers and other consumers -- as is required by VoIP sessions.
$ ping google.com.au PING google.com.au (216.58.196.131) 56(84) bytes of data.
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=1 ttl=51 time=3239 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=2 ttl=51 time=4524 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=3 ttl=51 time=4434 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=4 ttl=51 time=3622 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=5 ttl=51 time=1022 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=6 ttl=51 time=849 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=7 ttl=51 time=1030 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=8 ttl=51 time=974 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=9 ttl=51 time=897 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=10 ttl=51 time=1022 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=11 ttl=51 time=1008 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=12 ttl=51 time=949 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=13 ttl=51 time=871 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=15 ttl=51 time=1103 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=16 ttl=51 time=1005 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=17 ttl=51 time=830 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=18 ttl=51 time=752 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=19 ttl=51 time=703 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=20 ttl=51 time=899 ms
64 bytes from syd15s04-in-f3.1e100.net (216.58.196.131): icmp_seq=21 ttl=51 time=821 ms
Does this answer the question? =)
Aspiring youths see this market ripe for disruption, and next year there are N+1 video-conferencing solutions, all of them rather shit.
The biggest challenge doesn't seem to lie in the actual video quality. The problem is in getting the damn call up in the first place, with all participants seeing and hearing all other participants.
https://news.ycombinator.com/item?id=19864808
2. Something important and very relevant to your question which I forgot to mention in that thread:
https://www.itu.int/en/ITU-T/Workshops-and-Seminars/201807/D...
This recent ITU slide deck by Richard Li (Huawei):
https://www.itu.int/en/ITU-T/Workshops-and-Seminars/201807/D...
From this recent ITU workshop: https://www.itu.int/en/ITU-T/Workshops-and-Seminars/201807/P...
The webcast of which you can find here:
https://www.itu.int/webcast/archive/t2017075g#video (third presentation in the video)
Naturally, given the information from point #1 on RINA, GNUnet & currently network technology issues combined with the fact that the plans presented above don't seem to really factor that information in, I dislike some of the directions the ITU & Huawei seem to go for there, BUT, even so, this presentation basically exactly answers most of your questions (I think the other commenters already did a most excellent job answering what the presentation doesn't), even generalizing them to seemingly "far out"—yet apparently entirely feasible—ideas like 'Holographic Teleports' (think VR on steroids.)
Classical phone lines worked so well because there is never latency. You might get static, but we’re adapted for listening through static. But you never get timing disruptions.
Videoconferencing is a black art of trying to smooth over tiny latencies that the human brain is wired to be extraordinarily sensitive to. People read too much into a single lost packet.
This same problem applies to VR - if the latency is not rigorously consistent, people vomit.
It is possible to design a network that connects two people reliably and with predictable latency - last century’s landline phone network stands as proof. Until someone builds a network that offers the same level of service for videoconferencing, it will continue to be a tool of last resort.
To say that this is circuit switching may or not be correct, but it’s wrong to say that it’s the antithesis of computer networking.
EDIT: See also Cloudflare’s ultra-predictable, low-jitter backbone: https://blog.cloudflare.com/argo-and-the-cloudflare-global-p...