小编Exc*_*rVT的帖子

TcpClient或HttpWebRequest到Apple TV 30秒后结束?

我正在创建一个C#库,使用Airplay协议将照片和视频发送到我的Apple TV(特别是与第3代一起使用,但希望这对此无关紧要).

https://airlib.codeplex.com/

根据此规范,Airplay的所有命令都是端口70上的HTTP:http: //nto.github.com/AirPlay.html

我已成功地在Apple TV上播放照片和视频,但无论我做什么,AppleTV都只播放30秒的视频.看起来我的C#客户端发出播放命令就是在30秒时断开连接,这导致AppleTV结束播放会话.

我认为这个的原因:

  • 完全终止客户端应用程序会产生与等待30秒相同的行为(基本上强制连接关闭).
  • 手动关闭HttpWebRequest或TcpClient连接会产生相同的行为(在播放会话中途).
  • 无论我持有断点多长时间以阻止GetResponse()调用,视频总是在WebRequest开始发送消息后30秒超时.
  • 为视频使用不同的源(IIS,外部Web服务器)不会更改行为.
  • 即使视频已经缓存在AppleTV上并且没有重新流,超时仍然会发生.

我很确定客户端请求需要在视频的"播放"过程中保持连接,据我所知,我已将其编码为此.我真的在我的智慧结束.我已经尝试了我能想到的所有内容,包括作为HttpWebRequest和原始TcpClient(两者都工作但都超时)执行请求,将接收/发送超时设置为疯狂数字,并循环读取Tcp流确保有"活动".

好像AppleTV期待我发送"嘿,继续播放"的消息,但我还没有从网上的任何来源看到类似的东西.我希望这只是一些愚蠢的东西,我不是基于我缺乏Http/Tcp知识.

这是我的代码:

    Uri url = "http://somevideo.com/video.mov";
    float startPosition = 0;        
    TcpClient tcpClient = new TcpClient("192.168.1.20",7000);
    tcpClient.ReceiveTimeout = 100000;
    tcpClient.SendTimeout = 100000;

    //get the client stream to read data from.
    NetworkStream clientStream = tcpClient.GetStream();

     string body = 
    "Content-Location: " + url + "\n" +
    "Start-Position: " + startPosition + "\n";

    string request = "POST /play HTTP/1.1\n" + 
    "User-Agent: MediaControl/1.0\n" +
    "Content-Type: text/parameters\n" +
    "Content-Length: " …
Run Code Online (Sandbox Code Playgroud)

c# httpwebrequest tcpclient apple-tv

5
推荐指数
1
解决办法
3777
查看次数

标签 统计

apple-tv ×1

c# ×1

httpwebrequest ×1

tcpclient ×1