古いネット v2 プロジェクトを変換し、それを C# の WinRT に移植するのに何時間も費やしました。コマンドを DVB サービス (DVBViewer) に送信する RTSP クライアントです。そのため、現時点では、WinForm プログラムが更新され、問題なく動作しています。サーバーへの接続、コマンドの送受信、および最終的にローカルホスト UDP ポートへのストリームは完全に機能し、ts ストリームは VLC および RTP プロトコルを介して完全に読み取り可能です。
しかし今、この内容で Metro アプリを作成したいと思います。私はなんとか仕事をすることができ、ほぼ完成しているようです(少なくともソケットとストリームのもの)。
しかし今、私はばかげた問題に行き詰まっています。RTSP サーバーと通信できません。ストリーム リーダー/ライターが機能せず、いろいろ試しました。
このアプリは Uniriotec.DV プロジェクトのコードに基づいているため、詳細については Google で検索できます。
それで、ここで私が立ち往生しているポイントがあります:それはメインハンドルであり、ストリーム(メッセージ)と一緒に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;
}
}
}
私がどこでエラーをしたか分かりますか?
答えてくれてありがとう、ジョー
PS: await writer.StoreAsync(); が必要です。答えは約10〜15秒で送信されるためです。後で、サーバーがリクエストをスレッド化する準備ができたときに、SessionID などを返信します。