24

空の 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 アプリのアプリ起動時にサンプル ビデオを再生する適切な方法は何ですか?

4

6 に答える 6

19

コードを tvOS サンプル プロジェクトに貼り付け、URL を置き換えて実行しました。

何も起こらなかった。ただし、App Transport Security が URL 要求をブロックしたことを示すログ エントリがあるという事実は別として。

そこで、Info.plist に向かい、ATS を無効にすると、次回の起動時にビデオが問題なく表示されました。

したがって、HTTPS 以外の URL も使用している場合は、この問題に遭遇する可能性が非常に高くなります。この問題は、HTTPS URL を使用するか、ATS を完全に無効にするか、Info.plist で特定の非 HTTPS URL を許可することで簡単に修正できます。

PS:このビデオをテスト用に使用しました。

于 2015-09-10T08:27:10.573 に答える
5

サブビューなどを台無しにした回答が気に入らなかった.フルスクリーン再生の場合、次の(非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];
}];

これは非常にうまく機能し、プレゼンテーションをアニメーション化し、[メニュー] ボタンをタップすると前のビューに戻ります。また、すべての標準機能を使用したリモコンとの相性も抜群です。

于 2015-10-11T17:04:12.420 に答える
1

それは私のために働いています。あなたに役立つかもしれません

 -(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];

}
于 2015-12-29T06:13:29.083 に答える
-1

Swift版 AVPlayerViewControllerを継承したPlayViewControllerを作成します。再生ボタンのあるViewControllerに、そのような機能を追加します

@IBAction func onClickPlay(sender: AnyObject) {
    let playerVC = PlayerViewController()
    playerVC.playVideo(urlString)
    [self.presentViewController(playerVC, animated: true, completion: nil)]
}

PlayerViewController で

func playVimeoVideo(link : String) {

    player = AVPlayer(URL: NSURL(string: link)!)   
    player?.play()
}

注意 質問と一部の回答は、Apple TV で再生できるのは末尾に「.mp4」が付いている URL のみであると誤解を招く可能性があります。初めて投稿を見た時はそう思いました。それは本当ではない。実際、AVPlayerViewController を使用すると、Vimeo ストリーミング ビデオを再生できます。ストリーム動画へのリンクはhttps://vimeo.com/92655878のようではありません。このリンクからダウンロードできるjsonファイルから抽出することにより、Vimeoサイトから取得することができます

let link = "https://vimeo.com/api/oembed.json?url=https%3A//vimeo.com/" + videoId

ビデオの正しい URL を取得するには、Vimeo Pro ユーザー アクセスを使用して、特定のビデオのストリーム リンクを取得する必要があります。

于 2016-05-04T05:11:17.927 に答える