1

しばらくの間、Apple TV との間でイベント接続を実行しようとしてきましたが、何が間違っているのかわかりません。

私は自分の要求を書き、適切な応答を得ます。しかし、一時停止したり、ビデオが停止したりしても、イベントは発生しません。

イベント接続に関連するコードは次のとおりです。

var endpoint = new IPEndPoint(IPAddress.Parse("192.168.13.37"), 23579);
var socket = new Socket(endpoint.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(endpoint);
socket.Connect("192.168.13.13", 7000);
socket.NoDelay = true;

var request = Encoding.UTF8.GetBytes("POST /Reverse HTTP/1.1\r\nConnection: Upgrade\r\nUpgrade: PTTH/1.0\r\nX-Apple-Purpose: event\r\nUser-Agent: ItsMe/5.7\r\nX-Apple-Session-ID: f519e023-da6d-4fc2-902f-791c07dd9ff8\r\nContent-Length: 0\r\n\r\n");
socket.Send(request, request.Length, 0);

var response = new Byte[4096];
var read = socket.Receive(response, response.Length, 0);
var result = Encoding.UTF8.GetString(response, 0, read);

Apple TV からの応答:

HTTP/1.1 101 Switching Protocols
Date: Thu, 23 Feb 2012 17:33:41 GMT
Upgrade: PTTH/1.0
Connection: Upgrade

私の最初の試みは、この時点でソケットを閉じて開始しましたTcpListener(これも試しましたHttpListener)。3 つのアプローチはすべてまったく効果がありませんでした。完全にするために、現在のコードを含めます (これは機能しません)。私は現在 に戻っていTcpListenerます:

socket.Disconnect(true);
socket.Close();

var listener = new TcpListener(lep);
listener.ExclusiveAddressUse = true;
listener.Start();

while (true)
{
    var client = listener.AcceptTcpClient();
    using (var reader = new StreamReader(client.GetStream()))
    {
        while (isRunning)
        {
            if (reader.Peek() != -1)
            {
                Console.WriteLine(reader.ReadLine());
            }
        }
    }
    client.Close();
}

を保持する予定はありませんwhile (true)が、イベントを取得して、ビデオの再生がいつ停止するかを知るまで、そこに置くものは他にありません。

最初にこの部分を実行playしてから、マシン上のファイルへの URL を含むコマンドを送信すると、Apple TV で問題なく再生が開始されます。コマンドを送信scrubして、位置/期間に関する情報を取得することもできますが、イベントはまったくありません。

どんな助け/提案も大歓迎です。

4

1 に答える 1

0

接続がどのように機能するかについて誤った仮定をしていると思います:

  • クライアントが AirPlay サーバーに UPGRADE を送信します。
  • AirPlay-Server はその接続で 101 で応答し、それを放棄します
  • AirPlay サーバーは、クライアントとの新しい接続を開始します。そのためにHTTPを使用します
  • クライアントは 200 か何かで答えます。

受信イベントを処理するために、UPGRADE リクエストを送信する前に、開かれた http-listener が必要になる可能性があります。

参照用にここを参照してください: http://tools.ietf.org/id/draft-lentczner-rhttp-00.txt

于 2015-03-02T10:26:28.367 に答える