The 'SessionDescription' can be found as a property of the 'RtspClient', it is serialized as a string quite easily using the 'ToString' method, it's property value is assigned after the call to 'SendDescribe'.
To accurately diagnose your issues I will need to see a small sample of how you create the stream and how you add it to the server, although without seeing anything I imagine you are running this code from Windows where sometimes Windows Media Player already
has a service listening on port 554.
Here is a link to a post which will tell you how to check which process is using what what ports
Lastly, do I think it would be easier for you to do this in C++?
Do what exactly?
I don't really know what you are doing so it's hard to say.
Typically media decoding needs to be performed as quickly as possible and often there are specific system devices which perform the decoding of the data and not the CPU, this would be the GPU for Images and Video and the Sound Card for Audio.
Those devices often can decode the data much faster than the CPU and thus reduce overhead and increase performance.
What I can say is that there is no reason to use C++ over C# for really anything nowadays especially when SIMD support has made it to .Net, the other reason one would use C++ would be to use some type of assembly\machine code which has no other way of being
accessed, e.g. a processor specific feature; where some processors may have a special function which can be called which may be specially relevant to media decoding or they may have an on-board GPU which can handle the routine much faster than would normally
take to execute in the CPU pipeline without such an instruction (known as intrinsic) or special device.
If you need to access those functions you could always write a small C++ library and then inter-operate with that library in C#.
What it comes down to more or less is code availability, there are already a lot of libraries in C++ which can encode and decode video such as LibAv or GStreamer where as in C# there is usually only bindings to such libraries such as FFMPEGSharp or GStreamer#.
As you will see using either of those bindings will allow you to decode video quite easily although they require the C++ libraries to be built and present for the bindings to work.
Keep in mind the bindings may expose GDI objects in the form of 'Bitmap' which will only work if 'System.Drawing' is available, e.g. in Silverlight there is no 'System.Drawing'.
This is why I am making the effort to not rely on 'Bitmap' and I am creating my own set of classes so when a developer has to target a different platform they are not stuck rewriting display code, they can just create the objects for the platform paradigm they
desire without having to change the underling code logic.
All Encoders and Decoders will then work with those classes to provide a better overall experience which can then be derived to use external libraries where desired for performance.
Hopefully that sums everything up.
Let me know if you have any other questions.