Stream RTSP WinRT客户端应用程序的流读写器

Stream RTSP WinRT客户端应用程序的流读写器,stream,microsoft-metro,windows-runtime,rtsp,inputstreamreader,Stream,Microsoft Metro,Windows Runtime,Rtsp,Inputstreamreader,我花了几个小时转换一个旧的NETV2项目,并将其移植到C#中的WinRT。 它是向DVBservice(DVBViewer)发送命令的RTSP客户端。因此,目前,WinForm程序已经更新,运行良好。连接、发送和接收到服务器的命令,最后是到本地主机UDP端口的流完全正常工作,ts流通过VLC和RTP协议完全可读 但是现在,我想用这些东西来编写我的Metro应用程序。我成功地完成了这项工作,而且似乎快完成了(至少是套接字和流的工作) 但现在,我陷入了一个愚蠢的问题。我无法与RTSP服务器通信。 我

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

但是现在,我想用这些东西来编写我的Metro应用程序。我成功地完成了这项工作,而且似乎快完成了(至少是套接字和流的工作)

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

该应用程序基于Uniriotec.DV项目的代码,因此,如果您想了解更多信息,可以在谷歌上找到它

所以,我要说的是: 它是主句柄,将StreamSocket与流(消息)放在一起

//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;
        }
    }
}
//在主客户端应用程序中设置输入和输出流过滤器
RTSPBufferedReader=新的BufferedReader(RTSPsocket);
RTSPBufferedWriter=新的BufferedWriter(RTSPsocket);
名称空间RTSP.Client
{
公共类BufferedReader:StreamReader,其中T:Stream
{
专用流插座;
非缓冲流;
私有流套接字流套接字;
公共非缓冲流
{
获取{返回无缓冲流;}
设置{unbufferedStream=value;}
}
公共缓冲区阅读器(T myStream)
:base(myStream)
{
无缓冲流=myStream;
}
公共BufferedReader(StreamSocket mySocket)

:base(new Stream(mySocket))/流类是抽象的,您不能像使用base(new Stream(mySocket))那样直接实例化抽象类。有关System.IO.Stream定义,请参见此处

您需要使用适当的派生类(如DataReader)替换流类。下面是使用StreamSocket示例的示例,可能会有所帮助:

您好,非常感谢。我已经这么做了,并且一直在处理这个示例。现在我更好地理解了我必须要做的事情。我不明白的是,它是如何以及为什么在一个普通的Winxx应用程序中工作的。RT应用程序有这么大的不同吗?老实说,我不知道为什么之前的确切代码可以工作,因为流类一直是抽象的。有一些ajor在winRT中做了一些更改,请在这里查看一些值得注意的更改:一旦掌握了winRT api的窍门,它会更干净(更简单)实现很多东西。是的,你是对的。我重写了堆栈,没有使用旧项目的任何一行。你猜怎么着…;-)可能是代码行的1/10。但是好吧,…我这么做只是为了我绝对需要的代码。无论如何,非常感谢!!!你给了我正确的方向。欢迎!如果你能把这个标记为答案,它会有帮助的p引导他人到正确的位置。更新(编辑)您的问题,而不是将更新作为答案发布。