- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我创建了一个简单的 AppleTV 项目来按类别显示多个视频,浏览和播放视频工作正常。它已作为使用 TVML 和 TVJS 的客户端-服务器应用程序实现,因此大部分应用程序逻辑都在 Javascript 文件中。这些是定期从动态内容在后台静态生成的。
然后我向应用程序添加了一个 TopShelf 扩展程序,它从 API 中提取一些特色视频,这也工作正常,按预期提取视频。
我遇到的问题是检测用户从最上面的架子上选择视频并使用react。我已经创建了一个 URL 方案 exampletvapp://,我已经在我的 plist 文件中注册了它。
我还向 TVContentItems 添加了 displayURL 和 playURL。选择其中一个视频时,我的应用程序按预期启动但实际上并未处理该视频的播放。
在我的 AppDelegate 文件中,我添加了用于打印 launchOptions 的打印语句,还添加了一个 openUrl 函数,该函数确实会被调用,但仅在我关闭应用程序并在应用程序关闭之前快速从顶部架子中选择某些内容时才会记录此功能,并且我失去调试 session 。
// AppDelegate
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
print("App Launch: \(launchOptions)")
window = UIWindow(frame: UIScreen.mainScreen().bounds)
let appControllerContext = TVApplicationControllerContext()
guard let javaScriptURL = NSURL(string: AppDelegate.TVBootURL) else {
fatalError("unable to create NSURL")
}
appControllerContext.javaScriptApplicationURL = javaScriptURL
appControllerContext.launchOptions["BASEURL"] = AppDelegate.TVBaseURL
if let options = launchOptions {
for (kind, value) in options {
if let kindStr = kind as? String {
appControllerContext.launchOptions[kindStr] = value
}
}
}
appController = TVApplicationController(context: appControllerContext, window: self.window, delegate: self)
return true
}
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
guard let javaScriptURL = NSURL(string: AppDelegate.TVBootURL) else {
fatalError("unable to create NSURL")
}
let appControllerContext = TVApplicationControllerContext()
appControllerContext.javaScriptApplicationURL = javaScriptURL
appControllerContext.launchOptions["BASEURL"] = AppDelegate.TVBaseURL
for (kind, value) in options {
appControllerContext.launchOptions[kind] = value
}
appController = TVApplicationController(context: appControllerContext, window: self.window, delegate: self)
return true
}
func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
print("handle Url called")
}
Javascript:
// Application.js
App.onLaunch = function(options) {
var javascriptFiles = [
`${options.BASEURL}js/ResourceLoader.js`,
`${options.BASEURL}js/Presenter.js`
];
console.log("options", options);
我已经在 JS 文件中添加了一个 console.log 以检查是否传递了选项,但它没有记录任何内容。我的意图是创建一个 Player 对象,其中包含一个仅包含从 TopShelf 中选择的视频的播放列表。但由于 URL 似乎只传递 ID,这意味着我需要发出 ajax 请求来获取视频信息,即使我已经在 TVContentItem 中获得了它。
所以我的问题是:我是应该将来自 topshelf 的视频本地添加到播放列表中并播放它(使用 Swift)还是将细节传递到 javascript 端以供播放。如果是 javascript,有没有办法查看 console.log 的输出?因为我没有看到任何使它很难使用的东西。
更新:
我对此有更进一步的了解,我发现(通过 Apple 开发者论坛)您可以通过“开发”>“设备”菜单将 Safari 附加到 Apple TV 模拟器中的 JS 上下文。我已经这样做了,到目前为止,URL 没有通过选项传递给 JS。 url 被传递给 openURL 委托(delegate)函数,该函数需要以某种方式传递给 JS,或者我需要本地播放视频。
我目前正在研究通过在 displayURL 中传递所有必需的信息来创建 TVContentItem 以原生方式播放视频。我看不到从 openURL 方法将此对象传递给 JS 的方法,除非我创建 Controller 的新上下文和实例(这甚至可能不起作用)
最佳答案
我终于让这个本地工作了。我也设法通过将 openUrl 传递给 JS 来让它工作,但它对我来说似乎不太可靠。我稍后会进一步研究,我现在只需要它工作。
下面的代码创建一个 AVPlayer 和 AVPlayerViewController 并呈现 ViewController 并在完成时将其关闭。到目前为止,我还没有发现这种方法有任何问题,但我仍在测试中。
// AppDelegate.swift
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
let urlString = "http:\(url.path!)"
let url = NSURL(string: urlString)!
print("opening URL: \(url)")
let item = AVPlayerItem(URL: url)
// Need to listen to the end of the player so we can dismiss the AVPlayer
NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerDidFinishPlaying:", name: AVPlayerItemDidPlayToEndTimeNotification, object: item)
let player = AVPlayer(playerItem: item)
player.actionAtItemEnd = AVPlayerActionAtItemEnd.None
let playerVC = AVPlayerViewController()
playerVC.player = player
appController?.navigationController.presentViewController(playerVC, animated: true, completion: nil)
player.play()
return true
}
func playerDidFinishPlaying (note: NSNotification) {
// Dimiss the AVPlayer View Controller from the Navigation Controller
appController?.navigationController.dismissViewControllerAnimated(true, completion: nil)
}
关于swift - 从 Apple TV Top Shelf 播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33169391/
我为 Android TV 开发了一个应用程序并发布了。我想知道有多少用户直接在他们的电视上运行该应用程序以及有多少用户使用电视盒。 有没有办法以编程方式检测我的应用程序是否在 Android TV
有没有办法在我的 Android 应用程序代码中检测到这一点?我想区分“盒子类型”(例如 NSZGS7,不带显示器)和内置电视类型(NSXGT1,带显示器)googleTV 设备。是否有可用于此区分的
我想重新加载浏览片段中的一些行数据。 基本上,我想重置适配器数据,而不会在浏览片段中造成类似闪存的效果。知道如何做到吗? 类似于 ListView 中的notifyDataSetChanged()。
有没有办法获取与用户在设置 Google 电视盒时提供的邮政编码相对应的纬度和经度? 最佳答案 根据 Google 的 Christian Kurzke 在 AnDevCon II 上的演示,您使用:
我需要查看我的 androidTV 应用程序发出的后端 https 请求,但是,由于调用是“https”调用,我需要安装一个查尔斯证书(在我的 androidTV 上)以允许查尔斯解密它们。 如果有人
我的 HoneyComb 应用程序在平板电脑和 Google TV 上运行。我在我的设置片段中设置了发送电子邮件,但它返回“没有应用程序可以处理此功能”的错误。 如果没有可用的客户端 (createC
在 1080p 模拟器和智能电视 (nVidia Shield) 上,我只能获得 960x540 WebView。是否可以使用可用的整个分辨率? 最佳答案 使用 Android TV 的 HDTV 被
我正在使用 PlayFragment 在 AndroidTV 中播放视频。我想隐藏播放/暂停/快进/进度条等控件。 我该怎么做? 如果有人知道,请帮忙。我正在使用以下示例: [https://gith
我正在使用 PlayFragment 在 AndroidTV 中播放视频。我想隐藏播放/暂停/快进/进度条等控件。 我该怎么做? 如果有人知道,请帮忙。我正在使用以下示例: [https://gith
我想在我的 Android TV 应用中通过 URL 播放 MP4 视频。 我在示例代码 ( https://github.com/googlesamples/androidtv-Leanback )
我如何检测 Apple TV 上的节目? 我已经尝试检测屏幕数量: [[UIScreen screens] count] 但它仍然是 1。 我也试过听一个事件: [[NSNotificatio
运行新 Apple tvOS 操作系统(我认为是基于 iOS)的 Apple TV 的用户代理字符串是什么?他们是否将自己报告为“iOS”设备? 最佳答案 Apple TV 不支持 WebKit 框架
我想为 Android 和 iOS 创建视频流应用程序,它也需要在 Android 和 Apple TV 或至少在 Android TV 上运行。 最佳答案 2021 年 4 月更新 适用于 Andr
我使用 Leanback Library 开发了一个应用程序。该应用程序在 Sony Android TV 上运行良好。 但是当我在 play store 上成功发布应用程序时,当我在我的 Sony
我已成功打开 SSL/TLS 连接以进行配对,并已来回发送所有必需的消息。我在将 secret 发送到 GTV 时遇到了问题。出于某种原因,它通过发回状态为 BadSecret 的消息说我的 secr
我尝试将 ADB 命令从我的 Android 移动设备 (SGS5) 发送到我的 Android TV (Nvidia Shield TV)。我总是得到: error:device offli
任何人都知道如何实现标题中的问题?目的是避免在单击标题后导致标题栏消失的动画,因为 Leanback 应用程序会放大行项目。 setHeadersState BrowseSupportFragment
我正在尝试弄清楚如何通过软件命令而不是 Remote 上的按钮触发 Google TV 中的画中画功能。据我所知,目前 API 中没有任何内容可以让我执行此操作。所以,有两个问题: 有人尝试过破解来实
我有一个要求,当新版本可用时,我需要强制升级我的 Apple TV 应用程序。但与移动应用程序不同,AppleTv 没有 Safari 来在我的应用程序中打开 Web View 。我如何从我的 App
我们最近开始开发 Android TV,我们需要连接 charles 代理工具以简化开发过程。我们能够使用相同的 wifi 连接在电视上设置代理。 但我们无法在 Android tv 中安装 char
我是一名优秀的程序员,十分优秀!