Skip to content

AVKIt의 기능 구현을 익히는 데에 도움을 주는 심화 프로젝트

Notifications You must be signed in to change notification settings

CodersHigh/AVKit_Deepening1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 

Repository files navigation

AVKit_Barebones

AVKit을 처음 접해 본다면 이 리포지토리를 먼저 참고해 보세요. 로컬 비디오를 재생하는 방법을 배웁니다. ⭐️



프로젝트 소개

  • AVKit의 기능 구현을 익히는 데에 도움을 주는 심화 프로젝트입니다.
  • AVKit을 통해 SwiftUI 기반의 (비디오 API를 활용해) 비디오를 받아와 재생하는 앱을 구현합니다.
AVKit_Deepening1.MP4


핵심 코드

비디오 API를 통해 비디오를 받아오고 재생하는 코드를 참고하세요.


비디오 받아오기

// 선택한 query가 변경될 때마다 호출하여, 해당 query에 맞는 비디오를 불러오는 메소드
func fetchVideo(query: Query) async {
    do {
        // 비디오 검색 URL 구하기
        guard let seachVideoURL = URL(string: "https://api.pexels.com/videos/search?query=\(query)&per_page=10&orientation=portrait") else {
            fatalError("Missing seachVideoURL")
        }
            
        // API 키 URL 구하기
        guard let searchAPIKEYURL = Bundle.main.url(forResource: "PexelsInfo", withExtension: "plist") else {
            fatalError("Missing searchAPIKEYURL")
        }
        guard let dictionary = NSDictionary(contentsOf: searchAPIKEYURL) else {
            fatalError("Missing dictionary")
        }
        let APIKEY = dictionary["API_KEY"] as? String
            
        // 구한 URL을 활용하여 URLRequest 생성하기
        var urlRequest = URLRequest(url: seachVideoURL)
        urlRequest.setValue(APIKEY, forHTTPHeaderField: "Authorization")
            
        // URLRequest를 통해 데이터 불러오기
        let (data, response) = try await URLSession.shared.data(for: urlRequest)
        guard (response as? HTTPURLResponse)?.statusCode == 200 else {
            fatalError("Error while fetching data")
        }
            
        // 데이터 디코딩하기 (사용할 수 있는 형태로 변환)
        let decoder = JSONDecoder()
        decoder.keyDecodingStrategy = .convertFromSnakeCase
        let decodedData = try decoder.decode(ResponseBody.self, from: data)
            
        // Published 변수인 videos 업데이트하기
        DispatchQueue.main.async {
            self.videos = []
            self.videos = decodedData.videos
        }
            
    } catch {
        print("Error fetching data from Pexels: \(error)")
    }
}

비디오 재생하기

struct VideoPlayView: View {
    var video: Video
    @State private var player = AVPlayer()
    
    var body: some View {
        VideoPlayer(player: player)
            .edgesIgnoringSafeArea(.all)
            .onAppear {
                // VideoPlayView가 나타났을 때 url 얻어서 플레이 시작
                if let link = video.videoFiles.first?.link {
                    player = AVPlayer(url: URL(string: link)!)
                    player.play()
                }
            }
    }
}

About

AVKIt의 기능 구현을 익히는 데에 도움을 주는 심화 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages