空の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];
}
アプリがロードされると、シミュレーターでは何も起こりません。 Apple TVシミュレーター。
HTTPソースからのApple TVアプリのアプリ起動時にサンプル動画を再生する適切な方法は何ですか?
TvOSサンプルプロジェクトにコードを貼り付け、URLを置き換えて実行しました。
何も起こらなかった。ただし、App Transport SecurityがURL要求をブロックしたことを通知するログエントリがあるという事実を除きます。
そこで、私はInfo.plistに行きました disabled ATS そして次の起動時にビデオはうまく表示されました。
したがって、非HTTPS URLも使用している場合は、HTTPS URLを使用するか、ATSを完全に無効にするか、Info.plistで特定の非HTTPS URLを許可することで簡単に修正できるこの問題が発生する可能性が高いです。
追伸:テストに この動画 を使用しました。
TVMLとTVMLJSを使用することもできます https://developer.Apple.com/library/prerelease/tvos/documentation/TVMLJS/Reference/TVJSFrameworkReference/
「TVApplicationControllerDelegate」プロトコルに準拠し、いくつかのプロパティを追加します。
AppDelegate.h
@interface AppDelegate : UIResponder <UIApplicationDelegate, TVApplicationControllerDelegate>
...
@property (strong, nonatomic) TVApplicationController *appController;
@property (strong, nonatomic) TVApplicationControllerContext *appControllerContext;
次に、「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;
}
フォルダーを作成し、次のファイルを追加します
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();
}
mediaItemでこれに注意url
任意の template を設定します。
index.tvml
<document>
<alertTemplate>
<title>…</title>
<description>…</description>
<button>
<text>…</text>
</button>
<text>…</text>
</alertTemplate>
</document>
ターミナルを開き、このフォルダーに移動してから実行します
python -m SimpleHTTPServer 8000
ここのポートがObjC URLのポートであることを確認してください。 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 /
私が遭遇した問題の1つは、ローカルビデオファイルを再生しようとしたことです。これは機能せず、制約の問題などがありました。動画を再生するためにpythonを使用できないため、Apacheを試すか、Web上の動画にリンクします。 [〜#〜] 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];
また、以下で説明するように、再生しようとしているビデオが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];
}];
これは本当にきれいに機能し、プレゼンテーションをアニメーション化し、MENUボタンをタップすると前のビューにフェードバックします。また、すべての標準機能を使用したリモートコントロールでも優れた機能を発揮します。
私のために働いています。あなたに役立つかもしれません
-(void)playAction
{
AVPlayerViewController *viewController = [[AVPlayerViewController alloc] initWithNibName:nil bundle:nil];
viewController.player = player;
[self addChildViewController:viewController];
[self.view addSubview:viewController.view];
[viewController didMoveToParentViewController:self];
// play the video
[player play];
}