PTTH或反向Http到/来自Apple TV

时间:2015-02-26 13:56:09

标签: c# apple-tv

我一直试图让event connection在我的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)。所有这三种方法都完全无效,只是为了完整我将包括我当前的代码(这不起作用)。我目前回到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),但在我收到活动并且知道视频何时停止播放之前,我没有别的东西放在那里。

我首先执行此部分,然后发送一个带有URL的play命令到我的机器上的文件,它开始在Apple TV上正常播放。我也可以发送scrub命令并获取有关位置/持续时间的信息,但不会发生任何事件。

非常感谢任何帮助/建议。

1 个答案:

答案 0 :(得分:0)

我认为你对Connection如何运作做出错误的假设:

  • 您的客户端向AirPlay-Server发送UPGRADE。
  • AirPlay-Server在该连接上回复101并放弃
  • AirPlay-Server启动与客户端的新连接。它将使用HTTP
  • 您的客户以200或其他任何方式回答。

在发布UPGRADE请求之前,您可能需要一个打开的http-listener来处理传入的事件。

请参阅此处以供参考:http://tools.ietf.org/id/draft-lentczner-rhttp-00.txt