0

我花了几个小时来转换旧的 net v2 项目并将其移植到 C# 中的 WinRT。它是一个向 DVB 服务 (DVBViewer) 发送命令的 RTSP 客户端。因此,此时,WinForm 程序已经更新并且运行良好。连接、发送和接收命令到服务器,最后流到我的 localhost UDP 端口都可以正常工作,并且 ts 流可以通过 VLC 和 RTP 协议完全读取。

但现在,我想用这些东西编写我的 Metro 应用程序。我设法完成了这项工作,似乎快完成了(至少是 Socket 和流的东西)。

但是现在,我陷入了一个愚蠢的问题。我无法与 RTSP 服务器通信。我的 Stream Reader/Writer 不工作,我已经尝试了很多。

该应用程序基于 Uniriotec.DV 项目的代码,因此有关更多信息,您可以通过 google 找到它。

所以,这就是我遇到的问题:它是主句柄,就是将 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 等时。

4

1 回答 1

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

于 2012-10-17T13:03:24.857 回答