Request now has a Write receiver method that will write to the passed io.Writer. Client now has Do method that will send the request and return the respons and any errors. Also Renamed the Client
field to Session, which was mistakenly changed.
Completed test to check that each method we support works and can produce valid requests. The requests are compared to requests that have been proven valid. This test also checks that the RTSP
client communicates over tcp correctly. i.e. we have set up a client and server, and we check that this communication happens correctly.
Added file header to main.go, and modified rtsp.go to work with cmd/stream/main.go. This change modifies writeRequest, which now takes a *url.URL. This means the Setup() method can parse a new
URL that contains a given track, and then give this to writeRequest.
Simplified clien_test.go file by testing two different RTP packet operations using loop. We now first test no operation,
and then test a rtp.Payload operation, which gets the payload of the packets and stores them in the client ringbuffer for the
user of the client to read.
Wrote test TestReceiveNoOP to check that client works correctly when we give no operation to perform on RTP packets before
storing in the client ringBuffer, which calling io.Reader implementation Read will get packets form.
Added client.go which contains a struct to describe an RTP client. It provides a method, Start, which will
invoke a recv routine to start receiving packets and process them using an op function passed on the Client's
creation. Client implements io.Reader, so that the client may be read from.
tcp dial is now in new session, firstly so that we don't have to do the s.conn == nil check and also so that we dont't have to pass around the url everywhere.
Added them back because i realised I can't use http Requests and Responses and the accompanying methods because then this wouldn't be the RTSP protocol, it would be the HTTP protocol, which is not what we're doing.