티스토리 뷰

이번에는 동영상에 대해 올려볼까 합니다.

이번편은 iOS에서 기본적으로 사용할 수 있는 플레이어를 사용할 예정이고요.

다음 편에서는 플레이어를 직접 커스텀하는 부분을 올려볼까합니다. 

 

참고로 미리 보여드리면 기본 제공 플레이어는 이렇게 생겼어요.

익숙한 모양이죠?

해당 플레이어를 만드실 분들은 아래 import를 추가해주세요!

import AVKit
import AVFoundation

 

근데 플레이어를 만들기 전에 동영상을 가져와야겠죠?

 

동영상의 경우 굉장히 다양한 방법으로 가져올 수 있습니다만 

딱 하나만 기억하시면 되요!

 

URL 만 있으면 바로 만들 수 있어요!

아래 코드에 정확한 URL 만 넣으면 작동하게 됩니다.

func setControllerUrl(setUrl : URL){
    let videoURL = setUrl
    let player = AVPlayer(url: videoURL)
    let playerViewController = AVPlayerViewController()
    playerViewController.player = player
    self.present(playerViewController, animated: true) {
        playerViewController.player!.play()
    }
}

사실 여기까지만 해도 완성이긴 하지만

예시를 3가지로 나누어 한번 해볼께요.

 

1. 영상을 특정 사이트 Url 로 넣는 경우 (이게 제일 쉽긴 해요.)

2. 앱 자체에 파일을 넣은 경우 

3. 앱 내부 폴더에 저장한 영상을 가져오는 경우

 

 

총 3가지로 나누어 확인해볼께요.

 

1. 영상을 특정 사이트 Url 로 넣는 경우 

- 저는 예시로 아래 링크를 넣어 진행하겠습니다.

- https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4

let animationUrl = "https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4"
setControllerUrl(setUrl : animationUrl)

2. 앱 자체에 파일을 넣은 경우 

- 앱 자체에 있는 파일을 재생할때에도 마찬가지로 Url 이 필요합니다.

- 그럴때는 아래처럼 Url 을 가져올 수 있습니다.

let videoSample = URL(fileURLWithPath: Bundle.main.path(forResource: "sampleVideo", ofType: "mp4")!)
// 저안에 파일 이름을 넣어주시면 됩니다.
setControllerUrl(setUrl : videoSample)

- 불편하신 분들은 아래 함수에 파일이름넣고 사용하셔도 됩니다.

 

 func setController(setString : String){
        let videoSample = URL(fileURLWithPath: Bundle.main.path(forResource: setString, ofType: "mp4")!)
        let player = AVPlayer(url: videoSample)
        let playerViewController = AVPlayerViewController()
        playerViewController.player = player
        self.present(playerViewController, animated: true) {
            playerViewController.player!.play()
        }
    }

3. 앱 내부 폴더에 저장한 영상을 가져오는 경우 

- 여기서 말하는 앱 내부 폴더는 앱 내부 Document 나 Tmp 같은 폴더에 저장된 파일을 의미합니다.

- 저는 Tmp 에 저장한 걸 불러오는걸 기준으로 설명드릴께요.

let tmpUrl = FileManager.default.temporaryDirectory
let fileName = "sample_video"
let videoUrl = tmpUrl.appendingPathComponent("\(fileName).mp4")
setControllerUrl(setUrl : videoUrl)

 

* 보너스 (썸네일 - 동영상 이미지)

여기까지 기본 영상 재생에 대해 다루어 봤는데요.

URL 을 사용해서 영상의 이미지도 가져오는게 가능하다는거 아시나요?

가져와서 썸네일로 사용하는 것도 나쁘지 않겠죠?

(단, 영상 전체를 가져와서 이미지를 자르는 것이기때문에 영상이 길면 이미지를 만드는데 시간이 걸릴 수 있습니다.)

func getThumbnailImage(forUrl url: URL) -> UIImage? {
    let asset: AVAsset = AVAsset(url: url)
    print(asset.duration) // 영상 전체 길이 확인 가능
    let imageGenerator = AVAssetImageGenerator(asset: asset)
    do {
        let thumbnailImage = try imageGenerator.copyCGImage(at: CMTimeMake(value: 3600, timescale: 60), actualTime: nil) 
        // 3600/60 초-> 1분후가 썸네일 
        return UIImage(cgImage: thumbnailImage)
        // 영상시작 1분후 화면을 이미지로 가져옴
    } catch let error {
        print(error)
    }
    return nil
}

실제로 실행하면 1분대 동영상의 모습을 이미지로 가져올수있습니다. 

어 하필이면 배모양이 찍혔네요;;

시간대를 잘 조절하면 알맞은 사진을 얻을 수 있겠죠?

 

 

일단 여기까지 기초적인 영상에 대한 내용을 정리해보았는데요.

도움이 되었으면 좋겠네요.

그럼 오늘도 파이팅입니다~

 

p.s.

저 플레이어 모양이 마음에 안드신 분들을 위해

시간날때 약간의(?) 수작업으로 만드는 방법을 올려볼까합니다.

댓글