我正在创建一个C#库,使用Airplay协议将照片和视频发送到我的Apple TV(特别是与第3代一起使用,但希望这对此无关紧要).
根据此规范,Airplay的所有命令都是端口70上的HTTP:http: //nto.github.com/AirPlay.html
我已成功地在Apple TV上播放照片和视频,但无论我做什么,AppleTV都只播放30秒的视频.看起来我的C#客户端发出播放命令就是在30秒时断开连接,这导致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) 我有一个带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) UITextView在TVOS不滚动的情况下,我可以看到它contentSize很棒bounds,我可以确认它scrollEnabled = YES,userInteraction = YES这是当前的焦点视图.
当屏幕保护程序在第4代Apple TV上启动时,我有一个隐藏(但仍然在后台运行)的应用程序.
当我在后台运行的应用程序中发生事件(更新到我长时间轮询的端点)时,如何将应用程序带到前台(隐藏屏幕保护程序)?
因此,我正在AppleTV上的SpriteKit游戏中进行应用内购买,但如果付款错误或任何其他各种错误,我想显示错误.UIAlertView就是我在iOS上做的,但这不是tvOS上的一个选项.有类似的东西可以做吗?基本上,我需要弹出描述错误的东西和一个关闭弹出窗口的按钮.添加更多按钮(如UIAlertView)的能力将是锦上添花.
注意:我对此进行了一些研究,大多数事情似乎都指向使用TVML,但是,我不相信这是与SpriteKit混合使用的选项.如果它解释了如何导入TVML(我几乎一无所知)并将其与SpriteKit一起运行,我将接受与此相关的答案.我假设我正在寻找与TVML无关的答案.
我从HLS实时流加载视频,但有时我收到此错误,然后将音频熄灭同步的:
ERROR: 849: AudioQueue: request to trim 4294723408 + 0 = 4294723408 frames from buffer containing 21504 frames
Run Code Online (Sandbox Code Playgroud)
有没有办法拦截这个错误,所以我至少可以尝试重新加载流或采取任何其他措施?
我正在尝试为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)一遍又一遍的吨。
我有一个图像视图,当包含视图聚焦时,将获得这个令人敬畏的tvOS焦点效果.问题是 - 它应该有圆角.现在这很容易做到:
imageView.layer.cornerRadius = 5
imageView.layer.masksToBounds = true
Run Code Online (Sandbox Code Playgroud)
我必须masksToBounds将图层或clipsToBounds图像视图中的任何一个设置为true(基本上相同),以便剪切图像的边缘 - 但是一旦我这样做,焦点效果将不再起作用,因为它也会被剪裁.
我对按钮的问题或多或少有相同的问题,但由于焦点效果比图像视图(仅缩放和阴影)简单得多,我自己实现了它,但这不是图像视图的选项,所有应用的效果(移动,闪烁等......)
有没有更简单的方法?我错过了什么?我不能成为唯一想弄清楚它如何运作的人!?:)
我想通过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应用中?任何帮助,将不胜感激。
我一直在开发使用应用程序内购买的tvOS应用程序。在开发过程中,必须使用iTunes沙箱用户帐户对应用程序进行测试。使用本地版本开始应用内购买时,系统会提示用户输入这些沙箱帐户之一的帐户凭据。
问题出现在tvOS 13上,一旦输入,tvOS 13似乎无法让您注销或从设备中删除沙箱帐户。虽然这对于一次购买来说可能是可以的,但是再次执行购买过程需要一个新的沙箱帐户,因为否则,该购买将被视为续订而不是新购买。
有没有人想出一种方法来注销运行tvOS 13的Apple TV的沙盒帐户?我发现的唯一解决方法是在设备上执行重置,然后再次进行设置过程,这会花费大量时间。
apple-tv ×10
tvos ×7
ios ×3
swift ×3
objective-c ×2
airplay ×1
avfoundation ×1
c# ×1
controls ×1
swift2 ×1
tcpclient ×1
tvos13 ×1
uiimageview ×1
uitextfield ×1
uitextview ×1
xcode ×1