Facebook is no stranger to VoIP technologies. The company began offering free VoIP calls on iOS devices a few months ago, and the Android service was available in 23 other countries before making its official debut in the States. Facebook, like Google, wants to become the catchall for online communication and social networking, and this introduction of VoIP services is a step toward heightened integration. Also, to be clear, when Facebook says free calls, they are limiting them to devices that are using Facebook’s Messenger app. You will not be able to call phones outside of the Facebook network with this new feature.
We used a Droid Razr to test the new feature. Overall, we were satisfied with the quality of the calls. When used locally, the Facebook VoIP reception is much clearer than an average cell phone call. You must be Facebook friends with someone before you can initiate a call with him or her. We were not able to test the feature from a remote location, but over our WiFi network, the calls were crisp and undistorted. Its “always-on” appearance was slightly annoying, especially since this feature was not easy to turn off from the in-app controls.
We utilized Wireshark to parse the inner workings of the new feature. Several exchanges over TCP port 443 were followed by increased UDP traffic, which suggests that the signaling was sent over HTTPS using WebSockets. Both endpoints also used STUN for NAT traversal. This would make sense if the application were using WebRTC, which would eventually allow for the VoIP calling feature to be browser-enabled without significant back-end modifications. But WebRTC does not standardize signaling, which means the underlying protocol could be anything. Our attempts to use Wireshark's built in decoder resulted in unintelligible audio, meaning the audio codec is either encrypted or simply not G.711.
Facebook has embraced the potential of VoIP technologies, and its implementation of an integrated communications environment will slowly chip away at rival services such as Skype. With over one billion users, Facebook has the potential to become one of the largest VoIP enabled networks on the planet, and this new feature for the Facebook Messenger app on Android is a step in that direction.
Since Facebook has said in the past that they use MQTT for chat, and given the fact that the destination of traffic seems to be named with the intention of having some MQTT purpose, it seems very logical that they are using MQTT for both voice signaling and chat. It is still theoretically possible that they're doing something else, but all of the reasons they used MQTT for chat (low overhead, reliability, conserving mobile battery) apply doubly so in the case of VoIP.
All of the previous logic still applies. It is using HTTPS instead of the default MQTT port, so WebSockets still looks to be a main contender. Altogether, we guess that Facebook Messenger's VoIP calling capability on Android is using MQTT over WebSockets to set up a WebRTC session with unknown codecs.