티스토리 뷰

반응형



iOS에서 youtube 동영상 재생하기.

 기존에는 webview를 통해 youtube영상을 재생했지만 구글에서 라이브러리를 제공해주고 있기에 관련 작업이 있어 사용해 보았다.


구글 참조 문서.

https://developers.google.com/youtube/v3/guides/ios_youtube_helper

위 문서의 cocoaPods 부분을 제외하고 "Adding a YTPlayerView via Interface Builder or the Storyboard" 해당 부분부터 따라하면 된다. 코코팟을 처음 써봤는데 뭔가 싶어 애좀 먹었다. 셋팅은 가능 했지만 원하는대로 되지 않아 결국 포기하고 라이브러리를 수동으로 설치하였다. 추가로 유투브 라이브러리는 설치가 되지 않았다. 다른건 되는데...


진행 순서.

1. https://github.com/youtube/youtube-ios-player-helper 에서 셈플 코드를 다운 받는다.

2. 적용할 프로젝트에 Assets폴더와, Classes폴더에 들어있는 YTPlayerView.h, YTPlayerView.m파일을 추가한다.

3. 도큐먼트 문서와 같이 스토리보드 상에 View를 생성하고 Class를 YTPlayerView로 설정한 후 IBOutlet으로 연결해 준다.

4. 동영상을 재생시킬 ViewController에서 영상을 불러와 재생한다. 적용한 소스는 다음과 같다.

//ViewController.h

#import <UIKit/UIKit.h>

#import "YTPlayerView.h"

@interface ViewController : UIViewController <YTPlayerViewDelegate>

@end

//ViewController.m

@interface ViewController ()

@property (weak, nonatomic) IBOutlet YTPlayerView *playerView;

@end

@implementation ViewController


- (void)viewDidLoad

{

    [super viewDidLoad];    

    [self.playerView loadWithVideoId:@"GRxofEmo3HA"];

    self.playerView.delegate = self;

}


-(void)playerView:(YTPlayerView *)playerView didChangeToState:(YTPlayerState)state

{

    switch (state) {

        case kYTPlayerStateUnstarted:

            NSLog(@"Started kYTPlayerStateUnstarted");

            break;

        case kYTPlayerStateEnded:

            NSLog(@"Paused kYTPlayerStateEnded");

            break;

        case kYTPlayerStatePlaying:

            NSLog(@"kYTPlayerStatePlaying");

            break;

        case kYTPlayerStatePaused:

            NSLog(@"kYTPlayerStatePaused");

            break;

        case kYTPlayerStateBuffering:

            NSLog(@"kYTPlayerStateBuffering");

            break;

        case kYTPlayerStateQueued:

            NSLog(@"kYTPlayerStateQueued");

            break;

        case kYTPlayerStateUnknown:

            NSLog(@"kYTPlayerStateUnknown");

            break;

        default:

            break;

    }

}

- (IBAction)playVideo:(id)sender {

    NSLog(@"play state : %ld",self.playerView.playerState);

    

    if(self.playerView.playerState != kYTPlayerStatePlaying){

        [self.playerView playVideo];

    }

}

- (IBAction)stopVideo:(id)sender {

    [self.playerView stopVideo];

    

    [self.playerView loadWithVideoId:@"GRxofEmo3HA"];

}


-(void)playerView:(YTPlayerView *)playerView receivedError:(YTPlayerError)error

{

    NSLog(@"receivedError : %ld", error);

}


-(void)playerViewDidBecomeReady:(YTPlayerView *)playerView

{    

}


5. 상황에 맞게 플레이어를 자바스크립트를 통해 컨트롤 할 수 있다.  참조 URL 

NSDictionary *playerVars = @{@"playsinline" : @0@"modestbranding" : @1 };

    [self.playerView loadWithVideoId:@"GRxofEmo3HA" playerVars:playerVars];



6. 에러가 발생할 경우 다음과 같이 조치하였다.

//NSCocoaErrorDomain 258

다운로드 경로 : https://github.com/youtube/youtube-ios-player-helper

youtube-ios-player-helper-master.zip 파일에 들어 있는 Assets폴더를 해당 프로젝트에 추가하면 해결 됨.

또는 YTPlayerView.m 파일에서 경로를 변경해 주어도 됨.

NSString *path = [[NSBundle mainBundle] pathForResource:@"YTPlayerView-iframe-player"

                                                   ofType:@"html"

                                              inDirectory:@""];


추가 사항

1. 동영상 전체화면 재생 시 Done을 눌러 화면을 닫았어도 2~3초후 영상이 계속해서 전체화면으로 재생되는 문제가 있다.

2. 'playsinline'을 1로 설정하고 일시정지 하여도 자동으로 재생되는 문제가 발생한다.



반응형
댓글
반응형