标签: apple-tv

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控件

我有一个带AVPlayer的应用程序来播放视频.我希望能够检测到用户何时按下遥控器上的按钮.我尝试实现以下方法,但remoteControlReceivedWithEvent()不响应任何控件事件.

- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
    //if it is a remote control event handle it correctly
    if (event.type == UIEventTypeRemoteControl) {
        if (event.subtype == UIEventSubtypeRemoteControlPlay) {
            NSLog(@"play");
        } else if (event.subtype == UIEventSubtypeRemoteControlPause) {
            NSLog(@"pause");
        } else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) {
            NSLog(@"toggle");
        }
    }
}

- (BOOL)canBecomeFirstResponder {
    return YES;
}

- (void)viewDidAppear:(BOOL)animated {
    // Setup Apple TV control events
    [super viewDidAppear:animated];
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [self becomeFirstResponder];
}

- (void)viewWillDisappear:(BOOL)animated {
    // Remove Apple TV control events
    [super viewWillDisappear:animated];
    [[UIApplication …
Run Code Online (Sandbox Code Playgroud)

controls ios apple-tv tvos

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

TVOS UITextView不滚动

UITextViewTVOS不滚动的情况下,我可以看到它contentSize很棒bounds,我可以确认它scrollEnabled = YES,userInteraction = YES这是当前的焦点视图.

objective-c uitextview apple-tv tvos

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

如何在显示屏幕保护程序时唤醒应用程序

当屏幕保护程序在第4代Apple TV上启动时,我有一个隐藏(但仍然在后台运行)的应用程序.

当我在后台运行的应用程序中发生事件(更新到我长时间轮询的端点)时,如何将应用程序带到前台(隐藏屏幕保护程序)?

apple-tv swift tvos

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

AppleTV UIAlertView相当于

因此,我正在AppleTV上的SpriteKit游戏中进行应用内购买,但如果付款错误或任何其他各种错误,我想显示错误.UIAlertView就是我在iOS上做的,但这不是tvOS上的一个选项.有类似的东西可以做吗?基本上,我需要弹出描述错误的东西和一个关闭弹出窗口的按钮.添加更多按钮(如UIAlertView)的能力将是锦上添花.

注意:我对此进行了一些研究,大多数事情似乎都指向使用TVML,但是,我不相信这是与SpriteKit混合使用的选项.如果它解释了如何导入TVML(我几乎一无所知)并将其与SpriteKit一起运行,我将接受与此相关的答案.我假设我正在寻找与TVML无关的答案.

objective-c apple-tv

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

tvOS/iOS - 拦截AudioQueue请求修剪ERROR

我从HLS实时流加载视频,但有时我收到此错误,然后将音频熄灭同步的:

ERROR:    849: AudioQueue: request to trim 4294723408 + 0 = 4294723408 frames from buffer containing 21504 frames
Run Code Online (Sandbox Code Playgroud)

有没有办法拦截这个错误,所以我至少可以尝试重新加载流或采取任何其他措施?

avfoundation ios apple-tv tvos

5
推荐指数
0
解决办法
205
查看次数

UI测试tvOS文本字段

我正在尝试为tvOS应用程序实施UI测试,但遇到了一些问题。

Record UI Test期间,当我输入文本字段并开始键入(在键盘上)时,它会合理地创建代码:

myTextField.typeText("String")
Run Code Online (Sandbox Code Playgroud)

但是,每次运行测试时,它将在该行崩溃并显示错误:

Assertion Failure: UI Testing Failure - Failed to receive event delivery confirmation within 20.0s of the original dispatch.

作为参考,我在下面的上下文中附加了代码:

let myTextField = XCUIApplication().textFields["myTextField"]
XCTAssert(myTextField.hasFocus)
XCUIRemote.sharedRemote().pressButton(.Select)
myTextField.typeText("String") <-- Crashes here
XCUIRemote.sharedRemote().pressButton(.Select)
Run Code Online (Sandbox Code Playgroud)

我意识到这可能是因为用户无法访问实际设备上的键盘(除非他们拥有更新的Remote应用程序)。

有没有更简单的方法来模拟在tvOS中将文本输入文本字段?

我宁愿不必创建XCUIRemote.sharedRemote().pressButton(.Direction)一遍又一遍的吨。

uitextfield apple-tv swift swift2 tvos

5
推荐指数
0
解决办法
612
查看次数

tvOS:聚焦时图像视图的圆角

我有一个图像视图,当包含视图聚焦时,将获得这个令人敬畏的tvOS焦点效果.问题是 - 它应该有圆角.现在这很容易做到:

imageView.layer.cornerRadius = 5
imageView.layer.masksToBounds = true 
Run Code Online (Sandbox Code Playgroud)

我必须masksToBounds将图层或clipsToBounds图像视图中的任何一个设置为true(基本上相同),以便剪切图像的边缘 - 但是一旦我这样做,焦点效果将不再起作用,因为它也会被剪裁.

我对按钮的问题或多或少有相同的问题,但由于焦点效果比图像视图(仅缩放和阴影)简单得多,我自己实现了它,但这不是图像视图的选项,所有应用的效果(移动,闪烁等......)

有没有更简单的方法?我错过了什么?我不能成为唯一想弄清楚它如何运作的人!?:)

xcode uiimageview apple-tv tvos

5
推荐指数
2
解决办法
1441
查看次数

在Swift中将AirPlay集成到iOS应用

我想通过AirPlay广播广播流(到AppleTV)。我已经研究了很多与此主题相关的内容,但是发现文档确实很差。

这是AirPlay 2的Apple文档:https//developer.apple.com/documentation/avfoundation/airplay_2/getting_airplay_2_into_your_app

我发现AVRoutePickerView只有在iOS 11之后才可用。在iOS 11以下MPVolumeView需要使用。

我检查了iOS版本,集成了这些类,演员表正常工作,不买我想要的

一个黑色的屏幕同时播放出现在电视上,我无法控制音量的演员。

谁能告诉我如何简单明了地将AirPlay集成到iOS应用中?任何帮助,将不胜感激。

ios airplay apple-tv control-center swift

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

从tvOS 13删除沙箱帐户

我一直在开发使用应用程序内购买的tvOS应用程序。在开发过程中,必须使用iTunes沙箱用户帐户对应用程序进行测试。使用本地版本开始应用内购买时,系统会提示用户输入这些沙箱帐户之一的帐户凭据。

问题出现在tvOS 13上,一旦输入,tvOS 13似乎无法让您注销或从设备中删除沙箱帐户。虽然这对于一次购买来说可能是可以的,但是再次执行购买过程需要一个新的沙箱帐户,因为否则,该购买将被视为续订而不是新购买。

有没有人想出一种方法来注销运行tvOS 13的Apple TV的沙盒帐户?我发现的唯一解决方法是在设备上执行重置,然后再次进行设置过程,这会花费大量时间。

in-app-purchase apple-tv tvos tvos13

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