This is a breaking change. The reason to make it a coroutine is so that
the info retrieval is not blocking since there are rare instances where
it would take an abnormally long time. The player returned is also
augmented to have more attributes relating to the stream itself.
This is a breaking change. This allows you to set both ffmpeg options
and regular ytdl options in the same function since we now just
forward the keyword arguments to the ffmpeg player.
Adds comments and also rewrites the logic in a way that is much easier
to see what is going on. For example you can now easily see that the
port is actually encoded in little endian (which is different from
everything else).
Two new options are added to the ffmpeg player. `options` and `pipe`.
If `pipe` is True then we can pass in a file-like object to be the
stdin of ffmpeg. `options` allows you to pass extra things to the
ffmpeg command line.