MacOS(Objective-C)で動画を再生する

# はじめに
MacOS(Objective-C)で動画どうやって再生するのかなとふと思って、調査しても情報があまりなかったのでこちらでまとめていきます。
いまさらObjective-Cを使うのは、Unityの動画プラグイン作りたいと思ったからです。
Objective-CとMacのデスクトップアプリの知識がほとんどない状態で書いているのでご了承ください。

# 公式ドキュメント
[AVFoundation公式ドキュメント](https://developer.apple.com/av-foundation/)

[iOSのサンプルプロジェクト](https://developer.apple.com/library/archive/samplecode/AVFoundationSimplePlayer-iOS/Introduction/Intro.html)はあったのですが、MacOSのサンプルが無かったのでこちらを参考にシンプルにまとめていきます。

# 手順

XCode Version 12.4

## プロジェクト作成

macOSのAppを選択
![Screen Shot 2022-08-03 at 19.03.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188476/43afcd55-99cc-6e16-f64c-7f16926de28a.png)

言語はObjective-Cで
![Screen Shot 2022-08-03 at 19.03.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188476/2b30810f-ce23-a31f-36ac-ca1ff97af447.png)

## Framework追加

AVFoundationとAVKitを追加
![Screen Shot 2022-08-03 at 19.05.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188476/a676bcd3-a582-7b23-9128-c4c24569e094.png)

## 適当な動画(mov)ファイルをプロジェクトに追加
[iOSのサンプルプロジェクト](https://developer.apple.com/library/archive/samplecode/AVFoundationSimplePlayer-iOS/Introduction/Intro.html)に入っていたアザラシの動画をプロジェクトに追加。

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3138383437362f61313161373533332d343631622d363430652d616162362d3237303139363363633633652e706e67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188476/ff426ac7-44e0-21ed-ed1f-e48901a030ee.png)


Copy items if neededにチェックを入れる
![Screen Shot 2022-08-03 at 19.10.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188476/4825bc5d-0479-61cc-bd8a-f6f3a9ed74d0.png)

## storyboardにAVPlayerViewを追加

![Screen Shot 2022-08-03 at 19.14.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188476/061368bc-b598-75c2-c123-d24339d4d4ef.png)


![Screen Shot 2022-08-03 at 19.36.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188476/bcd644f6-b6d7-20ce-203f-acbc02163d6c.png)


## ViewController.hにAVPlayerViewの参照を追加

画面分割でヘッダファイルとstoryboardが両方表示されるようにする
![Screen Shot 2022-08-03 at 19.20.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188476/2a5e090d-79eb-9fdb-bfba-bb6bf6bd4f5c.png)

一度ViewController.hを以下の状態に

```objectivec
#import <AVFoundation/AVFoundation.h>
#import <AVKit/AVPlayerView.h>

@interface ViewController : NSViewController

@property (weak) IBOutlet AVPlayerView *playerView;

@end
```

Controlキーを押しながらドラッグ
![Screen Shot 2022-08-03 at 19.27.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188476/d192898c-8855-1d0c-50f6-842cb2295e3c.png)

## ViewController.mを編集

```objective_c
#import "ViewController.h"

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view.
    NSURL *movieURL = [[NSBundle mainBundle] URLForResource:@"ElephantSeals" withExtension:@"mov"];
    AVURLAsset* avAsset = [AVURLAsset assetWithURL:movieURL];
    AVPlayerItem* playerItem = [AVPlayerItem playerItemWithAsset:avAsset];
    self.playerView.player = [[AVPlayer alloc] initWithPlayerItem:playerItem];
}


- (void)setRepresentedObject:(id)representedObject {
    [super setRepresentedObject:representedObject];

    // Update the view, if already loaded.
}


@end
```

# 実行結果

![Screen Shot 2022-08-03 at 19.38.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188476/98062002-0cfb-d305-5fe0-018abe0ca2ad.png)

# 最後に
結構シンプルに動画を再生することができました。
UIが絡んでくると、手順書くのが大変ですね・・・
Unity上で動画を再生することが最終的な目標なので、まだ戦いは続きます・・・