Eth*_*len 22 xcode apple-tv tvos
我开始了一个空白的tvOS项目并创建了以下代码:
- (void)viewDidLoad
{
[super viewDidLoad];
AVPlayer *avPlayer = [AVPlayer playerWithURL:[NSURL URLWithString:@"http://www.myurl.com/myvideo.mp4"]];
AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
avPlayerLayer.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
[self.view.layer addSublayer:avPlayerLayer];
[avPlayer play];
}
Run Code Online (Sandbox Code Playgroud)
一旦应用加载,模拟器中没有任何事情发生.没有视频,没有,只是我的Apple TV模拟器中的空白半透明屏幕.
从HTTP源播放Apple TV应用程序的应用程序启动示例视频的正确方法是什么?
Ale*_*ley 11
你也可以使用TVML和TVMLJS https://developer.apple.com/library/prerelease/tvos/documentation/TVMLJS/Reference/TVJSFrameworkReference/
坚持'TVApplicationControllerDelegate'协议并添加一些属性.
AppDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate, TVApplicationControllerDelegate>
Run Code Online (Sandbox Code Playgroud)
...
@property (strong, nonatomic) TVApplicationController *appController;
@property (strong, nonatomic) TVApplicationControllerContext *appControllerContext;
Run Code Online (Sandbox Code Playgroud)
然后将以下内容添加到'didFinishLaunchingWithOptions'
AppDelegate.m
#define url @"http://localhost:8000/main.js"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.appControllerContext = [[TVApplicationControllerContext alloc] init];
NSURL *javascriptURL = [NSURL URLWithString:url];
self.appControllerContext.javaScriptApplicationURL= javascriptURL;
for (id key in launchOptions) {
id val=[launchOptions objectForKey:key];
NSLog(@"key=%@ value=%@", key, val);
if([val isKindOfClass:[NSString class]]) [self.appControllerContext.launchOptions objectForKey:val];
self.appController = [[TVApplicationController alloc] initWithContext:self.appControllerContext window:self.window delegate:self];
}
return YES;
}
Run Code Online (Sandbox Code Playgroud)
创建一个文件夹并添加以下文件
main.js
function launchPlayer() {
var player = new Player();
var playlist = new Playlist();
var mediaItem = new MediaItem("video", "http://trailers.apple.com/movies/focus_features/9/9-clip_480p.mov");
player.playlist = playlist;
player.playlist.push(mediaItem);
player.present();
//player.play()
}
//in application.js
App.onLaunch = function(options) {
launchPlayer();
}
Run Code Online (Sandbox Code Playgroud)
小心使用mediaItem中的这个url
设置您选择的模板.
index.tvml
<document>
<alertTemplate>
<title>…</title>
<description>…</description>
<button>
<text>…</text>
</button>
<text>…</text>
</alertTemplate>
</document>
Run Code Online (Sandbox Code Playgroud)
打开终端并导航到此文件夹然后运行
python -m SimpleHTTPServer 8000
Run Code Online (Sandbox Code Playgroud)
确保此处的端口是ObjC网址中的端口.Apple示例使用9001.
有关详细信息,请参阅这些教程
http://jamesonquave.com/blog/developing-tvos-apps-for-apple-tv-with-swift/ http://jamesonquave.com/blog/developing-tvos-apps-for-apple-tv-part- 2 /
我遇到的一个问题是尝试播放本地视频文件.它不起作用,有约束问题等.看起来你不能使用python播放视频,所以要么尝试apache或链接到网络上的视频.这SO答案指出我在那里.
在AppleTV上在您的应用中播放视频的最佳方式是AVKit的AVPlayerViewController.如果你使用AVKit,你可以免费获得很多东西.
您只需将该播放器添加到viewController的播放器属性中:
// instantiate here or in storyboard
AVPlayerViewController *viewController = [[AVPlayerViewController alloc] initWithNibName:nil bundle:nil];
viewController.player = player;
[self addChildViewController:viewController];
[self.view addSubview:viewController.view];
[viewController didMoveToParentViewController:self];
// setup constraints, etc.
// play the video
[player play];
Run Code Online (Sandbox Code Playgroud)
同样如下所述,请确保您尝试播放的视频来自HTTPS连接,或者您通过在plist中设置正确的标记来禁用App Transport Security.
我不喜欢与子视图等有关的答案.对于全屏播放,我使用以下(非ARC)代码:
// Play the stream
NSString *wifiStreamAddress = @"http://yourmoviefile.m3u8";
AVPlayer *player = [[AVPlayer alloc] initWithURL: [NSURL URLWithString: wifiStreamAddress] ];
AVPlayerViewController *playerViewController = [[AVPlayerViewController alloc] init];
playerViewController.player = player;
// Keep pointers to player and controller using retained properties:
self.player = player;
self.playerViewController = playerViewController;
[player release];
[playerViewController release];
[self presentViewController: playerViewController animated: true completion: ^{
[self.player play];
}];
Run Code Online (Sandbox Code Playgroud)
当您点击MENU按钮时,这非常简洁,动画显示和淡出回到上一个视图.此外,它使用所有标准功能的遥控器很好.
| 归档时间: |
|
| 查看次数: |
20630 次 |
| 最近记录: |