用于RTSP WinRT客户端应用程序的流读取器/写入器

时间:2012-10-16 20:34:18

标签: stream microsoft-metro windows-runtime rtsp inputstreamreader

我花了好几个小时来转换旧的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等等。

1 个答案:

答案 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