Sorry that things aren't documented very well; the RtpSender/RtpReceiver stuff is still in development. Anyway,
createSender was intended to be used if you want to negotiate sending something, but don't yet have a
MediaStreamTrack to send. If you do have a
MediaStream, you can call
addStream, and one sender will be created implicitly for each track, returned by the
getSenders() accessor.
If you need to use
createSender, the
kind argument may be "audio" or "video", and
stream_id is an ID of a
MediaStream that the remote audio track created on the other side will be added to. It's similar to
addTransceiver in the spec. So if you call:
pc.createSender("audio", "my_stream");
pc.createSender("video", "my_stream");
This is essentially equivalent to calling:
MediaStream stream = pcFactory.createLocalMediaStream("my_stream");
stream.addTrack(audioTrack);
stream.addTrack(videoTrack);
pc.addStream(stream);
Except that in the former case, you won't actually be sending media until you attach a track to the sender via setTrack (equivalent to replaceTrack in the spec).
Hopefully that makes sense... I'll add a note to myself to document these things in the code.
No immediate plans, but the interface exists in C++, so it's just a matter of no one needing it in Java so far.