It uses SDP to exchange ICE candidates. At the moment the SDP tries to multiplex video/audio and SCTP (data channel).
Speaking from past experience, STUN and ICE are OK, but they got the whole process fundamentally wrong. They let the clients drive the traversal process. This is substantially inferior to letting a dedicated mediating server do that instead. I did that with one of my past projects and it helped with connecting peers in a large number of obscure scenarios.