我花了好几个小时来转换旧的net v2项目并将其移植到C#中的WinRT。 它是一个RTSP客户端,可以将命令发送到DVBservice(DVBViewer)。因此,此时,WinForm程序已经更新,其工作状况良好。连接,发送和接收命令到服务器,最后流到我的localhost UDP端口完全正常工作,ts流可通过VLC和RTP协议完全读取。
但是现在,我想用这些东西写我的Metro应用程序。我设法做了工作,似乎差不多完成了(至少是Socket和流的东西)。
但是现在,我陷入了一个愚蠢的问题。我无法与RTSP服务器通信。 我的Stream Reader / Writer无法正常工作,我已经尝试了很多。
该应用程序基于Uniriotec.DV项目的代码,因此对于任何进一步的信息,您可以通过谷歌找到它。
所以,这就是我遇到的问题: 它是主要的句柄,它将StreamSocket与Stream(消息)结合在一起。
//Set input and output stream filters in the main client app
RTSPBufferedReader = new BufferedReader<Stream> (RTSPsocket);
RTSPBufferedWriter = new BufferedWriter<Stream> (RTSPsocket);
namespace RTSP.Client
{
public class BufferedReader<T> : StreamReader where T : Stream
{
private StreamSocket socket;
private T unbufferedStream;
private StreamSocket streamSocket;
public T UnbufferedStream
{
get { return unbufferedStream; }
set { unbufferedStream = value; }
}
public BufferedReader(T myStream)
: base(myStream)
{
unbufferedStream = myStream;
}
public BufferedReader(StreamSocket mySocket)
: base(new Stream(mySocket)) // <== here is the problem, saying "could'nt establish an instance of the abstract or interface class "System.IO.Stream"....
{
this.streamSocket = mySocket;
}
}
}
你知道我在哪里犯了这个错误吗?
感谢您的回答, 乔
PS:我需要等待writer.StoreAsync();因为答案是大约10-15秒发送。之后,当服务器准备好对请求进行线程化并向我发送SessionID等等。
答案 0 :(得分:0)
Stream类是抽象的,你不能直接实例化一个抽象类,就像你在使用base(new Stream(mySocket))一样。有关System.IO.Stream定义,请参见此处 http://msdn.microsoft.com/en-us/library/windows/apps/system.io.stream.aspx
您需要将Stream类替换为适当的派生类,例如DataReader。以下是使用可能有用的StreamSocket示例的示例: http://code.msdn.microsoft.com/windowsapps/StreamSocket-Sample-8c573931